From d5bd5e1377a659abdb91fe7920bf9490eebf1477 Mon Sep 17 00:00:00 2001 From: slorber Date: Thu, 8 Aug 2024 15:39:28 +0000 Subject: [PATCH] deploy: c58fcbdecd87cfb7418ff29f6a08ec4c14fdc71d --- assets/js/028951d7.a545a47f.js | 1 - assets/js/028951d7.f67d27bc.js | 1 + assets/js/{03a06760.edc58e2c.js => 03a06760.e10a09ce.js} | 2 +- assets/js/03f86864.6595d78f.js | 1 + assets/js/03f86864.df486eb3.js | 1 - assets/js/048b0d50.78627f11.js | 1 + assets/js/048b0d50.aeab80de.js | 1 - assets/js/{060daea9.f31224ce.js => 060daea9.45a363bf.js} | 2 +- assets/js/06c6ffc3.d04b6917.js | 1 + assets/js/06c6ffc3.ecda5066.js | 1 - assets/js/072728dc.4b64ee6f.js | 1 + assets/js/072728dc.a6172225.js | 1 - assets/js/07d8cde9.2eb6e84d.js | 1 - assets/js/07d8cde9.bd13d19f.js | 1 + assets/js/0938a5e1.c5e1ee3a.js | 1 + assets/js/0938a5e1.cf38cec4.js | 1 - assets/js/0a818389.217954cb.js | 1 + assets/js/0a818389.608cc21a.js | 1 - assets/js/{0b6cd89a.bdb8d8c6.js => 0b6cd89a.89d93ce3.js} | 2 +- assets/js/0b7c2a4a.20ebd1ec.js | 1 - assets/js/0b7c2a4a.bbc63202.js | 1 + assets/js/{0bc851e0.f68c4114.js => 0bc851e0.e64ebecc.js} | 2 +- assets/js/0c7845dd.47b3cdba.js | 1 + assets/js/0c7845dd.585f79ef.js | 1 - assets/js/{0e4d8110.3a61cab3.js => 0e4d8110.d11ec50d.js} | 2 +- assets/js/0e9c6edc.4a173775.js | 1 - assets/js/0e9c6edc.9a5526a6.js | 1 + assets/js/1267474e.afae71c6.js | 1 - assets/js/1267474e.e1aa074c.js | 1 + assets/js/138ea42e.e47f9065.js | 1 - assets/js/138ea42e.fcc3a7ed.js | 1 + assets/js/141512d1.08f4755e.js | 1 + assets/js/141512d1.30f79dfe.js | 1 - assets/js/1582a4a4.8015230d.js | 1 - assets/js/1582a4a4.e330cf6e.js | 1 + assets/js/16f6cad8.40251c44.js | 1 - assets/js/16f6cad8.e9cb8ea0.js | 1 + assets/js/16f8f4fb.27257cb6.js | 1 - assets/js/16f8f4fb.a0c63b77.js | 1 + assets/js/{17e8a747.0db8cf49.js => 17e8a747.5ddeda1c.js} | 2 +- assets/js/1864f992.048c87cc.js | 1 + assets/js/1864f992.a26ff588.js | 1 - assets/js/1d8d7b8d.4bf92fa5.js | 1 - assets/js/1d8d7b8d.669adac3.js | 1 + assets/js/{1f0f0e17.0e0db339.js => 1f0f0e17.b01541a6.js} | 2 +- assets/js/{20139c40.82ff7d15.js => 20139c40.2ff10ca4.js} | 2 +- assets/js/201d0633.247feb61.js | 1 - assets/js/201d0633.8b6d2b0d.js | 1 + assets/js/209ff87f.388316b4.js | 1 + assets/js/209ff87f.cf4d83d3.js | 1 - assets/js/{228a014d.00a74b9f.js => 228a014d.f00d9b1b.js} | 2 +- assets/js/2451b334.ab2b4f49.js | 1 + assets/js/2451b334.e8abb5e1.js | 1 - assets/js/24dd9243.3194cfc3.js | 1 - assets/js/24dd9243.761ce3a1.js | 1 + assets/js/26af6b06.44d508ba.js | 1 - assets/js/26af6b06.f2eefb69.js | 1 + assets/js/{276a1994.6aa90c48.js => 276a1994.d8b54bbe.js} | 2 +- assets/js/{2c6d53a8.7b14744f.js => 2c6d53a8.694031dd.js} | 2 +- assets/js/2d0d74c6.b5e9b4aa.js | 1 - assets/js/2d0d74c6.cc3d2f3e.js | 1 + assets/js/2f283cc0.386d1a82.js | 1 - assets/js/2f283cc0.c46d8806.js | 1 + assets/js/305daa1e.06e12546.js | 1 + assets/js/305daa1e.8a6622f1.js | 1 - assets/js/3103a69b.0e0851f1.js | 1 + assets/js/3103a69b.65d58c79.js | 1 - assets/js/32a09314.87c58ad4.js | 1 - assets/js/32a09314.abcbdb0a.js | 1 + assets/js/{33a17176.5ab7cf5f.js => 33a17176.1cc471ed.js} | 2 +- assets/js/{33bfb584.9bf96cb8.js => 33bfb584.01fe6a89.js} | 2 +- assets/js/35123c02.1c5fa6f5.js | 1 - assets/js/35123c02.a8793fee.js | 1 + assets/js/{3716f59c.4ee61080.js => 3716f59c.099aa99c.js} | 2 +- assets/js/{38dd9662.a4cd3930.js => 38dd9662.1b2f48f9.js} | 2 +- assets/js/39485f13.22fab085.js | 1 - assets/js/39485f13.c3fc6f5b.js | 1 + assets/js/3955af78.28350c84.js | 1 + assets/js/3955af78.67b994ab.js | 1 - assets/js/{3c03c7ff.5bff0ea3.js => 3c03c7ff.f2fabf4a.js} | 2 +- assets/js/3c0a97de.2c136b71.js | 1 - assets/js/3c0a97de.bc4c0988.js | 1 + assets/js/3c616b11.eff529cc.js | 1 + assets/js/3c616b11.fbe1d614.js | 1 - assets/js/3ce9624a.38af843c.js | 1 + assets/js/3ce9624a.56b819b9.js | 1 - assets/js/3dd2dc02.07cf83ff.js | 1 - assets/js/3dd2dc02.53a491cb.js | 1 + assets/js/3e206144.1b2f4db1.js | 1 + assets/js/3e206144.4221eb08.js | 1 - assets/js/3ef80f0b.2364cdbf.js | 1 - assets/js/3ef80f0b.539b4e84.js | 1 + assets/js/4052c491.7f2169f1.js | 1 + assets/js/4052c491.ff140cf7.js | 1 - assets/js/4228388b.9f2a3468.js | 1 + assets/js/4228388b.b39403da.js | 1 - assets/js/42c2afdc.1f9f467b.js | 1 + assets/js/42c2afdc.793eb051.js | 1 - assets/js/447738d4.3ee3af50.js | 1 + assets/js/447738d4.fd5a5627.js | 1 - assets/js/46f5ed35.cc62c165.js | 1 + assets/js/46f5ed35.d7ead690.js | 1 - assets/js/{492798ca.1bafc123.js => 492798ca.8a687a56.js} | 2 +- assets/js/{4994aa22.39e7478d.js => 4994aa22.4f69a4d4.js} | 2 +- assets/js/4a3883fa.06d308e9.js | 1 + assets/js/4a3883fa.417b548d.js | 1 - assets/js/4ab187ba.8f63174d.js | 1 - assets/js/4ab187ba.df1715de.js | 1 + assets/js/{4c9d8eaa.04f4758a.js => 4c9d8eaa.3b7863e6.js} | 2 +- assets/js/50a3e386.4565f084.js | 1 + assets/js/50a3e386.ec7ec23e.js | 1 - assets/js/514f0e36.58b7e8ff.js | 1 + assets/js/514f0e36.f693a915.js | 1 - assets/js/519746e1.01902e9c.js | 1 + assets/js/519746e1.a6c23f5f.js | 1 - assets/js/519fdddf.057c0eb7.js | 1 - assets/js/519fdddf.8b47b825.js | 1 + assets/js/{520a8178.7b200511.js => 520a8178.d9aec79b.js} | 2 +- assets/js/54542266.983828fc.js | 1 + assets/js/54542266.d1df2f13.js | 1 - assets/js/554438a9.75168a63.js | 1 + assets/js/554438a9.f543f6a4.js | 1 - assets/js/55a7f034.1d50f3fc.js | 1 + assets/js/55a7f034.a67f695b.js | 1 - assets/js/5665a0fb.004d382b.js | 1 - assets/js/5665a0fb.1c6e6722.js | 1 + assets/js/575718d1.22b9b800.js | 1 + assets/js/575718d1.b42e003b.js | 1 - assets/js/5785f4e1.0bc2a62b.js | 1 - assets/js/5785f4e1.e0b3f5e4.js | 1 + assets/js/{59cb67ce.8773c246.js => 59cb67ce.64dd4037.js} | 2 +- assets/js/5c640cab.ae4cad82.js | 1 - assets/js/5c640cab.ea2a1918.js | 1 + assets/js/{5c7aa639.8f25b359.js => 5c7aa639.1c50ec7a.js} | 2 +- assets/js/5e335fc2.1634c4ae.js | 1 - assets/js/5e335fc2.5f5d04c2.js | 1 + assets/js/5f61b80e.193ffb82.js | 1 - assets/js/5f61b80e.1d5f44a7.js | 1 + assets/js/6199064d.42c1523f.js | 1 - assets/js/6199064d.e76ca0ce.js | 1 + assets/js/{62b37705.383d9f23.js => 62b37705.89086592.js} | 2 +- assets/js/{641734b9.8fa44043.js => 641734b9.5796a7cf.js} | 2 +- assets/js/{64dfb3e9.28333cc1.js => 64dfb3e9.7fc52958.js} | 2 +- assets/js/67cff4f8.7037dea6.js | 1 - assets/js/67cff4f8.812f0eab.js | 1 + assets/js/6967621f.6eede3c5.js | 1 + assets/js/6967621f.d3c70748.js | 1 - assets/js/6a2ff064.11a025c9.js | 1 + assets/js/6a2ff064.52828ebc.js | 1 - assets/js/{6c065aab.6c1584b5.js => 6c065aab.12abde69.js} | 2 +- assets/js/6c1df059.6404561b.js | 1 + assets/js/6c1df059.c1d4e217.js | 1 - assets/js/6ca75a11.24f63f42.js | 1 + assets/js/6ca75a11.d5660fb2.js | 1 - assets/js/6e08c139.476eddf3.js | 1 - assets/js/6e08c139.fc1ad122.js | 1 + assets/js/{6e7f3c19.e661d904.js => 6e7f3c19.505c4770.js} | 2 +- assets/js/6e8cf259.0fada8ce.js | 1 + assets/js/6e8cf259.2b1eca46.js | 1 - assets/js/6f742216.119696d7.js | 1 - assets/js/6f742216.b3a2b292.js | 1 + assets/js/706279d4.22d9123c.js | 1 + assets/js/706279d4.889e2a0b.js | 1 - assets/js/{70e09343.c8592c36.js => 70e09343.a9dd10a6.js} | 2 +- assets/js/758e69f6.3dc4146c.js | 1 - assets/js/758e69f6.476fe50a.js | 1 + assets/js/76134b9e.4b236a0d.js | 1 - assets/js/76134b9e.df47e244.js | 1 + assets/js/771ca8b2.4482ab31.js | 1 + assets/js/771ca8b2.b64324e7.js | 1 - assets/js/772c972a.5399d41c.js | 1 - assets/js/772c972a.f66530ef.js | 1 + assets/js/{77da816e.88fda49c.js => 77da816e.4be32908.js} | 2 +- assets/js/77eb9b8f.678d97e2.js | 1 + assets/js/77eb9b8f.8c1862af.js | 1 - assets/js/7a272146.0fcf375c.js | 1 - assets/js/7a272146.601bb116.js | 1 + assets/js/7ada4fa6.614c8638.js | 1 - assets/js/7ada4fa6.d96eb120.js | 1 + assets/js/7d1ac6e6.0b3154cd.js | 1 + assets/js/7d1ac6e6.b2da6763.js | 1 - assets/js/7f3dfa04.024d4113.js | 1 + assets/js/7f3dfa04.98d62f8c.js | 1 - assets/js/{7fdd8ddf.1cbdb978.js => 7fdd8ddf.a2c064f2.js} | 2 +- assets/js/{8075f6fd.8ce59098.js => 8075f6fd.4bab1959.js} | 2 +- assets/js/82425aa0.27bb2a57.js | 1 + assets/js/82425aa0.d6389b4b.js | 1 - assets/js/828be2eb.6e76e4dc.js | 1 + assets/js/828be2eb.7b533920.js | 1 - assets/js/82de272a.154369da.js | 1 - assets/js/82de272a.949b6d95.js | 1 + assets/js/{85d61fbd.b65eb27b.js => 85d61fbd.a565aa16.js} | 2 +- assets/js/{86e3a3d9.bb7dc239.js => 86e3a3d9.414cd1e7.js} | 2 +- assets/js/{87e9b44c.bb4571b1.js => 87e9b44c.831666b0.js} | 2 +- assets/js/{88d0be04.c8c30418.js => 88d0be04.99ab8af0.js} | 2 +- assets/js/891c0dad.8b56e88f.js | 1 + assets/js/891c0dad.aa5ccbc2.js | 1 - assets/js/8a603d1e.69fbc0da.js | 1 + assets/js/8a603d1e.a969af49.js | 1 - assets/js/8ef3f86c.bee61914.js | 1 - assets/js/8ef3f86c.e69496ee.js | 1 + assets/js/{90e57dc7.81ed473e.js => 90e57dc7.739eeaaf.js} | 2 +- assets/js/{91b203fb.02f34cb4.js => 91b203fb.9bde2e6b.js} | 2 +- assets/js/91cd22f1.82384163.js | 1 - assets/js/91cd22f1.8e6d00c5.js | 1 + assets/js/945e072c.cbb98227.js | 1 - assets/js/945e072c.f51bc0fd.js | 1 + assets/js/95515391.2a532583.js | 1 + assets/js/95515391.ecc8f03c.js | 1 - assets/js/95e8e4ff.5d7a528e.js | 1 - assets/js/95e8e4ff.a82c2034.js | 1 + assets/js/972d9d57.8cb6831e.js | 2 ++ ...c127c7.js.LICENSE.txt => 972d9d57.8cb6831e.js.LICENSE.txt} | 0 assets/js/972d9d57.adc127c7.js | 2 -- assets/js/975c6d52.c03af83f.js | 1 + assets/js/975c6d52.c918bd26.js | 1 - assets/js/979385f4.2bc8d15b.js | 1 - assets/js/979385f4.733b6197.js | 1 + assets/js/98b4a860.57875e14.js | 1 + assets/js/98b4a860.e515a6a2.js | 1 - assets/js/9e287d93.5e1bd715.js | 1 + assets/js/9e287d93.f67bcbd5.js | 1 - assets/js/9f9142d7.07738ce3.js | 1 - assets/js/9f9142d7.443c2759.js | 1 + assets/js/a05ec3a8.30e202fd.js | 1 + assets/js/a05ec3a8.83499505.js | 1 - assets/js/a1286a82.0a97aae7.js | 1 + assets/js/a1286a82.83e52806.js | 1 - assets/js/a1da7a09.9aa00060.js | 1 + assets/js/a1da7a09.e5058e2b.js | 1 - assets/js/a1ff2305.08305e81.js | 1 + assets/js/a1ff2305.6fc5d56a.js | 1 - assets/js/a3aa32e9.2dc104ea.js | 1 + assets/js/a3aa32e9.3100cd87.js | 1 - assets/js/a4c9d663.94c79ff6.js | 1 - assets/js/a4c9d663.9cad6a46.js | 1 + assets/js/a535a6cd.08c0cd42.js | 1 - assets/js/a535a6cd.ef2bc977.js | 1 + assets/js/{a53a71e5.adf265f8.js => a53a71e5.b57f5c81.js} | 2 +- assets/js/a5816f92.becf7fcc.js | 1 + assets/js/a5816f92.dca2b71a.js | 1 - assets/js/a68a7a4e.76d7a376.js | 1 - assets/js/a68a7a4e.9e76bc2f.js | 1 + assets/js/{a715936c.71c14f61.js => a715936c.07dd1c25.js} | 2 +- assets/js/aa18a71c.6bb80982.js | 1 - assets/js/aa18a71c.e9264cdf.js | 1 + assets/js/ad5b23ac.935d17a0.js | 1 + assets/js/ad5b23ac.d062ddb3.js | 1 - assets/js/aed6c7bc.63ab3448.js | 1 - assets/js/aed6c7bc.c15fbb0c.js | 1 + assets/js/b1a9994a.84bce478.js | 1 - assets/js/b1a9994a.9f2b372e.js | 1 + assets/js/b2f737a9.3808eb1d.js | 1 - assets/js/b2f737a9.46067ce0.js | 1 + assets/js/{b4cf731e.803166f2.js => b4cf731e.4d5b36f4.js} | 2 +- assets/js/b54091ce.9d00e331.js | 1 - assets/js/b54091ce.ec9c61a5.js | 1 + assets/js/b6b7bfe6.06238b12.js | 1 + assets/js/b6b7bfe6.9cb1c582.js | 1 - assets/js/b85e7ff6.0bda7d25.js | 1 + assets/js/b85e7ff6.990f4d33.js | 1 - assets/js/ba61d949.039d2e97.js | 1 - assets/js/ba61d949.9ff8f4d2.js | 1 + assets/js/bc770e2d.9cb708a5.js | 1 - assets/js/bc770e2d.e9bd315f.js | 1 + assets/js/bcbb32e8.55118bd0.js | 1 + assets/js/bcbb32e8.56140673.js | 1 - assets/js/{bce2ffab.844e1614.js => bce2ffab.1938d33e.js} | 2 +- assets/js/{bd7149c1.588fb933.js => bd7149c1.95d0c9b7.js} | 2 +- assets/js/{bdab9796.40498668.js => bdab9796.393c51d9.js} | 2 +- assets/js/{bfd9bf94.1a7759ac.js => bfd9bf94.d3cd2eb4.js} | 2 +- assets/js/c00eca4d.287e4cb1.js | 1 + assets/js/c00eca4d.f0a1b3c1.js | 1 - assets/js/{c459a19d.fe947fe5.js => c459a19d.9dd00d98.js} | 2 +- assets/js/c4990fee.d719caa0.js | 1 - assets/js/c4990fee.d89a5ffc.js | 1 + assets/js/c4ace355.2197ea25.js | 1 + assets/js/c4ace355.47062305.js | 1 - assets/js/c56c55ab.71d559f7.js | 1 - assets/js/c56c55ab.fcf328cb.js | 1 + assets/js/c6f10a23.1479a269.js | 1 - assets/js/c6f10a23.fc3af2f7.js | 1 + assets/js/{c73a8bd2.66036a25.js => c73a8bd2.691d390b.js} | 2 +- assets/js/c74d1c35.380abcde.js | 1 + assets/js/c74d1c35.c4df3413.js | 1 - assets/js/c762c146.487cab34.js | 1 - assets/js/c762c146.a49779d6.js | 1 + assets/js/c7ca486a.0a52a3a5.js | 1 + assets/js/c7ca486a.75045551.js | 1 - assets/js/ca51e50c.160f4c02.js | 1 + assets/js/ca51e50c.a6e6ceb0.js | 1 - assets/js/cac92b6a.105f0d9e.js | 1 + assets/js/cac92b6a.ed7e1348.js | 1 - assets/js/cbb899e4.259f5937.js | 1 + assets/js/cbb899e4.c79dea69.js | 1 - assets/js/ce3b59e7.d074ad04.js | 1 + assets/js/ce3b59e7.eac3b93a.js | 1 - assets/js/ce5880b7.0e03cfb9.js | 1 - assets/js/ce5880b7.f242886e.js | 1 + assets/js/d03b1fb7.22ca49a5.js | 1 - assets/js/d03b1fb7.99c16144.js | 1 + assets/js/d062d21d.225b8cac.js | 1 - assets/js/d062d21d.f56449a6.js | 1 + assets/js/d182442f.b2275baa.js | 1 + assets/js/d182442f.f73526ab.js | 1 - assets/js/d2551a9d.47319f0d.js | 1 - assets/js/d2551a9d.c7f70c2f.js | 1 + assets/js/d2a1308d.4c126cda.js | 1 - assets/js/d2a1308d.6fab3ce6.js | 1 + assets/js/d3d3b96d.182dcee0.js | 1 - assets/js/d3d3b96d.f252ce8a.js | 1 + assets/js/d7206776.4617d546.js | 1 + assets/js/d7206776.d9f8f002.js | 1 - assets/js/d86891f4.414f3372.js | 1 + assets/js/d86891f4.47b4468c.js | 1 - assets/js/d957216c.c2982f30.js | 1 + assets/js/d957216c.e4c227bd.js | 1 - assets/js/dd4c326b.3dc423d4.js | 1 - assets/js/dd4c326b.d52daf3b.js | 1 + assets/js/dd5f7850.689b1b59.js | 1 - assets/js/dd5f7850.e61c3d89.js | 1 + assets/js/ddd8d528.5d803040.js | 1 + assets/js/ddd8d528.919bc174.js | 1 - assets/js/dec47d54.6ae2b72d.js | 1 + assets/js/dec47d54.a7e312a0.js | 1 - assets/js/df056c8b.59453417.js | 1 + assets/js/df056c8b.771fc642.js | 1 - assets/js/df21cc78.64a490cd.js | 1 - assets/js/df21cc78.980cb4d4.js | 1 + assets/js/{dfef153c.c36f1d8e.js => dfef153c.b7c16e05.js} | 2 +- assets/js/e060feb7.2f7db6bb.js | 1 - assets/js/e060feb7.ca664b24.js | 1 + assets/js/e4d2c113.6719ae2f.js | 1 - assets/js/e4d2c113.8a0285e3.js | 1 + assets/js/e575fb7e.7820dedb.js | 1 + assets/js/e575fb7e.cb22dab0.js | 1 - assets/js/e65a01b4.3c7e68e3.js | 1 + assets/js/e65a01b4.ae2b2504.js | 1 - assets/js/e6a60088.3169859a.js | 1 - assets/js/e6a60088.e5046c0d.js | 1 + assets/js/e79f4725.42860e58.js | 1 + assets/js/e79f4725.dbdf675c.js | 1 - assets/js/e818fdac.3cd718d9.js | 1 + assets/js/e818fdac.e199bd51.js | 1 - assets/js/e95d6894.5aab0ed6.js | 1 - assets/js/e95d6894.febe7280.js | 1 + assets/js/ee0ff195.80028bb1.js | 1 + assets/js/ee0ff195.8f25fe84.js | 1 - assets/js/{ee258e29.02b659e2.js => ee258e29.cf83fc06.js} | 2 +- assets/js/ee45215e.a49a859f.js | 1 - assets/js/ee45215e.d0b4acb8.js | 1 + assets/js/{ee712ef6.3ea25414.js => ee712ef6.e4b651c3.js} | 2 +- assets/js/{ef5a0ba3.6eae427b.js => ef5a0ba3.f7d6c295.js} | 2 +- assets/js/{ef846e1f.637a5ea9.js => ef846e1f.d253199b.js} | 2 +- assets/js/f36f1ab1.4c4ff126.js | 1 - assets/js/f36f1ab1.fab4165f.js | 1 + assets/js/{f60bb54b.bd84b08f.js => f60bb54b.03ec45ba.js} | 2 +- assets/js/f81c1134.73251810.js | 1 - assets/js/f81c1134.e20359ed.js | 1 + assets/js/f8257e9d.608ba73f.js | 1 - assets/js/f8257e9d.90bfabc4.js | 1 + assets/js/f85a5e62.092a17c8.js | 1 - assets/js/f85a5e62.8e38c6e8.js | 1 + assets/js/f930fb00.2f4d0a5a.js | 1 + assets/js/f930fb00.3720a9b6.js | 1 - assets/js/f9896fda.01e82930.js | 1 + assets/js/f9896fda.8d045e5e.js | 1 - assets/js/{fa4d91bf.27ae75b3.js => fa4d91bf.967af865.js} | 2 +- assets/js/faea717e.178a8d78.js | 1 + assets/js/faea717e.5e5b23da.js | 1 - assets/js/ff0aa122.1ae93737.js | 1 - assets/js/ff0aa122.ac0ac2d7.js | 1 + assets/js/{ff82175c.ed5f1e48.js => ff82175c.c99c9515.js} | 2 +- assets/js/{main.e8e5227a.js => main.2aedb882.js} | 4 ++-- ...n.e8e5227a.js.LICENSE.txt => main.2aedb882.js.LICENSE.txt} | 0 .../js/{runtime~main.94195b87.js => runtime~main.c3ae9ddb.js} | 2 +- index.html | 4 ++-- 377 files changed, 219 insertions(+), 219 deletions(-) delete mode 100644 assets/js/028951d7.a545a47f.js create mode 100644 assets/js/028951d7.f67d27bc.js rename assets/js/{03a06760.edc58e2c.js => 03a06760.e10a09ce.js} (84%) create mode 100644 assets/js/03f86864.6595d78f.js delete mode 100644 assets/js/03f86864.df486eb3.js create mode 100644 assets/js/048b0d50.78627f11.js delete mode 100644 assets/js/048b0d50.aeab80de.js rename assets/js/{060daea9.f31224ce.js => 060daea9.45a363bf.js} (55%) create mode 100644 assets/js/06c6ffc3.d04b6917.js delete mode 100644 assets/js/06c6ffc3.ecda5066.js create mode 100644 assets/js/072728dc.4b64ee6f.js delete mode 100644 assets/js/072728dc.a6172225.js delete mode 100644 assets/js/07d8cde9.2eb6e84d.js create mode 100644 assets/js/07d8cde9.bd13d19f.js create mode 100644 assets/js/0938a5e1.c5e1ee3a.js delete mode 100644 assets/js/0938a5e1.cf38cec4.js create mode 100644 assets/js/0a818389.217954cb.js delete mode 100644 assets/js/0a818389.608cc21a.js rename assets/js/{0b6cd89a.bdb8d8c6.js => 0b6cd89a.89d93ce3.js} (50%) delete mode 100644 assets/js/0b7c2a4a.20ebd1ec.js create mode 100644 assets/js/0b7c2a4a.bbc63202.js rename assets/js/{0bc851e0.f68c4114.js => 0bc851e0.e64ebecc.js} (50%) create mode 100644 assets/js/0c7845dd.47b3cdba.js delete mode 100644 assets/js/0c7845dd.585f79ef.js rename assets/js/{0e4d8110.3a61cab3.js => 0e4d8110.d11ec50d.js} (79%) delete mode 100644 assets/js/0e9c6edc.4a173775.js create mode 100644 assets/js/0e9c6edc.9a5526a6.js delete mode 100644 assets/js/1267474e.afae71c6.js create mode 100644 assets/js/1267474e.e1aa074c.js delete mode 100644 assets/js/138ea42e.e47f9065.js create mode 100644 assets/js/138ea42e.fcc3a7ed.js create mode 100644 assets/js/141512d1.08f4755e.js delete mode 100644 assets/js/141512d1.30f79dfe.js delete mode 100644 assets/js/1582a4a4.8015230d.js create mode 100644 assets/js/1582a4a4.e330cf6e.js delete mode 100644 assets/js/16f6cad8.40251c44.js create mode 100644 assets/js/16f6cad8.e9cb8ea0.js delete mode 100644 assets/js/16f8f4fb.27257cb6.js create mode 100644 assets/js/16f8f4fb.a0c63b77.js rename assets/js/{17e8a747.0db8cf49.js => 17e8a747.5ddeda1c.js} (71%) create mode 100644 assets/js/1864f992.048c87cc.js delete mode 100644 assets/js/1864f992.a26ff588.js delete mode 100644 assets/js/1d8d7b8d.4bf92fa5.js create mode 100644 assets/js/1d8d7b8d.669adac3.js rename assets/js/{1f0f0e17.0e0db339.js => 1f0f0e17.b01541a6.js} (56%) rename assets/js/{20139c40.82ff7d15.js => 20139c40.2ff10ca4.js} (92%) delete mode 100644 assets/js/201d0633.247feb61.js create mode 100644 assets/js/201d0633.8b6d2b0d.js create mode 100644 assets/js/209ff87f.388316b4.js delete mode 100644 assets/js/209ff87f.cf4d83d3.js rename assets/js/{228a014d.00a74b9f.js => 228a014d.f00d9b1b.js} (51%) create mode 100644 assets/js/2451b334.ab2b4f49.js delete mode 100644 assets/js/2451b334.e8abb5e1.js delete mode 100644 assets/js/24dd9243.3194cfc3.js create mode 100644 assets/js/24dd9243.761ce3a1.js delete mode 100644 assets/js/26af6b06.44d508ba.js create mode 100644 assets/js/26af6b06.f2eefb69.js rename assets/js/{276a1994.6aa90c48.js => 276a1994.d8b54bbe.js} (63%) rename assets/js/{2c6d53a8.7b14744f.js => 2c6d53a8.694031dd.js} (80%) delete mode 100644 assets/js/2d0d74c6.b5e9b4aa.js create mode 100644 assets/js/2d0d74c6.cc3d2f3e.js delete mode 100644 assets/js/2f283cc0.386d1a82.js create mode 100644 assets/js/2f283cc0.c46d8806.js create mode 100644 assets/js/305daa1e.06e12546.js delete mode 100644 assets/js/305daa1e.8a6622f1.js create mode 100644 assets/js/3103a69b.0e0851f1.js delete mode 100644 assets/js/3103a69b.65d58c79.js delete mode 100644 assets/js/32a09314.87c58ad4.js create mode 100644 assets/js/32a09314.abcbdb0a.js rename assets/js/{33a17176.5ab7cf5f.js => 33a17176.1cc471ed.js} (55%) rename assets/js/{33bfb584.9bf96cb8.js => 33bfb584.01fe6a89.js} (53%) delete mode 100644 assets/js/35123c02.1c5fa6f5.js create mode 100644 assets/js/35123c02.a8793fee.js rename assets/js/{3716f59c.4ee61080.js => 3716f59c.099aa99c.js} (85%) rename assets/js/{38dd9662.a4cd3930.js => 38dd9662.1b2f48f9.js} (50%) delete mode 100644 assets/js/39485f13.22fab085.js create mode 100644 assets/js/39485f13.c3fc6f5b.js create mode 100644 assets/js/3955af78.28350c84.js delete mode 100644 assets/js/3955af78.67b994ab.js rename assets/js/{3c03c7ff.5bff0ea3.js => 3c03c7ff.f2fabf4a.js} (51%) delete mode 100644 assets/js/3c0a97de.2c136b71.js create mode 100644 assets/js/3c0a97de.bc4c0988.js create mode 100644 assets/js/3c616b11.eff529cc.js delete mode 100644 assets/js/3c616b11.fbe1d614.js create mode 100644 assets/js/3ce9624a.38af843c.js delete mode 100644 assets/js/3ce9624a.56b819b9.js delete mode 100644 assets/js/3dd2dc02.07cf83ff.js create mode 100644 assets/js/3dd2dc02.53a491cb.js create mode 100644 assets/js/3e206144.1b2f4db1.js delete mode 100644 assets/js/3e206144.4221eb08.js delete mode 100644 assets/js/3ef80f0b.2364cdbf.js create mode 100644 assets/js/3ef80f0b.539b4e84.js create mode 100644 assets/js/4052c491.7f2169f1.js delete mode 100644 assets/js/4052c491.ff140cf7.js create mode 100644 assets/js/4228388b.9f2a3468.js delete mode 100644 assets/js/4228388b.b39403da.js create mode 100644 assets/js/42c2afdc.1f9f467b.js delete mode 100644 assets/js/42c2afdc.793eb051.js create mode 100644 assets/js/447738d4.3ee3af50.js delete mode 100644 assets/js/447738d4.fd5a5627.js create mode 100644 assets/js/46f5ed35.cc62c165.js delete mode 100644 assets/js/46f5ed35.d7ead690.js rename assets/js/{492798ca.1bafc123.js => 492798ca.8a687a56.js} (52%) rename assets/js/{4994aa22.39e7478d.js => 4994aa22.4f69a4d4.js} (62%) create mode 100644 assets/js/4a3883fa.06d308e9.js delete mode 100644 assets/js/4a3883fa.417b548d.js delete mode 100644 assets/js/4ab187ba.8f63174d.js create mode 100644 assets/js/4ab187ba.df1715de.js rename assets/js/{4c9d8eaa.04f4758a.js => 4c9d8eaa.3b7863e6.js} (68%) create mode 100644 assets/js/50a3e386.4565f084.js delete mode 100644 assets/js/50a3e386.ec7ec23e.js create mode 100644 assets/js/514f0e36.58b7e8ff.js delete mode 100644 assets/js/514f0e36.f693a915.js create mode 100644 assets/js/519746e1.01902e9c.js delete mode 100644 assets/js/519746e1.a6c23f5f.js delete mode 100644 assets/js/519fdddf.057c0eb7.js create mode 100644 assets/js/519fdddf.8b47b825.js rename assets/js/{520a8178.7b200511.js => 520a8178.d9aec79b.js} (56%) create mode 100644 assets/js/54542266.983828fc.js delete mode 100644 assets/js/54542266.d1df2f13.js create mode 100644 assets/js/554438a9.75168a63.js delete mode 100644 assets/js/554438a9.f543f6a4.js create mode 100644 assets/js/55a7f034.1d50f3fc.js delete mode 100644 assets/js/55a7f034.a67f695b.js delete mode 100644 assets/js/5665a0fb.004d382b.js create mode 100644 assets/js/5665a0fb.1c6e6722.js create mode 100644 assets/js/575718d1.22b9b800.js delete mode 100644 assets/js/575718d1.b42e003b.js delete mode 100644 assets/js/5785f4e1.0bc2a62b.js create mode 100644 assets/js/5785f4e1.e0b3f5e4.js rename assets/js/{59cb67ce.8773c246.js => 59cb67ce.64dd4037.js} (51%) delete mode 100644 assets/js/5c640cab.ae4cad82.js create mode 100644 assets/js/5c640cab.ea2a1918.js rename assets/js/{5c7aa639.8f25b359.js => 5c7aa639.1c50ec7a.js} (51%) delete mode 100644 assets/js/5e335fc2.1634c4ae.js create mode 100644 assets/js/5e335fc2.5f5d04c2.js delete mode 100644 assets/js/5f61b80e.193ffb82.js create mode 100644 assets/js/5f61b80e.1d5f44a7.js delete mode 100644 assets/js/6199064d.42c1523f.js create mode 100644 assets/js/6199064d.e76ca0ce.js rename assets/js/{62b37705.383d9f23.js => 62b37705.89086592.js} (83%) rename assets/js/{641734b9.8fa44043.js => 641734b9.5796a7cf.js} (77%) rename assets/js/{64dfb3e9.28333cc1.js => 64dfb3e9.7fc52958.js} (66%) delete mode 100644 assets/js/67cff4f8.7037dea6.js create mode 100644 assets/js/67cff4f8.812f0eab.js create mode 100644 assets/js/6967621f.6eede3c5.js delete mode 100644 assets/js/6967621f.d3c70748.js create mode 100644 assets/js/6a2ff064.11a025c9.js delete mode 100644 assets/js/6a2ff064.52828ebc.js rename assets/js/{6c065aab.6c1584b5.js => 6c065aab.12abde69.js} (78%) create mode 100644 assets/js/6c1df059.6404561b.js delete mode 100644 assets/js/6c1df059.c1d4e217.js create mode 100644 assets/js/6ca75a11.24f63f42.js delete mode 100644 assets/js/6ca75a11.d5660fb2.js delete mode 100644 assets/js/6e08c139.476eddf3.js create mode 100644 assets/js/6e08c139.fc1ad122.js rename assets/js/{6e7f3c19.e661d904.js => 6e7f3c19.505c4770.js} (85%) create mode 100644 assets/js/6e8cf259.0fada8ce.js delete mode 100644 assets/js/6e8cf259.2b1eca46.js delete mode 100644 assets/js/6f742216.119696d7.js create mode 100644 assets/js/6f742216.b3a2b292.js create mode 100644 assets/js/706279d4.22d9123c.js delete mode 100644 assets/js/706279d4.889e2a0b.js rename assets/js/{70e09343.c8592c36.js => 70e09343.a9dd10a6.js} (60%) delete mode 100644 assets/js/758e69f6.3dc4146c.js create mode 100644 assets/js/758e69f6.476fe50a.js delete mode 100644 assets/js/76134b9e.4b236a0d.js create mode 100644 assets/js/76134b9e.df47e244.js create mode 100644 assets/js/771ca8b2.4482ab31.js delete mode 100644 assets/js/771ca8b2.b64324e7.js delete mode 100644 assets/js/772c972a.5399d41c.js create mode 100644 assets/js/772c972a.f66530ef.js rename assets/js/{77da816e.88fda49c.js => 77da816e.4be32908.js} (55%) create mode 100644 assets/js/77eb9b8f.678d97e2.js delete mode 100644 assets/js/77eb9b8f.8c1862af.js delete mode 100644 assets/js/7a272146.0fcf375c.js create mode 100644 assets/js/7a272146.601bb116.js delete mode 100644 assets/js/7ada4fa6.614c8638.js create mode 100644 assets/js/7ada4fa6.d96eb120.js create mode 100644 assets/js/7d1ac6e6.0b3154cd.js delete mode 100644 assets/js/7d1ac6e6.b2da6763.js create mode 100644 assets/js/7f3dfa04.024d4113.js delete mode 100644 assets/js/7f3dfa04.98d62f8c.js rename assets/js/{7fdd8ddf.1cbdb978.js => 7fdd8ddf.a2c064f2.js} (63%) rename assets/js/{8075f6fd.8ce59098.js => 8075f6fd.4bab1959.js} (50%) create mode 100644 assets/js/82425aa0.27bb2a57.js delete mode 100644 assets/js/82425aa0.d6389b4b.js create mode 100644 assets/js/828be2eb.6e76e4dc.js delete mode 100644 assets/js/828be2eb.7b533920.js delete mode 100644 assets/js/82de272a.154369da.js create mode 100644 assets/js/82de272a.949b6d95.js rename assets/js/{85d61fbd.b65eb27b.js => 85d61fbd.a565aa16.js} (73%) rename assets/js/{86e3a3d9.bb7dc239.js => 86e3a3d9.414cd1e7.js} (69%) rename assets/js/{87e9b44c.bb4571b1.js => 87e9b44c.831666b0.js} (74%) rename assets/js/{88d0be04.c8c30418.js => 88d0be04.99ab8af0.js} (82%) create mode 100644 assets/js/891c0dad.8b56e88f.js delete mode 100644 assets/js/891c0dad.aa5ccbc2.js create mode 100644 assets/js/8a603d1e.69fbc0da.js delete mode 100644 assets/js/8a603d1e.a969af49.js delete mode 100644 assets/js/8ef3f86c.bee61914.js create mode 100644 assets/js/8ef3f86c.e69496ee.js rename assets/js/{90e57dc7.81ed473e.js => 90e57dc7.739eeaaf.js} (76%) rename assets/js/{91b203fb.02f34cb4.js => 91b203fb.9bde2e6b.js} (71%) delete mode 100644 assets/js/91cd22f1.82384163.js create mode 100644 assets/js/91cd22f1.8e6d00c5.js delete mode 100644 assets/js/945e072c.cbb98227.js create mode 100644 assets/js/945e072c.f51bc0fd.js create mode 100644 assets/js/95515391.2a532583.js delete mode 100644 assets/js/95515391.ecc8f03c.js delete mode 100644 assets/js/95e8e4ff.5d7a528e.js create mode 100644 assets/js/95e8e4ff.a82c2034.js create mode 100644 assets/js/972d9d57.8cb6831e.js rename assets/js/{972d9d57.adc127c7.js.LICENSE.txt => 972d9d57.8cb6831e.js.LICENSE.txt} (100%) delete mode 100644 assets/js/972d9d57.adc127c7.js create mode 100644 assets/js/975c6d52.c03af83f.js delete mode 100644 assets/js/975c6d52.c918bd26.js delete mode 100644 assets/js/979385f4.2bc8d15b.js create mode 100644 assets/js/979385f4.733b6197.js create mode 100644 assets/js/98b4a860.57875e14.js delete mode 100644 assets/js/98b4a860.e515a6a2.js create mode 100644 assets/js/9e287d93.5e1bd715.js delete mode 100644 assets/js/9e287d93.f67bcbd5.js delete mode 100644 assets/js/9f9142d7.07738ce3.js create mode 100644 assets/js/9f9142d7.443c2759.js create mode 100644 assets/js/a05ec3a8.30e202fd.js delete mode 100644 assets/js/a05ec3a8.83499505.js create mode 100644 assets/js/a1286a82.0a97aae7.js delete mode 100644 assets/js/a1286a82.83e52806.js create mode 100644 assets/js/a1da7a09.9aa00060.js delete mode 100644 assets/js/a1da7a09.e5058e2b.js create mode 100644 assets/js/a1ff2305.08305e81.js delete mode 100644 assets/js/a1ff2305.6fc5d56a.js create mode 100644 assets/js/a3aa32e9.2dc104ea.js delete mode 100644 assets/js/a3aa32e9.3100cd87.js delete mode 100644 assets/js/a4c9d663.94c79ff6.js create mode 100644 assets/js/a4c9d663.9cad6a46.js delete mode 100644 assets/js/a535a6cd.08c0cd42.js create mode 100644 assets/js/a535a6cd.ef2bc977.js rename assets/js/{a53a71e5.adf265f8.js => a53a71e5.b57f5c81.js} (59%) create mode 100644 assets/js/a5816f92.becf7fcc.js delete mode 100644 assets/js/a5816f92.dca2b71a.js delete mode 100644 assets/js/a68a7a4e.76d7a376.js create mode 100644 assets/js/a68a7a4e.9e76bc2f.js rename assets/js/{a715936c.71c14f61.js => a715936c.07dd1c25.js} (74%) delete mode 100644 assets/js/aa18a71c.6bb80982.js create mode 100644 assets/js/aa18a71c.e9264cdf.js create mode 100644 assets/js/ad5b23ac.935d17a0.js delete mode 100644 assets/js/ad5b23ac.d062ddb3.js delete mode 100644 assets/js/aed6c7bc.63ab3448.js create mode 100644 assets/js/aed6c7bc.c15fbb0c.js delete mode 100644 assets/js/b1a9994a.84bce478.js create mode 100644 assets/js/b1a9994a.9f2b372e.js delete mode 100644 assets/js/b2f737a9.3808eb1d.js create mode 100644 assets/js/b2f737a9.46067ce0.js rename assets/js/{b4cf731e.803166f2.js => b4cf731e.4d5b36f4.js} (65%) delete mode 100644 assets/js/b54091ce.9d00e331.js create mode 100644 assets/js/b54091ce.ec9c61a5.js create mode 100644 assets/js/b6b7bfe6.06238b12.js delete mode 100644 assets/js/b6b7bfe6.9cb1c582.js create mode 100644 assets/js/b85e7ff6.0bda7d25.js delete mode 100644 assets/js/b85e7ff6.990f4d33.js delete mode 100644 assets/js/ba61d949.039d2e97.js create mode 100644 assets/js/ba61d949.9ff8f4d2.js delete mode 100644 assets/js/bc770e2d.9cb708a5.js create mode 100644 assets/js/bc770e2d.e9bd315f.js create mode 100644 assets/js/bcbb32e8.55118bd0.js delete mode 100644 assets/js/bcbb32e8.56140673.js rename assets/js/{bce2ffab.844e1614.js => bce2ffab.1938d33e.js} (74%) rename assets/js/{bd7149c1.588fb933.js => bd7149c1.95d0c9b7.js} (65%) rename assets/js/{bdab9796.40498668.js => bdab9796.393c51d9.js} (77%) rename assets/js/{bfd9bf94.1a7759ac.js => bfd9bf94.d3cd2eb4.js} (60%) create mode 100644 assets/js/c00eca4d.287e4cb1.js delete mode 100644 assets/js/c00eca4d.f0a1b3c1.js rename assets/js/{c459a19d.fe947fe5.js => c459a19d.9dd00d98.js} (66%) delete mode 100644 assets/js/c4990fee.d719caa0.js create mode 100644 assets/js/c4990fee.d89a5ffc.js create mode 100644 assets/js/c4ace355.2197ea25.js delete mode 100644 assets/js/c4ace355.47062305.js delete mode 100644 assets/js/c56c55ab.71d559f7.js create mode 100644 assets/js/c56c55ab.fcf328cb.js delete mode 100644 assets/js/c6f10a23.1479a269.js create mode 100644 assets/js/c6f10a23.fc3af2f7.js rename assets/js/{c73a8bd2.66036a25.js => c73a8bd2.691d390b.js} (54%) create mode 100644 assets/js/c74d1c35.380abcde.js delete mode 100644 assets/js/c74d1c35.c4df3413.js delete mode 100644 assets/js/c762c146.487cab34.js create mode 100644 assets/js/c762c146.a49779d6.js create mode 100644 assets/js/c7ca486a.0a52a3a5.js delete mode 100644 assets/js/c7ca486a.75045551.js create mode 100644 assets/js/ca51e50c.160f4c02.js delete mode 100644 assets/js/ca51e50c.a6e6ceb0.js create mode 100644 assets/js/cac92b6a.105f0d9e.js delete mode 100644 assets/js/cac92b6a.ed7e1348.js create mode 100644 assets/js/cbb899e4.259f5937.js delete mode 100644 assets/js/cbb899e4.c79dea69.js create mode 100644 assets/js/ce3b59e7.d074ad04.js delete mode 100644 assets/js/ce3b59e7.eac3b93a.js delete mode 100644 assets/js/ce5880b7.0e03cfb9.js create mode 100644 assets/js/ce5880b7.f242886e.js delete mode 100644 assets/js/d03b1fb7.22ca49a5.js create mode 100644 assets/js/d03b1fb7.99c16144.js delete mode 100644 assets/js/d062d21d.225b8cac.js create mode 100644 assets/js/d062d21d.f56449a6.js create mode 100644 assets/js/d182442f.b2275baa.js delete mode 100644 assets/js/d182442f.f73526ab.js delete mode 100644 assets/js/d2551a9d.47319f0d.js create mode 100644 assets/js/d2551a9d.c7f70c2f.js delete mode 100644 assets/js/d2a1308d.4c126cda.js create mode 100644 assets/js/d2a1308d.6fab3ce6.js delete mode 100644 assets/js/d3d3b96d.182dcee0.js create mode 100644 assets/js/d3d3b96d.f252ce8a.js create mode 100644 assets/js/d7206776.4617d546.js delete mode 100644 assets/js/d7206776.d9f8f002.js create mode 100644 assets/js/d86891f4.414f3372.js delete mode 100644 assets/js/d86891f4.47b4468c.js create mode 100644 assets/js/d957216c.c2982f30.js delete mode 100644 assets/js/d957216c.e4c227bd.js delete mode 100644 assets/js/dd4c326b.3dc423d4.js create mode 100644 assets/js/dd4c326b.d52daf3b.js delete mode 100644 assets/js/dd5f7850.689b1b59.js create mode 100644 assets/js/dd5f7850.e61c3d89.js create mode 100644 assets/js/ddd8d528.5d803040.js delete mode 100644 assets/js/ddd8d528.919bc174.js create mode 100644 assets/js/dec47d54.6ae2b72d.js delete mode 100644 assets/js/dec47d54.a7e312a0.js create mode 100644 assets/js/df056c8b.59453417.js delete mode 100644 assets/js/df056c8b.771fc642.js delete mode 100644 assets/js/df21cc78.64a490cd.js create mode 100644 assets/js/df21cc78.980cb4d4.js rename assets/js/{dfef153c.c36f1d8e.js => dfef153c.b7c16e05.js} (72%) delete mode 100644 assets/js/e060feb7.2f7db6bb.js create mode 100644 assets/js/e060feb7.ca664b24.js delete mode 100644 assets/js/e4d2c113.6719ae2f.js create mode 100644 assets/js/e4d2c113.8a0285e3.js create mode 100644 assets/js/e575fb7e.7820dedb.js delete mode 100644 assets/js/e575fb7e.cb22dab0.js create mode 100644 assets/js/e65a01b4.3c7e68e3.js delete mode 100644 assets/js/e65a01b4.ae2b2504.js delete mode 100644 assets/js/e6a60088.3169859a.js create mode 100644 assets/js/e6a60088.e5046c0d.js create mode 100644 assets/js/e79f4725.42860e58.js delete mode 100644 assets/js/e79f4725.dbdf675c.js create mode 100644 assets/js/e818fdac.3cd718d9.js delete mode 100644 assets/js/e818fdac.e199bd51.js delete mode 100644 assets/js/e95d6894.5aab0ed6.js create mode 100644 assets/js/e95d6894.febe7280.js create mode 100644 assets/js/ee0ff195.80028bb1.js delete mode 100644 assets/js/ee0ff195.8f25fe84.js rename assets/js/{ee258e29.02b659e2.js => ee258e29.cf83fc06.js} (55%) delete mode 100644 assets/js/ee45215e.a49a859f.js create mode 100644 assets/js/ee45215e.d0b4acb8.js rename assets/js/{ee712ef6.3ea25414.js => ee712ef6.e4b651c3.js} (70%) rename assets/js/{ef5a0ba3.6eae427b.js => ef5a0ba3.f7d6c295.js} (55%) rename assets/js/{ef846e1f.637a5ea9.js => ef846e1f.d253199b.js} (78%) delete mode 100644 assets/js/f36f1ab1.4c4ff126.js create mode 100644 assets/js/f36f1ab1.fab4165f.js rename assets/js/{f60bb54b.bd84b08f.js => f60bb54b.03ec45ba.js} (78%) delete mode 100644 assets/js/f81c1134.73251810.js create mode 100644 assets/js/f81c1134.e20359ed.js delete mode 100644 assets/js/f8257e9d.608ba73f.js create mode 100644 assets/js/f8257e9d.90bfabc4.js delete mode 100644 assets/js/f85a5e62.092a17c8.js create mode 100644 assets/js/f85a5e62.8e38c6e8.js create mode 100644 assets/js/f930fb00.2f4d0a5a.js delete mode 100644 assets/js/f930fb00.3720a9b6.js create mode 100644 assets/js/f9896fda.01e82930.js delete mode 100644 assets/js/f9896fda.8d045e5e.js rename assets/js/{fa4d91bf.27ae75b3.js => fa4d91bf.967af865.js} (72%) create mode 100644 assets/js/faea717e.178a8d78.js delete mode 100644 assets/js/faea717e.5e5b23da.js delete mode 100644 assets/js/ff0aa122.1ae93737.js create mode 100644 assets/js/ff0aa122.ac0ac2d7.js rename assets/js/{ff82175c.ed5f1e48.js => ff82175c.c99c9515.js} (57%) rename assets/js/{main.e8e5227a.js => main.2aedb882.js} (96%) rename assets/js/{main.e8e5227a.js.LICENSE.txt => main.2aedb882.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.94195b87.js => runtime~main.c3ae9ddb.js} (67%) diff --git a/assets/js/028951d7.a545a47f.js b/assets/js/028951d7.a545a47f.js deleted file mode 100644 index f89556ab55b4..000000000000 --- a/assets/js/028951d7.a545a47f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46255],{70539:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},13381:(e,r,t)=>{t.d(r,{Z:()=>o});var n=t(24246),s=(t(27378),t(6698));function o({url:e}){return(0,n.jsx)("div",{style:{padding:10},children:(0,n.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,n.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,t)=>{t.d(r,{Z:()=>l});var n=t(24246),s=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e){for(var r=1;r{t.d(r,{Z:()=>o});var n=t(24246),s=t(27378);function o({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:t}){const[o,a]=(0,s.useState)(!1);if(o)throw new Error(r,{cause:t?new Error(t):void 0});return(0,n.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},73382:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg"},98969:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},66819:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=t(24246),s=t(71670);t(6698),t(13381),t(3818);const o={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:t(70539).Z,authorsImageUrls:[void 0]},l=[{value:"Highlights",id:"highlights",level:2},{value:"Broken anchors checker",id:"broken-anchors-checker",level:3},{value:"parseFrontMatter hook",id:"parsefrontmatter-hook",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["We are happy to announce ",(0,n.jsx)(r.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"Docusaurus blog post social card",src:t(98969).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(r.h3,{id:"broken-anchors-checker",children:"Broken anchors checker"}),"\n",(0,n.jsxs)(r.p,{children:["In ",(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9528",children:"#9528"}),", we improved the built-in broken links checker to also detect broken anchors."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"Docusaurus blog post social card",src:t(73382).Z+"",width:"1920",height:"896"})}),"\n",(0,n.jsxs)(r.admonition,{title:"Make it fail fast",type:"tip",children:[(0,n.jsxs)(r.p,{children:["The new ",(0,n.jsx)(r.a,{href:"/docs/api/docusaurus-config#onBrokenAnchors",children:(0,n.jsx)(r.code,{children:"onBrokenAnchors"})})," option has value ",(0,n.jsx)(r.code,{children:"warn"})," by default, for retro-compatibility reasons."]}),(0,n.jsxs)(r.p,{children:["We recommend to turn it to ",(0,n.jsx)(r.code,{children:"throw"})," and fail your CI builds instead of deploying broken anchors to productions."]})]}),"\n",(0,n.jsxs)(r.admonition,{type:"note",children:[(0,n.jsxs)(r.p,{children:["For users and plugin authors implementing custom ",(0,n.jsx)(r.code,{children:""})," and ",(0,n.jsx)(r.code,{children:""})," components, we provide a new ",(0,n.jsx)(r.a,{href:"/docs/docusaurus-core#useBrokenLinks",children:(0,n.jsx)(r.code,{children:"useBrokenLinks"})})," React hook API."]}),(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.strong,{children:"Most Docusaurus users don't need to care about it"}),", built-in components (",(0,n.jsx)(r.code,{children:"docusaurus/Link"})," and ",(0,n.jsx)(r.code,{children:"@theme/Heading"}),") already use it internally."]})]}),"\n",(0,n.jsxs)(r.h3,{id:"parsefrontmatter-hook",children:[(0,n.jsx)(r.code,{children:"parseFrontMatter"})," hook"]}),"\n",(0,n.jsxs)(r.p,{children:["In ",(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9624",children:"#9624"}),", we added a new ",(0,n.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,n.jsx)(r.code,{children:"siteConfig.markdown.parseFrontMatter"})," function hook"]}),"."]}),"\n",(0,n.jsx)(r.p,{children:"This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,n.jsxs)(r.p,{children:["Read the ",(0,n.jsx)(r.a,{href:"/docs/markdown-features#front-matter",children:"front matter guide"})," and the ",(0,n.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,n.jsx)(r.code,{children:"parseFrontMatter"})," API ref"]})," for details."]}),"\n",(0,n.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9674",children:"#9674"}),": add ",(0,n.jsx)(r.code,{children:"siteConfig.markdown.remarkRehypeOptions"})," to pass options to ",(0,n.jsx)(r.code,{children:"remark-rehype"}),", letting you customize things such as MDX footnote label"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9671",children:"#9671"}),": add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9610",children:"#9610"}),": enable CLI port configuration via ",(0,n.jsx)(r.code,{children:"PORT"})," environment variable"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9477",children:"#9477"}),": complete Brazilian Portuguese (pt-BR) translations"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["Check the ",(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.a,{href:"/changelog/3.1.0",children:"3.1.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,r,t)=>{t.d(r,{Z:()=>i,a:()=>a});var n=t(27378);const s={},o=n.createContext(s);function a(e){const r=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/028951d7.f67d27bc.js b/assets/js/028951d7.f67d27bc.js new file mode 100644 index 000000000000..0bfe269a4c32 --- /dev/null +++ b/assets/js/028951d7.f67d27bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46255],{70539:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},13381:(e,r,t)=>{t.d(r,{Z:()=>o});var n=t(24246),s=(t(27378),t(6698));function o({url:e}){return(0,n.jsx)("div",{style:{padding:10},children:(0,n.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,n.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,t)=>{t.d(r,{Z:()=>l});var n=t(24246),s=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e){for(var r=1;r{t.d(r,{Z:()=>o});var n=t(24246),s=t(27378);function o({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:t}){const[o,a]=(0,s.useState)(!1);if(o)throw new Error(r,{cause:t?new Error(t):void 0});return(0,n.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},73382:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg"},98969:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},66819:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=t(24246),s=t(71670);t(6698),t(13381),t(3818);const o={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:t(70539).Z,authorsImageUrls:[void 0]},l=[{value:"Highlights",id:"highlights",level:2},{value:"Broken anchors checker",id:"broken-anchors-checker",level:3},{value:"parseFrontMatter hook",id:"parsefrontmatter-hook",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["We are happy to announce ",(0,n.jsx)(r.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"Docusaurus blog post social card",src:t(98969).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(r.h3,{id:"broken-anchors-checker",children:"Broken anchors checker"}),"\n",(0,n.jsxs)(r.p,{children:["In ",(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9528",children:"#9528"}),", we improved the built-in broken links checker to also detect broken anchors."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"Docusaurus blog post social card",src:t(73382).Z+"",width:"1920",height:"896"})}),"\n",(0,n.jsxs)(r.admonition,{title:"Make it fail fast",type:"tip",children:[(0,n.jsxs)(r.p,{children:["The new ",(0,n.jsx)(r.a,{href:"/docs/api/docusaurus-config#onBrokenAnchors",children:(0,n.jsx)(r.code,{children:"onBrokenAnchors"})})," option has value ",(0,n.jsx)(r.code,{children:"warn"})," by default, for retro-compatibility reasons."]}),(0,n.jsxs)(r.p,{children:["We recommend to turn it to ",(0,n.jsx)(r.code,{children:"throw"})," and fail your CI builds instead of deploying broken anchors to productions."]})]}),"\n",(0,n.jsxs)(r.admonition,{type:"note",children:[(0,n.jsxs)(r.p,{children:["For users and plugin authors implementing custom ",(0,n.jsx)(r.code,{children:""})," and ",(0,n.jsx)(r.code,{children:""})," components, we provide a new ",(0,n.jsx)(r.a,{href:"/docs/docusaurus-core#useBrokenLinks",children:(0,n.jsx)(r.code,{children:"useBrokenLinks"})})," React hook API."]}),(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.strong,{children:"Most Docusaurus users don't need to care about it"}),", built-in components (",(0,n.jsx)(r.code,{children:"docusaurus/Link"})," and ",(0,n.jsx)(r.code,{children:"@theme/Heading"}),") already use it internally."]})]}),"\n",(0,n.jsxs)(r.h3,{id:"parsefrontmatter-hook",children:[(0,n.jsx)(r.code,{children:"parseFrontMatter"})," hook"]}),"\n",(0,n.jsxs)(r.p,{children:["In ",(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9624",children:"#9624"}),", we added a new ",(0,n.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,n.jsx)(r.code,{children:"siteConfig.markdown.parseFrontMatter"})," function hook"]}),"."]}),"\n",(0,n.jsx)(r.p,{children:"This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,n.jsxs)(r.p,{children:["Read the ",(0,n.jsx)(r.a,{href:"/docs/markdown-features#front-matter",children:"front matter guide"})," and the ",(0,n.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,n.jsx)(r.code,{children:"parseFrontMatter"})," API ref"]})," for details."]}),"\n",(0,n.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9674",children:"#9674"}),": add ",(0,n.jsx)(r.code,{children:"siteConfig.markdown.remarkRehypeOptions"})," to pass options to ",(0,n.jsx)(r.code,{children:"remark-rehype"}),", letting you customize things such as MDX footnote label"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9671",children:"#9671"}),": add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9610",children:"#9610"}),": enable CLI port configuration via ",(0,n.jsx)(r.code,{children:"PORT"})," environment variable"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9477",children:"#9477"}),": complete Brazilian Portuguese (pt-BR) translations"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["Check the ",(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.a,{href:"/changelog/3.1.0",children:"3.1.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,r,t)=>{t.d(r,{Z:()=>i,a:()=>a});var n=t(27378);const s={},o=n.createContext(s);function a(e){const r=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03a06760.edc58e2c.js b/assets/js/03a06760.e10a09ce.js similarity index 84% rename from assets/js/03a06760.edc58e2c.js rename to assets/js/03a06760.e10a09ce.js index 7028e6894f45..fbf9c7207fd7 100644 --- a/assets/js/03a06760.edc58e2c.js +++ b/assets/js/03a06760.e10a09ce.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49406],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;tfunction({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>Z});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function g(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(p.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=g();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t[\"'])(?.*?)\\1"),W=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=(F=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},H),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(F,Object.getOwnPropertyDescriptors(G)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(G)).forEach((function(e){Object.defineProperty(F,e,Object.getOwnPropertyDescriptor(G,e))})),F);var F,G;const U=Object.keys(H);function J(e,t){const n=e.map((e=>{const{start:n,end:r}=z[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&W.test(c)){const e=c.match(W).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],t);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],t);case"html":return J(["js","jsBlock","html"],t);case"python":case"py":case"bash":return J(["bash"],t);case"markdown":case"md":return J(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return J(["tex"],t);case"lua":case"haskell":case"sql":return J(["lua"],t);case"wasm":return J(["wasm"],t);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],t);case"vbnet":return J(["vbnet","rem"],t);case"batch":return J(["rem"],t);case"basic":return J(["rem","f90"],t);case"fsharp":return J(["js","ml"],t);case"ocaml":case"sml":return J(["ml"],t);case"fortran":return J(["f90"],t);case"cobol":return J(["cobol"],t);default:return J(U,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const Ze=(Te=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Be({scope:L},e)):(0,o.jsx)(Te,Be({},e))});var Te;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Ze,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},38825:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},u="\ud83d\udce6 plugin-google-analytics",d={id:"api/plugins/plugin-google-analytics",title:"\ud83d\udce6 plugin-google-analytics",description:"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.",source:"@site/docs/api/plugins/plugin-google-analytics.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:6,frontMatter:{sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"},next:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-analytics",children:"\ud83d\udce6 plugin-google-analytics"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/analytics/devguides/collection/analyticsjs/",children:"Google Analytics"})," plugin. It is a JavaScript library for measuring how users interact with your website ",(0,r.jsx)(t.strong,{children:"in the production build"}),". If you are using Google Analytics 4 you might need to consider using ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"plugin-google-gtag"})," instead."]}),"\n",(0,r.jsxs)(t.admonition,{title:"Deprecated",type:"danger",children:[(0,r.jsxs)(t.p,{children:["This plugin is ",(0,r.jsx)(t.strong,{children:"deprecated"}),", and will become useless on July 1, 2023."]}),(0,r.jsxs)(t.p,{children:["Google is ",(0,r.jsx)(t.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"moving away from Universal Analytics"}),"."]}),(0,r.jsxs)(t.p,{children:["If you are still using this plugin with a ",(0,r.jsx)(t.code,{children:"UA-*"})," tracking id, you should create a Google Analytics 4 account as soon as possible, and use ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-gtag"})})," instead of this plugin. More details ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"here"}),"."]})]}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-analytics\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your analytics service."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-analytics",presetOptionName:"googleAnalytics",code:"{\n trackingID: 'UA-141789564-1',\n anonymizeIP: true,\n}"})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49406],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=g(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>Z});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function g(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(p.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=g();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Z(e){return(0,o.jsx)("button",C(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){T(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),q=n.n($);function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),W=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=(F=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},H),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(F,Object.getOwnPropertyDescriptors(G)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(G)).forEach((function(e){Object.defineProperty(F,e,Object.getOwnPropertyDescriptor(G,e))})),F);var F,G;const U=Object.keys(H);function J(e,t){const n=e.map((e=>{const{start:n,end:r}=z[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&W.test(c)){const e=c.match(W).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],t);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],t);case"html":return J(["js","jsBlock","html"],t);case"python":case"py":case"bash":return J(["bash"],t);case"markdown":case"md":return J(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return J(["tex"],t);case"lua":case"haskell":case"sql":return J(["lua"],t);case"wasm":return J(["wasm"],t);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],t);case"vbnet":return J(["vbnet","rem"],t);case"batch":return J(["rem"],t);case"basic":return J(["rem","f90"],t);case"fsharp":return J(["js","ml"],t);case"ocaml":case"sml":return J(["ml"],t);case"fortran":return J(["f90"],t);case"cobol":return J(["cobol"],t);default:return J(U,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(R))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const Ze=(Te=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ce({scope:L},e)):(0,o.jsx)(Te,Ce({},e))});var Te;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Ze,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},38825:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},u="\ud83d\udce6 plugin-google-analytics",d={id:"api/plugins/plugin-google-analytics",title:"\ud83d\udce6 plugin-google-analytics",description:"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.",source:"@site/docs/api/plugins/plugin-google-analytics.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:6,frontMatter:{sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"},next:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-analytics",children:"\ud83d\udce6 plugin-google-analytics"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/analytics/devguides/collection/analyticsjs/",children:"Google Analytics"})," plugin. It is a JavaScript library for measuring how users interact with your website ",(0,r.jsx)(t.strong,{children:"in the production build"}),". If you are using Google Analytics 4 you might need to consider using ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"plugin-google-gtag"})," instead."]}),"\n",(0,r.jsxs)(t.admonition,{title:"Deprecated",type:"danger",children:[(0,r.jsxs)(t.p,{children:["This plugin is ",(0,r.jsx)(t.strong,{children:"deprecated"}),", and will become useless on July 1, 2023."]}),(0,r.jsxs)(t.p,{children:["Google is ",(0,r.jsx)(t.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"moving away from Universal Analytics"}),"."]}),(0,r.jsxs)(t.p,{children:["If you are still using this plugin with a ",(0,r.jsx)(t.code,{children:"UA-*"})," tracking id, you should create a Google Analytics 4 account as soon as possible, and use ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-gtag"})})," instead of this plugin. More details ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"here"}),"."]})]}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-analytics\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your analytics service."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-analytics",presetOptionName:"googleAnalytics",code:"{\n trackingID: 'UA-141789564-1',\n anonymizeIP: true,\n}"})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/03f86864.6595d78f.js b/assets/js/03f86864.6595d78f.js new file mode 100644 index 000000000000..37a1a2cd0b1c --- /dev/null +++ b/assets/js/03f86864.6595d78f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22054],{52605:(e,n,i)=>{i.d(n,{Z:()=>o});var d=i(24246),s=i(27378),t=i(80474),r=i(3620);const l={apiTable:"apiTable_e8hp"};function c({name:e,children:n},i){const l=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),c=e?`${e}-${l}`:l,h=`#${c}`,o=(0,r.k6)();return(0,t.Z)().collectAnchor(c),(0,d.jsx)("tr",{id:c,tabIndex:0,ref:o.location.hash===h?i:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||o.push(h)},onKeyDown:e=>{"Enter"===e.key&&o.push(h)},children:n.props.children})}const h=s.forwardRef(c);function o({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[i,t]=s.Children.toArray(e.props.children),r=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=r.current)||void 0===e||e.focus()}),[r]);const c=s.Children.map(t.props.children,(e=>(0,d.jsx)(h,{name:n,ref:r,children:e})));return(0,d.jsxs)("table",{className:l.apiTable,children:[i,(0,d.jsx)("tbody",{children:c})]})}},88313:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>x,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var d=i(24246),s=i(71670),t=i(52605);const r={sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},l="Theme configuration",c={id:"api/themes/theme-configuration",title:"Theme configuration",description:"This configuration applies to all main themes.",source:"@site/docs/api/themes/theme-configuration.mdx",sourceDirName:"api/themes",slug:"/api/themes/configuration",permalink:"/docs/api/themes/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},sidebar:"api",previous:{title:"Themes overview",permalink:"/docs/api/themes"},next:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"}},h={},o=[{value:"Common",id:"common",level:2},{value:"Color mode",id:"color-mode---dark-mode",level:3},{value:"Meta image",id:"meta-image",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Announcement bar",id:"announcement-bar",level:3},{value:"Plugins",id:"plugins",level:2},{value:"Docs",id:"docs",level:3},{value:"Blog",id:"blog",level:3},{value:"Navbar",id:"navbar",level:2},{value:"Navbar logo",id:"navbar-logo",level:3},{value:"Navbar items",id:"navbar-items",level:3},{value:"Navbar link",id:"navbar-link",level:4},{value:"Navbar dropdown",id:"navbar-dropdown",level:4},{value:"Navbar doc link",id:"navbar-doc-link",level:4},{value:"Navbar linked to a sidebar",id:"navbar-doc-sidebar",level:4},{value:"Navbar docs version dropdown",id:"navbar-docs-version-dropdown",level:4},{value:"Navbar docs version",id:"navbar-docs-version",level:4},{value:"Navbar locale dropdown",id:"navbar-locale-dropdown",level:4},{value:"Navbar search",id:"navbar-search",level:4},{value:"Navbar with custom HTML",id:"navbar-with-custom-html",level:4},{value:"Auto-hide sticky navbar",id:"auto-hide-sticky-navbar",level:3},{value:"Navbar style",id:"navbar-style",level:3},{value:"CodeBlock",id:"codeblock",level:2},{value:"Theme",id:"theme",level:3},{value:"Default language",id:"default-language",level:3},{value:"Footer",id:"footer-1",level:2},{value:"Footer Links",id:"footer-links",level:3},{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Hooks",id:"hooks",level:2},{value:"<code>useColorMode</code>",id:"use-color-mode",level:3},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"theme-configuration",children:"Theme configuration"})}),"\n","\n",(0,d.jsxs)(n.p,{children:["This configuration applies to all ",(0,d.jsx)(n.a,{href:"/docs/api/themes",children:"main themes"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"common",children:"Common"}),"\n",(0,d.jsx)(n.h3,{id:"color-mode---dark-mode",children:"Color mode"}),"\n",(0,d.jsx)(n.p,{children:"The classic theme provides by default light and dark mode support, with a navbar switch for the user."}),"\n",(0,d.jsxs)(n.p,{children:["It is possible to customize the color mode support within the ",(0,d.jsx)(n.code,{children:"colorMode"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultMode"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'light' | 'dark'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color mode when user first visits the site."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"disableSwitch"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Hides the switch in the navbar. Useful if you want to support a single color mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"respectPrefersColorScheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Whether to use the ",(0,d.jsx)(n.code,{children:"prefers-color-scheme"})," media-query, using user system preferences, instead of the hardcoded ",(0,d.jsx)(n.code,{children:"defaultMode"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n colorMode: {\n defaultMode: 'light',\n disableSwitch: false,\n respectPrefersColorScheme: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"warning",children:[(0,d.jsxs)(n.p,{children:["With ",(0,d.jsx)(n.code,{children:"respectPrefersColorScheme: true"}),", the ",(0,d.jsx)(n.code,{children:"defaultMode"})," is overridden by user system preferences."]}),(0,d.jsx)(n.p,{children:"If you only want to support one color mode, you likely want to ignore user system preferences."})]}),"\n",(0,d.jsx)(n.h3,{id:"meta-image",children:"Meta image"}),"\n",(0,d.jsxs)(n.p,{children:["You can configure a default image that will be used for your meta tag, in particular ",(0,d.jsx)(n.code,{children:"og:image"})," and ",(0,d.jsx)(n.code,{children:"twitter:image"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"image"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:'The meta image URL for the site. Relative to your site\'s "static" directory. Cannot be SVGs. Can be external URLs too.'})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n image: 'img/docusaurus.png',\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"metadata",children:"Metadata"}),"\n",(0,d.jsx)(n.p,{children:"You can configure additional HTML metadata (and override existing ones)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"metadata"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Metadata[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsxs)(n.td,{children:["Any field will be directly passed to the ",(0,d.jsx)(n.code,{children:"<meta />"})," tag. Possible fields include ",(0,d.jsx)(n.code,{children:"id"}),", ",(0,d.jsx)(n.code,{children:"name"}),", ",(0,d.jsx)(n.code,{children:"property"}),", ",(0,d.jsx)(n.code,{children:"content"}),", ",(0,d.jsx)(n.code,{children:"itemprop"}),", etc."]})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n metadata: [{name: 'twitter:card', content: 'summary'}],\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"announcement-bar",children:"Announcement bar"}),"\n",(0,d.jsxs)(n.p,{children:["Sometimes you want to announce something in your website. Just for such a case, you can add an announcement bar. This is a non-fixed and optionally dismissible panel above the navbar. All configuration are in the ",(0,d.jsx)(n.code,{children:"announcementBar"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"announcement-bar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"id"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'announcement-bar'"})}),(0,d.jsx)(n.td,{children:"Any value that will identify this message."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"content"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"The text content of the announcement. HTML will be interpolated."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"backgroundColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#fff'"})}),(0,d.jsx)(n.td,{children:"Background color of the entire bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"textColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#000'"})}),(0,d.jsx)(n.td,{children:"Announcement text color."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"isCloseable"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"true"})}),(0,d.jsx)(n.td,{children:"Whether this announcement can be dismissed with a '\xd7' button."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n announcementBar: {\n id: 'support_us',\n content:\n 'We are looking to revamp our docs, please fill <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\">this survey</a>',\n backgroundColor: '#fafbfc',\n textColor: '#091E42',\n isCloseable: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"plugins",children:"Plugins"}),"\n",(0,d.jsxs)(n.p,{children:["Our ",(0,d.jsx)(n.a,{href:"/docs/api/themes",children:"main themes"})," offer additional theme configuration options for Docusaurus core content plugins."]}),"\n",(0,d.jsx)(n.h3,{id:"docs",children:"Docs"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"versionPersistence"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'localStorage' | 'none'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Defines the browser persistence of the preferred docs version."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.hideable"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Show a hide button at the bottom of the sidebar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.autoCollapseCategories"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Automatically collapse all sibling categories of the one you navigate to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n docs: {\n // highlight-start\n versionPersistence: 'localStorage',\n sidebar: {\n hideable: false,\n autoCollapseCategories: false,\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"blog",children:"Blog"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.groupByYear"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"true"})}),(0,d.jsx)(n.td,{children:"Group sidebar blog posts by years."})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n blog: {\n // highlight-start\n sidebar: {\n groupByYear: true,\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"navbar",children:"Navbar"}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Title for the navbar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"See below"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Customization of the logo object."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"NavbarItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"A list of navbar items. See specification below."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"hideOnScroll"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Whether the navbar is hidden when the user scrolls down."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'primary' | 'dark'"})}),(0,d.jsx)(n.td,{children:"Same as theme"}),(0,d.jsx)(n.td,{children:"Sets the navbar style, ignoring the dark/light theme."})]})]})]})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-logo",children:"Navbar logo"}),"\n",(0,d.jsxs)(n.p,{children:["The logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL is set to base URL of your site by default. Although you can specify your own URL for the logo, if it is an external link, it will open in a new tab. In addition, you can override a value for the target attribute of logo link, it can come in handy if you are hosting docs website in a subdirectory of your main website, and in which case you probably do not need a link in the logo to the main website will open in a new tab."]}),"\n",(0,d.jsx)(n.p,{children:"To improve dark mode support, you can also set a different logo for this mode."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-logo",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"alt"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Alt tag for the logo image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"src"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"URL to the logo image. Base URL is appended by default."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"srcDark"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo.src"})}),(0,d.jsx)(n.td,{children:"An alternative image URL to use in dark mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"siteConfig.baseUrl"})}),(0,d.jsx)(n.td,{children:"Link to navigate to when the logo is clicked."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"width"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"width"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"height"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"height"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"target"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:["Calculated based on ",(0,d.jsx)(n.code,{children:"href"})," (external links will open in a new tab, all others in the current one)."]}),(0,d.jsxs)(n.td,{children:["The ",(0,d.jsx)(n.code,{children:"target"})," attribute of the link; controls whether the link is opened in a new tab, the current one, or otherwise."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS class applied to the image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"object"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS inline style object. React/JSX flavor, using camelCase properties."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n title: 'Site Title',\n // highlight-start\n logo: {\n alt: 'Site Logo',\n src: 'img/logo.svg',\n srcDark: 'img/logo_dark.svg',\n href: 'https://docusaurus.io/',\n target: '_self',\n width: 32,\n height: 32,\n className: 'custom-navbar-logo-class',\n style: {border: 'solid red'},\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-items",children:"Navbar items"}),"\n",(0,d.jsxs)(n.p,{children:["You can add items to the navbar via ",(0,d.jsx)(n.code,{children:"themeConfig.navbar.items"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-start\n items: [\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n {to: 'blog', label: 'Blog', position: 'left'},\n {\n type: 'docsVersionDropdown',\n position: 'right',\n },\n {\n type: 'localeDropdown',\n position: 'right',\n },\n {\n href: 'https://github.com/facebook/docusaurus',\n position: 'right',\n className: 'header-github-link',\n 'aria-label': 'GitHub repository',\n },\n ],\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["The items can have different behaviors based on the ",(0,d.jsx)(n.code,{children:"type"})," field. The sections below will introduce you to all the types of navbar items available."]}),"\n",(0,d.jsx)(n.h4,{id:"navbar-link",children:"Navbar link"}),"\n",(0,d.jsx)(n.p,{children:"By default, Navbar items are regular links (internal or external)."}),"\n",(0,d.jsxs)(n.p,{children:["React Router should automatically apply active link styling to links, but you can use ",(0,d.jsx)(n.code,{children:"activeBasePath"})," in edge cases. For cases in which a link should be active on several different paths (such as when you have multiple doc folders under the same sidebar), you can use ",(0,d.jsx)(n.code,{children:"activeBaseRegex"}),". ",(0,d.jsx)(n.code,{children:"activeBaseRegex"})," is a more flexible alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," and takes precedence over it -- Docusaurus parses it into a regular expression that is tested against the current URL."]}),"\n",(0,d.jsxs)(n.p,{children:["Outbound (external) links automatically get ",(0,d.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'})," attributes."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsxs)(n.td,{children:["Same as ",(0,d.jsx)(n.code,{children:"label"}),", but renders pure HTML instead of text content."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"prependBaseUrlToHref"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Prepends the baseUrl to ",(0,d.jsx)(n.code,{children:"href"})," values."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBasePath"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:[(0,d.jsx)(n.code,{children:"to"})," / ",(0,d.jsx)(n.code,{children:"href"})]}),(0,d.jsx)(n.td,{children:"To apply the active class styling on all routes starting with this path. This usually isn't necessary."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBaseRegex"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," if required."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class (for styling any item)."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsx)(n.p,{children:"In addition to the fields above, you can specify other arbitrary attributes that can be applied to a HTML link."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n to: 'docs/introduction',\n // Only one of \"to\" or \"href\" should be used\n // href: 'https://www.facebook.com',\n label: 'Introduction',\n // Only one of \"label\" or \"html\" should be used\n // html: '<b>Introduction</b>'\n position: 'left',\n activeBaseRegex: 'docs/(next|v8)',\n target: '_blank',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-dropdown",children:"Navbar dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["Navbar items of the type ",(0,d.jsx)(n.code,{children:"dropdown"})," has the additional ",(0,d.jsx)(n.code,{children:"items"})," field, an inner array of navbar items."]}),"\n",(0,d.jsxs)(n.p,{children:["Navbar dropdown items only accept the following ",(0,d.jsx)(n.strong,{children:'"link-like" item types'}),":"]}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-link",children:"Navbar link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-link",children:"Navbar doc link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-docs-version",children:"Navbar docs version"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-sidebar",children:"Navbar doc sidebar"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-with-custom-html",children:"Navbar with custom HTML"})}),"\n"]}),"\n",(0,d.jsxs)(n.p,{children:["Note that the dropdown base item is a clickable link as well, so this item can receive any of the props of a ",(0,d.jsx)(n.a,{href:"#navbar-link",children:"plain navbar link"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'dropdown'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The items to be contained in the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'dropdown',\n label: 'Community',\n position: 'left',\n items: [\n {\n label: 'Facebook',\n href: 'https://www.facebook.com',\n },\n {\n type: 'doc',\n label: 'Social',\n docId: 'social',\n },\n // ... more items\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-link",children:"Navbar doc link"}),"\n",(0,d.jsxs)(n.p,{children:["If you want to link to a specific doc, this special navbar item type will render the link to the doc of the provided ",(0,d.jsx)(n.code,{children:"docId"}),". It will get the class ",(0,d.jsx)(n.code,{children:"navbar__link--active"})," as long as you browse a doc of the same sidebar."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'doc'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the doc that this item links to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-sidebar",children:"Navbar linked to a sidebar"}),"\n",(0,d.jsx)(n.p,{children:"You can link a navbar item to the first document link (which can be a doc link or a generated category index) of a given sidebar without having to hardcode a doc ID."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-sidebar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docSidebar'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this navbar item to a sidebar's first document."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebarId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the sidebar that this item is linked to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"First document link's sidebar label"}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the sidebar belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"tip",children:(0,d.jsx)(n.p,{children:"Use this navbar item type if your sidebar is updated often and the order is not stable."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docSidebar',\n position: 'left',\n sidebarId: 'api',\n label: 'API',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n tutorial: [\n {\n type: 'autogenerated',\n dirName: 'guides',\n },\n ],\n api: [\n // highlight-next-line\n 'cli', // The navbar item will be linking to this doc\n 'docusaurus-core',\n {\n type: 'autogenerated',\n dirName: 'api',\n },\n ],\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version-dropdown",children:"Navbar docs version dropdown"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type that will render a dropdown with all your site's available versions."}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one version to another, while staying on the same doc (as long as the doc ID is constant across versions)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersionDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a docs version dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownActiveClassDisabled"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Do not add the link active class when browsing docs."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersionDropdown',\n position: 'left',\n dropdownItemsAfter: [{to: '/versions', label: 'All versions'}],\n dropdownActiveClassDisabled: true,\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version",children:"Navbar docs version"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type will link to the active/browsed version of your doc (depends on the current URL), and fallback to the latest version."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersion'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc version link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version label."}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version."}),(0,d.jsx)(n.td,{children:"The internal link that this item points to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersion',\n position: 'left',\n to: '/path',\n label: 'label',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-locale-dropdown",children:"Navbar locale dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n feature"}),", this special navbar item type will render a dropdown with all your site's available locales."]}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one locale to another, while staying on the same page."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-locale-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'localeDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a locale dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"queryString"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The query string to be appended to the URL."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'localeDropdown',\n position: 'left',\n dropdownItemsAfter: [\n {\n to: 'https://my-site.com/help-us-translate',\n label: 'Help us translate',\n },\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-search",children:"Navbar search"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/search",children:"search"}),", the search bar will be the rightmost element in the navbar."]}),"\n",(0,d.jsx)(n.p,{children:"However, with this special navbar item type, you can change the default location."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-search",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'search'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a search bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"/"}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'search',\n position: 'right',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-with-custom-html",children:"Navbar with custom HTML"}),"\n",(0,d.jsx)(n.p,{children:"You can also render your own HTML markup inside a navbar item using this navbar item type."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-html",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'html'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a HTML element."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"value"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom HTML to be rendered inside this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'html',\n position: 'right',\n value: '<button>Give feedback</button>',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"auto-hide-sticky-navbar",children:"Auto-hide sticky navbar"}),"\n",(0,d.jsx)(n.p,{children:"You can enable this cool UI feature that automatically hides the navbar when a user starts scrolling down the page, and show it again when the user scrolls up."}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n hideOnScroll: true,\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-style",children:"Navbar style"}),"\n",(0,d.jsx)(n.p,{children:"You can set the static Navbar style without disabling the theme switching ability. The selected style will always apply no matter which theme user have selected."}),"\n",(0,d.jsxs)(n.p,{children:["Currently, there are two possible style options: ",(0,d.jsx)(n.code,{children:"dark"})," and ",(0,d.jsx)(n.code,{children:"primary"})," (based on the ",(0,d.jsx)(n.code,{children:"--ifm-color-primary"})," color). You can see the styles preview in the ",(0,d.jsx)(n.a,{href:"https://infima.dev/docs/components/navbar/",children:"Infima documentation"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n style: 'primary',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"codeblock",children:"CodeBlock"}),"\n",(0,d.jsxs)(n.p,{children:["Docusaurus uses ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"})," to highlight code blocks. All configuration are in the ",(0,d.jsx)(n.code,{children:"prism"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"codeblock",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"theme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for light-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"darkTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for dark-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultLanguage"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The default language to use for code blocks not declaring any explicit language."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"magicComments"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"MagicCommentConfig[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"see below"})}),(0,d.jsxs)(n.td,{children:["The list of ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-ts",children:"type MagicCommentConfig = {\n className: string;\n line?: string;\n block?: {start: string; end: string};\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",children:"const defaultMagicComments = [\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n];\n"})}),"\n",(0,d.jsx)(n.h3,{id:"theme",children:"Theme"}),"\n",(0,d.jsxs)(n.p,{children:["By default, we use ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"})," as syntax highlighting theme. You can specify a custom theme from the ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/tree/master/packages/prism-react-renderer/src/themes",children:"list of available themes"}),". You may also use a different syntax highlighting theme when the site is in dark mode."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-start\n theme: prismThemes.github,\n darkTheme: prismThemes.dracula,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsxs)(n.p,{children:["If you use the line highlighting Markdown syntax, you might need to specify a different highlight background color for the dark mode syntax highlighting theme. Refer to the ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#line-highlighting",children:"docs for guidance"}),"."]})}),"\n",(0,d.jsx)(n.h3,{id:"default-language",children:"Default language"}),"\n",(0,d.jsxs)(n.p,{children:["You can set a default language for code blocks if no language is added after the opening triple backticks (i.e. ```). Note that a valid ",(0,d.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"language name"})," must be passed."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n prism: {\n // highlight-next-line\n defaultLanguage: 'javascript',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"footer-1",children:"Footer"}),"\n",(0,d.jsxs)(n.p,{children:["You can add logo and a copyright to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer"}),". Logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL works in the same way of the navbar logo."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"footer",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Customization of the logo object. See ",(0,d.jsx)(n.a,{href:"#navbar-logo",children:"Navbar logo"})," for details."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"copyright"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The copyright message to be displayed at the bottom, also supports custom HTML."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'dark' | 'light'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color theme of the footer component."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"links"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"(Column | FooterLink)[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"The link groups to be present."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n footer: {\n logo: {\n alt: 'Meta Open Source Logo',\n src: 'img/meta_oss_logo.png',\n href: 'https://opensource.fb.com',\n width: 160,\n height: 51,\n },\n copyright: `Copyright \xa9 ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"footer-links",children:"Footer Links"}),"\n",(0,d.jsxs)(n.p,{children:["You can add links to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer.links"}),". There are two types of footer configurations: ",(0,d.jsx)(n.strong,{children:"multi-column footers"})," and ",(0,d.jsx)(n.strong,{children:"simple footers"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:["Multi-column footer links have a ",(0,d.jsx)(n.code,{children:"title"})," and a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s for each column."]}),"\n",(0,d.jsx)(t.Z,{name:"footer-links",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Label of the section of these links."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"FooterItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Links in this section."})]})]})]})}),"\n",(0,d.jsxs)(n.p,{children:["Accepted fields of each ",(0,d.jsx)(n.code,{children:"FooterItem"}),":"]}),"\n",(0,d.jsx)(t.Z,{name:"footer-items",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Text to be displayed for this link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Renders the HTML pass-through instead of a simple link. In case ",(0,d.jsx)(n.code,{children:"html"})," is used, no other options should be provided."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example multi-column configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n footer: {\n // highlight-start\n links: [\n {\n title: 'Docs',\n items: [\n {\n label: 'Style Guide',\n to: 'docs/',\n },\n {\n label: 'Second Doc',\n to: 'docs/doc2/',\n },\n ],\n },\n {\n title: 'Community',\n items: [\n {\n label: 'Stack Overflow',\n href: 'https://stackoverflow.com/questions/tagged/docusaurus',\n },\n {\n label: 'Discord',\n href: 'https://discordapp.com/invite/docusaurus',\n },\n {\n label: 'Twitter',\n href: 'https://twitter.com/docusaurus',\n },\n {\n html: `\n <a href=\"https://www.netlify.com\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Deploys by Netlify\">\n <img src=\"https://www.netlify.com/img/global/badges/netlify-color-accent.svg\" alt=\"Deploys by Netlify\" width=\"114\" height=\"51\" />\n </a>\n `,\n },\n ],\n },\n ],\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["A simple footer just has a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s displayed in a row."]}),"\n",(0,d.jsx)(n.p,{children:"Example simple configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:'export default {\n footer: {\n // highlight-start\n links: [\n {\n label: \'Stack Overflow\',\n href: \'https://stackoverflow.com/questions/tagged/docusaurus\',\n },\n {\n label: \'Discord\',\n href: \'https://discordapp.com/invite/docusaurus\',\n },\n {\n label: \'Twitter\',\n href: \'https://twitter.com/docusaurus\',\n },\n {\n html: `\n <a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">\n <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51" />\n </a>\n `,\n },\n ],\n // highlight-end\n },\n};\n'})}),"\n",(0,d.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,d.jsxs)(n.p,{children:["You can adjust the default table of contents via ",(0,d.jsx)(n.code,{children:"themeConfig.tableOfContents"}),"."]}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"minHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"2"})}),(0,d.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"maxHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"3"})}),(0,d.jsx)(n.td,{children:"Max heading level displayed in the TOC. Should be an integer between 2 and 6."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n tableOfContents: {\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,d.jsx)(n.h3,{id:"use-color-mode",children:(0,d.jsx)(n.code,{children:"useColorMode"})}),"\n",(0,d.jsx)(n.p,{children:"A React hook to access the color context. This context contains functions for setting light and dark mode and exposes boolean variable, indicating which mode is currently in use."}),"\n",(0,d.jsx)(n.p,{children:"Usage example:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useColorMode} from '@docusaurus/theme-common';\n\nconst Example = () => {\n // highlight-next-line\n const {colorMode, setColorMode} = useColorMode();\n\n return <h1>Dark mode is now {colorMode === 'dark' ? 'on' : 'off'}</h1>;\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsxs)(n.p,{children:["The component calling ",(0,d.jsx)(n.code,{children:"useColorMode"})," must be a child of the ",(0,d.jsx)(n.code,{children:"Layout"})," component."]}),(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"function ExamplePage() {\n return (\n <Layout>\n <Example />\n </Layout>\n );\n}\n"})})]}),"\n",(0,d.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,d.jsxs)(n.p,{children:["Read the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,d.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Base path"}),": ",(0,d.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-theme-[themeName]"})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Multi-instance path"}),": N/A"]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,d.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,d.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Markdown files"}),": N/A"]}),"\n"]}),"\n",(0,d.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-theme-classic\n\u2502\n\u2502 # translations for the theme\n\u251c\u2500\u2500 navbar.json\n\u2514\u2500\u2500 footer.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(a,{...e})}):a(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var d=i(27378);const s={},t=d.createContext(s);function r(e){const n=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03f86864.df486eb3.js b/assets/js/03f86864.df486eb3.js deleted file mode 100644 index d57b79e2cac9..000000000000 --- a/assets/js/03f86864.df486eb3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22054],{52605:(e,n,i)=>{i.d(n,{Z:()=>o});var d=i(24246),s=i(27378),t=i(80474),r=i(3620);const l={apiTable:"apiTable_e8hp"};function c({name:e,children:n},i){const l=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),c=e?`${e}-${l}`:l,h=`#${c}`,o=(0,r.k6)();return(0,t.Z)().collectAnchor(c),(0,d.jsx)("tr",{id:c,tabIndex:0,ref:o.location.hash===h?i:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||o.push(h)},onKeyDown:e=>{"Enter"===e.key&&o.push(h)},children:n.props.children})}const h=s.forwardRef(c);function o({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[i,t]=s.Children.toArray(e.props.children),r=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=r.current)||void 0===e||e.focus()}),[r]);const c=s.Children.map(t.props.children,(e=>(0,d.jsx)(h,{name:n,ref:r,children:e})));return(0,d.jsxs)("table",{className:l.apiTable,children:[i,(0,d.jsx)("tbody",{children:c})]})}},88313:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>x,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var d=i(24246),s=i(71670),t=i(52605);const r={sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},l="Theme configuration",c={id:"api/themes/theme-configuration",title:"Theme configuration",description:"This configuration applies to all main themes.",source:"@site/docs/api/themes/theme-configuration.mdx",sourceDirName:"api/themes",slug:"/api/themes/configuration",permalink:"/docs/api/themes/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},sidebar:"api",previous:{title:"Themes overview",permalink:"/docs/api/themes"},next:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"}},h={},o=[{value:"Common",id:"common",level:2},{value:"Color mode",id:"color-mode---dark-mode",level:3},{value:"Meta image",id:"meta-image",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Announcement bar",id:"announcement-bar",level:3},{value:"Plugins",id:"plugins",level:2},{value:"Docs",id:"docs",level:3},{value:"Blog",id:"blog",level:3},{value:"Navbar",id:"navbar",level:2},{value:"Navbar logo",id:"navbar-logo",level:3},{value:"Navbar items",id:"navbar-items",level:3},{value:"Navbar link",id:"navbar-link",level:4},{value:"Navbar dropdown",id:"navbar-dropdown",level:4},{value:"Navbar doc link",id:"navbar-doc-link",level:4},{value:"Navbar linked to a sidebar",id:"navbar-doc-sidebar",level:4},{value:"Navbar docs version dropdown",id:"navbar-docs-version-dropdown",level:4},{value:"Navbar docs version",id:"navbar-docs-version",level:4},{value:"Navbar locale dropdown",id:"navbar-locale-dropdown",level:4},{value:"Navbar search",id:"navbar-search",level:4},{value:"Navbar with custom HTML",id:"navbar-with-custom-html",level:4},{value:"Auto-hide sticky navbar",id:"auto-hide-sticky-navbar",level:3},{value:"Navbar style",id:"navbar-style",level:3},{value:"CodeBlock",id:"codeblock",level:2},{value:"Theme",id:"theme",level:3},{value:"Default language",id:"default-language",level:3},{value:"Footer",id:"footer-1",level:2},{value:"Footer Links",id:"footer-links",level:3},{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Hooks",id:"hooks",level:2},{value:"<code>useColorMode</code>",id:"use-color-mode",level:3},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"theme-configuration",children:"Theme configuration"})}),"\n","\n",(0,d.jsxs)(n.p,{children:["This configuration applies to all ",(0,d.jsx)(n.a,{href:"/docs/api/themes",children:"main themes"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"common",children:"Common"}),"\n",(0,d.jsx)(n.h3,{id:"color-mode---dark-mode",children:"Color mode"}),"\n",(0,d.jsx)(n.p,{children:"The classic theme provides by default light and dark mode support, with a navbar switch for the user."}),"\n",(0,d.jsxs)(n.p,{children:["It is possible to customize the color mode support within the ",(0,d.jsx)(n.code,{children:"colorMode"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultMode"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'light' | 'dark'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color mode when user first visits the site."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"disableSwitch"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Hides the switch in the navbar. Useful if you want to support a single color mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"respectPrefersColorScheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Whether to use the ",(0,d.jsx)(n.code,{children:"prefers-color-scheme"})," media-query, using user system preferences, instead of the hardcoded ",(0,d.jsx)(n.code,{children:"defaultMode"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n colorMode: {\n defaultMode: 'light',\n disableSwitch: false,\n respectPrefersColorScheme: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"warning",children:[(0,d.jsxs)(n.p,{children:["With ",(0,d.jsx)(n.code,{children:"respectPrefersColorScheme: true"}),", the ",(0,d.jsx)(n.code,{children:"defaultMode"})," is overridden by user system preferences."]}),(0,d.jsx)(n.p,{children:"If you only want to support one color mode, you likely want to ignore user system preferences."})]}),"\n",(0,d.jsx)(n.h3,{id:"meta-image",children:"Meta image"}),"\n",(0,d.jsxs)(n.p,{children:["You can configure a default image that will be used for your meta tag, in particular ",(0,d.jsx)(n.code,{children:"og:image"})," and ",(0,d.jsx)(n.code,{children:"twitter:image"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"image"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:'The meta image URL for the site. Relative to your site\'s "static" directory. Cannot be SVGs. Can be external URLs too.'})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n image: 'img/docusaurus.png',\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"metadata",children:"Metadata"}),"\n",(0,d.jsx)(n.p,{children:"You can configure additional HTML metadata (and override existing ones)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"metadata"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Metadata[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsxs)(n.td,{children:["Any field will be directly passed to the ",(0,d.jsx)(n.code,{children:"<meta />"})," tag. Possible fields include ",(0,d.jsx)(n.code,{children:"id"}),", ",(0,d.jsx)(n.code,{children:"name"}),", ",(0,d.jsx)(n.code,{children:"property"}),", ",(0,d.jsx)(n.code,{children:"content"}),", ",(0,d.jsx)(n.code,{children:"itemprop"}),", etc."]})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n metadata: [{name: 'twitter:card', content: 'summary'}],\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"announcement-bar",children:"Announcement bar"}),"\n",(0,d.jsxs)(n.p,{children:["Sometimes you want to announce something in your website. Just for such a case, you can add an announcement bar. This is a non-fixed and optionally dismissible panel above the navbar. All configuration are in the ",(0,d.jsx)(n.code,{children:"announcementBar"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"announcement-bar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"id"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'announcement-bar'"})}),(0,d.jsx)(n.td,{children:"Any value that will identify this message."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"content"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"The text content of the announcement. HTML will be interpolated."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"backgroundColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#fff'"})}),(0,d.jsx)(n.td,{children:"Background color of the entire bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"textColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#000'"})}),(0,d.jsx)(n.td,{children:"Announcement text color."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"isCloseable"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"true"})}),(0,d.jsx)(n.td,{children:"Whether this announcement can be dismissed with a '\xd7' button."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n announcementBar: {\n id: 'support_us',\n content:\n 'We are looking to revamp our docs, please fill <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\">this survey</a>',\n backgroundColor: '#fafbfc',\n textColor: '#091E42',\n isCloseable: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"plugins",children:"Plugins"}),"\n",(0,d.jsxs)(n.p,{children:["Our ",(0,d.jsx)(n.a,{href:"/docs/api/themes",children:"main themes"})," offer additional theme configuration options for Docusaurus core content plugins."]}),"\n",(0,d.jsx)(n.h3,{id:"docs",children:"Docs"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"versionPersistence"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'localStorage' | 'none'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Defines the browser persistence of the preferred docs version."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.hideable"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Show a hide button at the bottom of the sidebar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.autoCollapseCategories"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Automatically collapse all sibling categories of the one you navigate to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n docs: {\n // highlight-start\n versionPersistence: 'localStorage',\n sidebar: {\n hideable: false,\n autoCollapseCategories: false,\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"blog",children:"Blog"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebar.groupByYear"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"true"})}),(0,d.jsx)(n.td,{children:"Group sidebar blog posts by years."})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n blog: {\n // highlight-start\n sidebar: {\n groupByYear: true,\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"navbar",children:"Navbar"}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Title for the navbar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"See below"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Customization of the logo object."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"NavbarItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"A list of navbar items. See specification below."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"hideOnScroll"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Whether the navbar is hidden when the user scrolls down."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'primary' | 'dark'"})}),(0,d.jsx)(n.td,{children:"Same as theme"}),(0,d.jsx)(n.td,{children:"Sets the navbar style, ignoring the dark/light theme."})]})]})]})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-logo",children:"Navbar logo"}),"\n",(0,d.jsxs)(n.p,{children:["The logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL is set to base URL of your site by default. Although you can specify your own URL for the logo, if it is an external link, it will open in a new tab. In addition, you can override a value for the target attribute of logo link, it can come in handy if you are hosting docs website in a subdirectory of your main website, and in which case you probably do not need a link in the logo to the main website will open in a new tab."]}),"\n",(0,d.jsx)(n.p,{children:"To improve dark mode support, you can also set a different logo for this mode."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-logo",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"alt"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Alt tag for the logo image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"src"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"URL to the logo image. Base URL is appended by default."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"srcDark"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo.src"})}),(0,d.jsx)(n.td,{children:"An alternative image URL to use in dark mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"siteConfig.baseUrl"})}),(0,d.jsx)(n.td,{children:"Link to navigate to when the logo is clicked."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"width"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"width"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"height"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"height"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"target"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:["Calculated based on ",(0,d.jsx)(n.code,{children:"href"})," (external links will open in a new tab, all others in the current one)."]}),(0,d.jsxs)(n.td,{children:["The ",(0,d.jsx)(n.code,{children:"target"})," attribute of the link; controls whether the link is opened in a new tab, the current one, or otherwise."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS class applied to the image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"object"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS inline style object. React/JSX flavor, using camelCase properties."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n title: 'Site Title',\n // highlight-start\n logo: {\n alt: 'Site Logo',\n src: 'img/logo.svg',\n srcDark: 'img/logo_dark.svg',\n href: 'https://docusaurus.io/',\n target: '_self',\n width: 32,\n height: 32,\n className: 'custom-navbar-logo-class',\n style: {border: 'solid red'},\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-items",children:"Navbar items"}),"\n",(0,d.jsxs)(n.p,{children:["You can add items to the navbar via ",(0,d.jsx)(n.code,{children:"themeConfig.navbar.items"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-start\n items: [\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n {to: 'blog', label: 'Blog', position: 'left'},\n {\n type: 'docsVersionDropdown',\n position: 'right',\n },\n {\n type: 'localeDropdown',\n position: 'right',\n },\n {\n href: 'https://github.com/facebook/docusaurus',\n position: 'right',\n className: 'header-github-link',\n 'aria-label': 'GitHub repository',\n },\n ],\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["The items can have different behaviors based on the ",(0,d.jsx)(n.code,{children:"type"})," field. The sections below will introduce you to all the types of navbar items available."]}),"\n",(0,d.jsx)(n.h4,{id:"navbar-link",children:"Navbar link"}),"\n",(0,d.jsx)(n.p,{children:"By default, Navbar items are regular links (internal or external)."}),"\n",(0,d.jsxs)(n.p,{children:["React Router should automatically apply active link styling to links, but you can use ",(0,d.jsx)(n.code,{children:"activeBasePath"})," in edge cases. For cases in which a link should be active on several different paths (such as when you have multiple doc folders under the same sidebar), you can use ",(0,d.jsx)(n.code,{children:"activeBaseRegex"}),". ",(0,d.jsx)(n.code,{children:"activeBaseRegex"})," is a more flexible alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," and takes precedence over it -- Docusaurus parses it into a regular expression that is tested against the current URL."]}),"\n",(0,d.jsxs)(n.p,{children:["Outbound (external) links automatically get ",(0,d.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'})," attributes."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsxs)(n.td,{children:["Same as ",(0,d.jsx)(n.code,{children:"label"}),", but renders pure HTML instead of text content."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"prependBaseUrlToHref"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Prepends the baseUrl to ",(0,d.jsx)(n.code,{children:"href"})," values."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBasePath"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:[(0,d.jsx)(n.code,{children:"to"})," / ",(0,d.jsx)(n.code,{children:"href"})]}),(0,d.jsx)(n.td,{children:"To apply the active class styling on all routes starting with this path. This usually isn't necessary."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBaseRegex"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," if required."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class (for styling any item)."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsx)(n.p,{children:"In addition to the fields above, you can specify other arbitrary attributes that can be applied to a HTML link."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n to: 'docs/introduction',\n // Only one of \"to\" or \"href\" should be used\n // href: 'https://www.facebook.com',\n label: 'Introduction',\n // Only one of \"label\" or \"html\" should be used\n // html: '<b>Introduction</b>'\n position: 'left',\n activeBaseRegex: 'docs/(next|v8)',\n target: '_blank',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-dropdown",children:"Navbar dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["Navbar items of the type ",(0,d.jsx)(n.code,{children:"dropdown"})," has the additional ",(0,d.jsx)(n.code,{children:"items"})," field, an inner array of navbar items."]}),"\n",(0,d.jsxs)(n.p,{children:["Navbar dropdown items only accept the following ",(0,d.jsx)(n.strong,{children:'"link-like" item types'}),":"]}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-link",children:"Navbar link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-link",children:"Navbar doc link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-docs-version",children:"Navbar docs version"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-sidebar",children:"Navbar doc sidebar"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-with-custom-html",children:"Navbar with custom HTML"})}),"\n"]}),"\n",(0,d.jsxs)(n.p,{children:["Note that the dropdown base item is a clickable link as well, so this item can receive any of the props of a ",(0,d.jsx)(n.a,{href:"#navbar-link",children:"plain navbar link"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'dropdown'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The items to be contained in the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'dropdown',\n label: 'Community',\n position: 'left',\n items: [\n {\n label: 'Facebook',\n href: 'https://www.facebook.com',\n },\n {\n type: 'doc',\n label: 'Social',\n docId: 'social',\n },\n // ... more items\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-link",children:"Navbar doc link"}),"\n",(0,d.jsxs)(n.p,{children:["If you want to link to a specific doc, this special navbar item type will render the link to the doc of the provided ",(0,d.jsx)(n.code,{children:"docId"}),". It will get the class ",(0,d.jsx)(n.code,{children:"navbar__link--active"})," as long as you browse a doc of the same sidebar."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'doc'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the doc that this item links to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-sidebar",children:"Navbar linked to a sidebar"}),"\n",(0,d.jsx)(n.p,{children:"You can link a navbar item to the first document link (which can be a doc link or a generated category index) of a given sidebar without having to hardcode a doc ID."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-sidebar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docSidebar'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this navbar item to a sidebar's first document."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebarId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the sidebar that this item is linked to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"First document link's sidebar label"}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the sidebar belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"tip",children:(0,d.jsx)(n.p,{children:"Use this navbar item type if your sidebar is updated often and the order is not stable."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docSidebar',\n position: 'left',\n sidebarId: 'api',\n label: 'API',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n tutorial: [\n {\n type: 'autogenerated',\n dirName: 'guides',\n },\n ],\n api: [\n // highlight-next-line\n 'cli', // The navbar item will be linking to this doc\n 'docusaurus-core',\n {\n type: 'autogenerated',\n dirName: 'api',\n },\n ],\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version-dropdown",children:"Navbar docs version dropdown"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type that will render a dropdown with all your site's available versions."}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one version to another, while staying on the same doc (as long as the doc ID is constant across versions)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersionDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a docs version dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownActiveClassDisabled"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Do not add the link active class when browsing docs."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersionDropdown',\n position: 'left',\n dropdownItemsAfter: [{to: '/versions', label: 'All versions'}],\n dropdownActiveClassDisabled: true,\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version",children:"Navbar docs version"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type will link to the active/browsed version of your doc (depends on the current URL), and fallback to the latest version."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersion'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc version link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version label."}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version."}),(0,d.jsx)(n.td,{children:"The internal link that this item points to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersion',\n position: 'left',\n to: '/path',\n label: 'label',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-locale-dropdown",children:"Navbar locale dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n feature"}),", this special navbar item type will render a dropdown with all your site's available locales."]}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one locale to another, while staying on the same page."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-locale-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'localeDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a locale dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"queryString"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The query string to be appended to the URL."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'localeDropdown',\n position: 'left',\n dropdownItemsAfter: [\n {\n to: 'https://my-site.com/help-us-translate',\n label: 'Help us translate',\n },\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-search",children:"Navbar search"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/search",children:"search"}),", the search bar will be the rightmost element in the navbar."]}),"\n",(0,d.jsx)(n.p,{children:"However, with this special navbar item type, you can change the default location."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-search",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'search'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a search bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"/"}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'search',\n position: 'right',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-with-custom-html",children:"Navbar with custom HTML"}),"\n",(0,d.jsx)(n.p,{children:"You can also render your own HTML markup inside a navbar item using this navbar item type."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-html",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'html'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a HTML element."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"value"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom HTML to be rendered inside this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'html',\n position: 'right',\n value: '<button>Give feedback</button>',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"auto-hide-sticky-navbar",children:"Auto-hide sticky navbar"}),"\n",(0,d.jsx)(n.p,{children:"You can enable this cool UI feature that automatically hides the navbar when a user starts scrolling down the page, and show it again when the user scrolls up."}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n hideOnScroll: true,\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-style",children:"Navbar style"}),"\n",(0,d.jsx)(n.p,{children:"You can set the static Navbar style without disabling the theme switching ability. The selected style will always apply no matter which theme user have selected."}),"\n",(0,d.jsxs)(n.p,{children:["Currently, there are two possible style options: ",(0,d.jsx)(n.code,{children:"dark"})," and ",(0,d.jsx)(n.code,{children:"primary"})," (based on the ",(0,d.jsx)(n.code,{children:"--ifm-color-primary"})," color). You can see the styles preview in the ",(0,d.jsx)(n.a,{href:"https://infima.dev/docs/components/navbar/",children:"Infima documentation"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n style: 'primary',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"codeblock",children:"CodeBlock"}),"\n",(0,d.jsxs)(n.p,{children:["Docusaurus uses ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"})," to highlight code blocks. All configuration are in the ",(0,d.jsx)(n.code,{children:"prism"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"codeblock",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"theme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for light-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"darkTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for dark-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultLanguage"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The default language to use for code blocks not declaring any explicit language."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"magicComments"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"MagicCommentConfig[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"see below"})}),(0,d.jsxs)(n.td,{children:["The list of ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-ts",children:"type MagicCommentConfig = {\n className: string;\n line?: string;\n block?: {start: string; end: string};\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",children:"const defaultMagicComments = [\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n];\n"})}),"\n",(0,d.jsx)(n.h3,{id:"theme",children:"Theme"}),"\n",(0,d.jsxs)(n.p,{children:["By default, we use ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"})," as syntax highlighting theme. You can specify a custom theme from the ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/tree/master/packages/prism-react-renderer/src/themes",children:"list of available themes"}),". You may also use a different syntax highlighting theme when the site is in dark mode."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-start\n theme: prismThemes.github,\n darkTheme: prismThemes.dracula,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsxs)(n.p,{children:["If you use the line highlighting Markdown syntax, you might need to specify a different highlight background color for the dark mode syntax highlighting theme. Refer to the ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#line-highlighting",children:"docs for guidance"}),"."]})}),"\n",(0,d.jsx)(n.h3,{id:"default-language",children:"Default language"}),"\n",(0,d.jsxs)(n.p,{children:["You can set a default language for code blocks if no language is added after the opening triple backticks (i.e. ```). Note that a valid ",(0,d.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"language name"})," must be passed."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n prism: {\n // highlight-next-line\n defaultLanguage: 'javascript',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"footer-1",children:"Footer"}),"\n",(0,d.jsxs)(n.p,{children:["You can add logo and a copyright to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer"}),". Logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL works in the same way of the navbar logo."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"footer",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Customization of the logo object. See ",(0,d.jsx)(n.a,{href:"#navbar-logo",children:"Navbar logo"})," for details."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"copyright"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The copyright message to be displayed at the bottom, also supports custom HTML."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'dark' | 'light'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color theme of the footer component."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"links"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"(Column | FooterLink)[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"The link groups to be present."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n footer: {\n logo: {\n alt: 'Meta Open Source Logo',\n src: 'img/meta_oss_logo.png',\n href: 'https://opensource.fb.com',\n width: 160,\n height: 51,\n },\n copyright: `Copyright \xa9 ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"footer-links",children:"Footer Links"}),"\n",(0,d.jsxs)(n.p,{children:["You can add links to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer.links"}),". There are two types of footer configurations: ",(0,d.jsx)(n.strong,{children:"multi-column footers"})," and ",(0,d.jsx)(n.strong,{children:"simple footers"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:["Multi-column footer links have a ",(0,d.jsx)(n.code,{children:"title"})," and a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s for each column."]}),"\n",(0,d.jsx)(t.Z,{name:"footer-links",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Label of the section of these links."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"FooterItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Links in this section."})]})]})]})}),"\n",(0,d.jsxs)(n.p,{children:["Accepted fields of each ",(0,d.jsx)(n.code,{children:"FooterItem"}),":"]}),"\n",(0,d.jsx)(t.Z,{name:"footer-items",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Text to be displayed for this link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Renders the HTML pass-through instead of a simple link. In case ",(0,d.jsx)(n.code,{children:"html"})," is used, no other options should be provided."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example multi-column configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n footer: {\n // highlight-start\n links: [\n {\n title: 'Docs',\n items: [\n {\n label: 'Style Guide',\n to: 'docs/',\n },\n {\n label: 'Second Doc',\n to: 'docs/doc2/',\n },\n ],\n },\n {\n title: 'Community',\n items: [\n {\n label: 'Stack Overflow',\n href: 'https://stackoverflow.com/questions/tagged/docusaurus',\n },\n {\n label: 'Discord',\n href: 'https://discordapp.com/invite/docusaurus',\n },\n {\n label: 'Twitter',\n href: 'https://twitter.com/docusaurus',\n },\n {\n html: `\n <a href=\"https://www.netlify.com\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Deploys by Netlify\">\n <img src=\"https://www.netlify.com/img/global/badges/netlify-color-accent.svg\" alt=\"Deploys by Netlify\" width=\"114\" height=\"51\" />\n </a>\n `,\n },\n ],\n },\n ],\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["A simple footer just has a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s displayed in a row."]}),"\n",(0,d.jsx)(n.p,{children:"Example simple configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:'export default {\n footer: {\n // highlight-start\n links: [\n {\n label: \'Stack Overflow\',\n href: \'https://stackoverflow.com/questions/tagged/docusaurus\',\n },\n {\n label: \'Discord\',\n href: \'https://discordapp.com/invite/docusaurus\',\n },\n {\n label: \'Twitter\',\n href: \'https://twitter.com/docusaurus\',\n },\n {\n html: `\n <a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">\n <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51" />\n </a>\n `,\n },\n ],\n // highlight-end\n },\n};\n'})}),"\n",(0,d.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,d.jsxs)(n.p,{children:["You can adjust the default table of contents via ",(0,d.jsx)(n.code,{children:"themeConfig.tableOfContents"}),"."]}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"minHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"2"})}),(0,d.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"maxHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"3"})}),(0,d.jsx)(n.td,{children:"Max heading level displayed in the TOC. Should be an integer between 2 and 6."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n tableOfContents: {\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,d.jsx)(n.h3,{id:"use-color-mode",children:(0,d.jsx)(n.code,{children:"useColorMode"})}),"\n",(0,d.jsx)(n.p,{children:"A React hook to access the color context. This context contains functions for setting light and dark mode and exposes boolean variable, indicating which mode is currently in use."}),"\n",(0,d.jsx)(n.p,{children:"Usage example:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useColorMode} from '@docusaurus/theme-common';\n\nconst Example = () => {\n // highlight-next-line\n const {colorMode, setColorMode} = useColorMode();\n\n return <h1>Dark mode is now {colorMode === 'dark' ? 'on' : 'off'}</h1>;\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsxs)(n.p,{children:["The component calling ",(0,d.jsx)(n.code,{children:"useColorMode"})," must be a child of the ",(0,d.jsx)(n.code,{children:"Layout"})," component."]}),(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"function ExamplePage() {\n return (\n <Layout>\n <Example />\n </Layout>\n );\n}\n"})})]}),"\n",(0,d.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,d.jsxs)(n.p,{children:["Read the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,d.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Base path"}),": ",(0,d.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-theme-[themeName]"})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Multi-instance path"}),": N/A"]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,d.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,d.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Markdown files"}),": N/A"]}),"\n"]}),"\n",(0,d.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-theme-classic\n\u2502\n\u2502 # translations for the theme\n\u251c\u2500\u2500 navbar.json\n\u2514\u2500\u2500 footer.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(a,{...e})}):a(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var d=i(27378);const s={},t=d.createContext(s);function r(e){const n=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/048b0d50.78627f11.js b/assets/js/048b0d50.78627f11.js new file mode 100644 index 000000000000..0b0df602708c --- /dev/null +++ b/assets/js/048b0d50.78627f11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45173],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(24246),r=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>C});var a=t(24246),r=t(27378),i=t(40624),o=t(75527),s=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:a}})=>({value:e,label:n,attributes:t,default:a})))}(t);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function v({queryString:e=!1,groupId:n}){const t=(0,s.k6)(),a=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(a),o=(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){m(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[a,t]);return[i,o]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,i=g(e),[o,s]=(0,r.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const a=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[c,u]=v({queryString:t,groupId:a}),[m,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,a]=(0,d.Nk)(n);return[t,(0,r.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:a}),p=(()=>{const e=null!=c?c:m;return f({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&s(p)}),[p]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}var x=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function k(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){k(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:r,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,a=l.indexOf(n),i=s[a].value;i!==t&&(c(n),r(i))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[a])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var a;n=null!==(a=l[t])&&void 0!==a?a:l[l.length-1];break}}null==n||n.focus()};return(0,a.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:r})=>(0,a.jsx)("li",w(j({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},r),{className:(0,i.Z)("tabs__item",y.tabItem,null==r?void 0:r.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function q({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,r.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,a.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=b(e);return(0,a.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,a.jsx)(O,j({},n,e)),(0,a.jsx)(q,j({},n,e))]})}function C(e){const n=(0,x.Z)();return(0,a.jsx)(D,w(j({},e),{children:p(e.children)}),String(n))}},57904:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=t(24246),r=t(71670),i=t(97555),o=t(61132);const s={},l="Diagram Examples",c={type:"mdx",permalink:"/tests/pages/diagrams",source:"@site/_dogfooding/_pages tests/diagrams.mdx",title:"Diagram Examples",description:"Invalid Diagrams",frontMatter:{},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx",unlisted:!1},u={},d=[{value:"Invalid Diagrams",id:"invalid-diagrams",level:2},{value:"Invalid type",id:"invalid-type",level:3},{value:"Invalid content",id:"invalid-content",level:3},{value:"Sequence Diagram",id:"sequence-diagram",level:2},{value:"Sequence Diagram (forest theme directive)",id:"sequence-diagram-forest-theme-directive",level:2},{value:"Gantt Chart",id:"gantt-chart",level:2},{value:"Flow Chart",id:"flow-chart",level:2},{value:"With Markdown:",id:"with-markdown",level:3},{value:"Class Diagram",id:"class-diagram",level:2},{value:"State Diagram",id:"state-diagram",level:2},{value:"Entity Relationship Diagram",id:"entity-relationship-diagram",level:2},{value:"User Journey",id:"user-journey",level:2},{value:"Pie Chart",id:"pie-chart",level:2},{value:"Requirement Diagram",id:"requirement-diagram",level:2},{value:"Gitgraph (Git) Diagram",id:"gitgraph-git-diagram",level:2},{value:"Mermaid in tabs",id:"mermaid-in-tabs",level:2},{value:"Mindmap",id:"mindmap",level:2},{value:"Quadrant Chart",id:"quadrant-chart",level:2}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",mermaid:"mermaid",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"diagram-examples",children:"Diagram Examples"})}),"\n",(0,a.jsx)(n.h2,{id:"invalid-diagrams",children:"Invalid Diagrams"}),"\n",(0,a.jsx)(n.p,{children:"Those errors should not crash the whole page"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-type",children:"Invalid type"}),"\n",(0,a.jsx)(n.mermaid,{value:"badType\n participant Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-content",children:"Invalid content"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n badInstruction Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram",children:"Sequence Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram-forest-theme-directive",children:"Sequence Diagram (forest theme directive)"}),"\n",(0,a.jsx)(n.p,{children:"It is possible to override default config locally with Mermaid text directives such as:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:'%%{init: { "theme": "forest" } }%%\n'})}),"\n",(0,a.jsx)(n.mermaid,{value:'%%{init: { "theme": "forest" } }%%\n\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!'}),"\n",(0,a.jsx)(n.h2,{id:"gantt-chart",children:"Gantt Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"gantt\ndateFormat YYYY-MM-DD\ntitle Adding GANTT diagram to mermaid\nexcludes weekdays 2014-01-10\n\nsection A section\nCompleted task :done, des1, 2014-01-06,2014-01-08\nActive task :active, des2, 2014-01-09, 3d\nFuture task : des3, after des2, 5d\nFuture task2 : des4, after des3, 5d"}),"\n",(0,a.jsx)(n.h2,{id:"flow-chart",children:"Flow Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"flowchart TD\n A[Start] --\x3e B{Is it?}\n B --\x3e|Yes| C[OK]\n C --\x3e D[Rethink]\n D --\x3e B\n B ----\x3e|No| E[End]"}),"\n",(0,a.jsx)(n.h3,{id:"with-markdown",children:"With Markdown:"}),"\n",(0,a.jsx)(n.mermaid,{value:'flowchart LR\n markdown["`This **is** _Markdown_`"]\n newLines["`Line1\n Line 2\n Line 3`"]\n markdown --\x3e newLines'}),"\n",(0,a.jsx)(n.h2,{id:"class-diagram",children:"Class Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:" classDiagram\n Animal <|-- Duck\n Animal <|-- Fish\n Animal <|-- Zebra\n Animal : +int age\n Animal : +String gender\n Animal: +isMammal()\n Animal: +mate()\n class Duck{\n +String beakColor\n +swim()\n +quack()\n }\n class Fish{\n -int sizeInFeet\n -canEat()\n }\n class Zebra{\n +bool is_wild\n +run()\n }"}),"\n",(0,a.jsx)(n.h2,{id:"state-diagram",children:"State Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"stateDiagram-v2\n [*] --\x3e Active\n\n state Active {\n [*] --\x3e NumLockOff\n NumLockOff --\x3e NumLockOn : EvNumLockPressed\n NumLockOn --\x3e NumLockOff : EvNumLockPressed\n --\n [*] --\x3e CapsLockOff\n CapsLockOff --\x3e CapsLockOn : EvCapsLockPressed\n CapsLockOn --\x3e CapsLockOff : EvCapsLockPressed\n --\n [*] --\x3e ScrollLockOff\n ScrollLockOff --\x3e ScrollLockOn : EvScrollLockPressed\n ScrollLockOn --\x3e ScrollLockOff : EvScrollLockPressed\n }"}),"\n",(0,a.jsx)(n.h2,{id:"entity-relationship-diagram",children:"Entity Relationship Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"erDiagram\n CAR ||--o{ NAMED-DRIVER : allows\n CAR {\n string registrationNumber\n string make\n string model\n }\n PERSON ||--o{ NAMED-DRIVER : is\n PERSON {\n string firstName\n string lastName\n int age\n }"}),"\n",(0,a.jsx)(n.h2,{id:"user-journey",children:"User Journey"}),"\n",(0,a.jsx)(n.mermaid,{value:"journey\n title My working day\n section Go to work\n Make tea: 5: Me\n Go upstairs: 3: Me\n Do work: 1: Me, Cat\n section Go home\n Go downstairs: 5: Me\n Sit down: 5: Me"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If there's too much space above it's due to a ",(0,a.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/issues/3501",children:"Mermaid bug"})]})}),"\n",(0,a.jsx)(n.h2,{id:"pie-chart",children:"Pie Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:'pie showData\n title Key elements in Product X\n "Calcium" : 42.96\n "Potassium" : 50.05\n "Magnesium" : 10.01\n "Iron" : 5'}),"\n",(0,a.jsx)(n.h2,{id:"requirement-diagram",children:"Requirement Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:' requirementDiagram\n\n requirement test_req {\n id: 1\n text: the test text.\n risk: high\n verifymethod: test\n }\n\n functionalRequirement test_req2 {\n id: 1.1\n text: the second test text.\n risk: low\n verifymethod: inspection\n }\n\n performanceRequirement test_req3 {\n id: 1.2\n text: the third test text.\n risk: medium\n verifymethod: demonstration\n }\n\n interfaceRequirement test_req4 {\n id: 1.2.1\n text: the fourth test text.\n risk: medium\n verifymethod: analysis\n }\n\n physicalRequirement test_req5 {\n id: 1.2.2\n text: the fifth test text.\n risk: medium\n verifymethod: analysis\n }\n\n designConstraint test_req6 {\n id: 1.2.3\n text: the sixth test text.\n risk: medium\n verifymethod: analysis\n }\n\n element test_entity {\n type: simulation\n }\n\n element test_entity2 {\n type: word doc\n docRef: reqs/test_entity\n }\n\n element test_entity3 {\n type: "test suite"\n docRef: github.com/all_the_tests\n }\n\n\n test_entity - satisfies -> test_req2\n test_req - traces -> test_req2\n test_req - contains -> test_req3\n test_req3 - contains -> test_req4\n test_req4 - derives -> test_req5\n test_req5 - refines -> test_req6\n test_entity3 - verifies -> test_req5\n test_req <- copies - test_entity2'}),"\n",(0,a.jsx)(n.h2,{id:"gitgraph-git-diagram",children:"Gitgraph (Git) Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%\n gitGraph\n commit\n branch hotfix\n checkout hotfix\n commit\n branch develop\n checkout develop\n commit id:\"ash\" tag:\"abc\"\n branch featureB\n checkout featureB\n commit type:HIGHLIGHT\n checkout main\n checkout hotfix\n commit type:NORMAL\n checkout develop\n commit type:REVERSE\n checkout featureB\n commit\n checkout main\n merge hotfix\n checkout featureB\n commit\n checkout develop\n branch featureA\n commit\n checkout develop\n merge hotfix\n checkout featureA\n commit\n checkout featureB\n commit\n checkout develop\n merge featureA\n branch release\n checkout release\n commit\n checkout main\n commit\n checkout release\n merge main\n checkout develop\n merge release"}),"\n",(0,a.jsx)(n.h2,{id:"mermaid-in-tabs",children:"Mermaid in tabs"}),"\n","\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsxs)(o.Z,{value:"tab-a",children:[(0,a.jsx)(n.p,{children:"The following mermaid diagram is shown:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n a ---\x3e c(10)\n b ---\x3e c(10)"})]}),(0,a.jsxs)(o.Z,{value:"tab-b",children:[(0,a.jsx)(n.p,{children:"This mermaid diagram is not displayed:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n d ---\x3e z(42)\n e ---\x3e z(42)"})]})]}),"\n",(0,a.jsx)(n.h2,{id:"mindmap",children:"Mindmap"}),"\n",(0,a.jsx)(n.mermaid,{value:"mindmap\n root((conda-forge))\n (Repos)\n (Package building)\n [*-feedstock]\n [staged-recipes]\n [cdt-builds]\n [msys2-recipes]\n (Maintenance)\n [admin-requests]\n [repodata-patches]\n (Configuration)\n [.github]\n [.cirun]\n [conda-forge-pinning]\n [conda-forge-ci-setup]\n [docker-images]\n [conda-smithy]\n (Automations)\n [admin-migrations]\n [artifact-validation]\n [regro/cf-scripts]\n [conda-forge-webservices]\n [regro/cf-graph-countyfair]\n [regro/libcfgraph + regro/libcflib]\n [feedstock-outputs]\n (Communications)\n [conda-forge.github.io]\n [blog]\n [status]\n [by-the-numbers]\n [conda-forge-status-monitor]\n [feedstocks]\n (Bots & apps)\n [conda-forge-admin]\n [conda-forge-bot]\n [conda-forge-coordinator]\n [conda-forge-daemon]\n [conda-forge-linter]\n [conda-forge-manager]\n [conda-forge-status]\n [regro-cf-autotick-bot]\n [conda-forge-curator]\n [conda-forge-webservices]\n (Delivery)\n [anaconda.org]\n [ghcr.io]\n [quay.io]\n (Installers)\n Miniforge\n Mambaforge\n (CI for builds)\n Azure Pipelines\n Travis CI\n cirun.io\n (Infra)\n Heroku\n Github Actions\n Circle CI"}),"\n",(0,a.jsx)(n.h2,{id:"quadrant-chart",children:"Quadrant Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>o});var a=t(27378);const r={},i=a.createContext(r);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/048b0d50.aeab80de.js b/assets/js/048b0d50.aeab80de.js deleted file mode 100644 index a02798fede72..000000000000 --- a/assets/js/048b0d50.aeab80de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45173],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(24246),r=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>C});var a=t(24246),r=t(27378),i=t(40624),o=t(75527),s=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:a}})=>({value:e,label:n,attributes:t,default:a})))}(t);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function v({queryString:e=!1,groupId:n}){const t=(0,s.k6)(),a=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(a),o=(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){m(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[a,t]);return[i,o]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,i=g(e),[o,s]=(0,r.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const a=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[c,u]=v({queryString:t,groupId:a}),[m,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,a]=(0,d.Nk)(n);return[t,(0,r.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:a}),p=(()=>{const e=null!=c?c:m;return f({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&s(p)}),[p]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}var x=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function k(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){k(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:r,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,a=l.indexOf(n),i=s[a].value;i!==t&&(c(n),r(i))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[a])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var a;n=null!==(a=l[t])&&void 0!==a?a:l[l.length-1];break}}null==n||n.focus()};return(0,a.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:r})=>(0,a.jsx)("li",w(j({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},r),{className:(0,i.Z)("tabs__item",y.tabItem,null==r?void 0:r.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function q({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,r.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,a.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=b(e);return(0,a.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,a.jsx)(O,j({},n,e)),(0,a.jsx)(q,j({},n,e))]})}function C(e){const n=(0,x.Z)();return(0,a.jsx)(D,w(j({},e),{children:p(e.children)}),String(n))}},57904:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=t(24246),r=t(71670),i=t(97555),o=t(61132);const s={},l="Diagram Examples",c={type:"mdx",permalink:"/tests/pages/diagrams",source:"@site/_dogfooding/_pages tests/diagrams.mdx",title:"Diagram Examples",description:"Invalid Diagrams",frontMatter:{},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx",unlisted:!1},u={},d=[{value:"Invalid Diagrams",id:"invalid-diagrams",level:2},{value:"Invalid type",id:"invalid-type",level:3},{value:"Invalid content",id:"invalid-content",level:3},{value:"Sequence Diagram",id:"sequence-diagram",level:2},{value:"Sequence Diagram (forest theme directive)",id:"sequence-diagram-forest-theme-directive",level:2},{value:"Gantt Chart",id:"gantt-chart",level:2},{value:"Flow Chart",id:"flow-chart",level:2},{value:"With Markdown:",id:"with-markdown",level:3},{value:"Class Diagram",id:"class-diagram",level:2},{value:"State Diagram",id:"state-diagram",level:2},{value:"Entity Relationship Diagram",id:"entity-relationship-diagram",level:2},{value:"User Journey",id:"user-journey",level:2},{value:"Pie Chart",id:"pie-chart",level:2},{value:"Requirement Diagram",id:"requirement-diagram",level:2},{value:"Gitgraph (Git) Diagram",id:"gitgraph-git-diagram",level:2},{value:"Mermaid in tabs",id:"mermaid-in-tabs",level:2},{value:"Mindmap",id:"mindmap",level:2},{value:"Quadrant Chart",id:"quadrant-chart",level:2}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",mermaid:"mermaid",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"diagram-examples",children:"Diagram Examples"})}),"\n",(0,a.jsx)(n.h2,{id:"invalid-diagrams",children:"Invalid Diagrams"}),"\n",(0,a.jsx)(n.p,{children:"Those errors should not crash the whole page"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-type",children:"Invalid type"}),"\n",(0,a.jsx)(n.mermaid,{value:"badType\n participant Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-content",children:"Invalid content"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n badInstruction Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram",children:"Sequence Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram-forest-theme-directive",children:"Sequence Diagram (forest theme directive)"}),"\n",(0,a.jsx)(n.p,{children:"It is possible to override default config locally with Mermaid text directives such as:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:'%%{init: { "theme": "forest" } }%%\n'})}),"\n",(0,a.jsx)(n.mermaid,{value:'%%{init: { "theme": "forest" } }%%\n\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!'}),"\n",(0,a.jsx)(n.h2,{id:"gantt-chart",children:"Gantt Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"gantt\ndateFormat YYYY-MM-DD\ntitle Adding GANTT diagram to mermaid\nexcludes weekdays 2014-01-10\n\nsection A section\nCompleted task :done, des1, 2014-01-06,2014-01-08\nActive task :active, des2, 2014-01-09, 3d\nFuture task : des3, after des2, 5d\nFuture task2 : des4, after des3, 5d"}),"\n",(0,a.jsx)(n.h2,{id:"flow-chart",children:"Flow Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"flowchart TD\n A[Start] --\x3e B{Is it?}\n B --\x3e|Yes| C[OK]\n C --\x3e D[Rethink]\n D --\x3e B\n B ----\x3e|No| E[End]"}),"\n",(0,a.jsx)(n.h3,{id:"with-markdown",children:"With Markdown:"}),"\n",(0,a.jsx)(n.mermaid,{value:'flowchart LR\n markdown["`This **is** _Markdown_`"]\n newLines["`Line1\n Line 2\n Line 3`"]\n markdown --\x3e newLines'}),"\n",(0,a.jsx)(n.h2,{id:"class-diagram",children:"Class Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:" classDiagram\n Animal <|-- Duck\n Animal <|-- Fish\n Animal <|-- Zebra\n Animal : +int age\n Animal : +String gender\n Animal: +isMammal()\n Animal: +mate()\n class Duck{\n +String beakColor\n +swim()\n +quack()\n }\n class Fish{\n -int sizeInFeet\n -canEat()\n }\n class Zebra{\n +bool is_wild\n +run()\n }"}),"\n",(0,a.jsx)(n.h2,{id:"state-diagram",children:"State Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"stateDiagram-v2\n [*] --\x3e Active\n\n state Active {\n [*] --\x3e NumLockOff\n NumLockOff --\x3e NumLockOn : EvNumLockPressed\n NumLockOn --\x3e NumLockOff : EvNumLockPressed\n --\n [*] --\x3e CapsLockOff\n CapsLockOff --\x3e CapsLockOn : EvCapsLockPressed\n CapsLockOn --\x3e CapsLockOff : EvCapsLockPressed\n --\n [*] --\x3e ScrollLockOff\n ScrollLockOff --\x3e ScrollLockOn : EvScrollLockPressed\n ScrollLockOn --\x3e ScrollLockOff : EvScrollLockPressed\n }"}),"\n",(0,a.jsx)(n.h2,{id:"entity-relationship-diagram",children:"Entity Relationship Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"erDiagram\n CAR ||--o{ NAMED-DRIVER : allows\n CAR {\n string registrationNumber\n string make\n string model\n }\n PERSON ||--o{ NAMED-DRIVER : is\n PERSON {\n string firstName\n string lastName\n int age\n }"}),"\n",(0,a.jsx)(n.h2,{id:"user-journey",children:"User Journey"}),"\n",(0,a.jsx)(n.mermaid,{value:"journey\n title My working day\n section Go to work\n Make tea: 5: Me\n Go upstairs: 3: Me\n Do work: 1: Me, Cat\n section Go home\n Go downstairs: 5: Me\n Sit down: 5: Me"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If there's too much space above it's due to a ",(0,a.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/issues/3501",children:"Mermaid bug"})]})}),"\n",(0,a.jsx)(n.h2,{id:"pie-chart",children:"Pie Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:'pie showData\n title Key elements in Product X\n "Calcium" : 42.96\n "Potassium" : 50.05\n "Magnesium" : 10.01\n "Iron" : 5'}),"\n",(0,a.jsx)(n.h2,{id:"requirement-diagram",children:"Requirement Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:' requirementDiagram\n\n requirement test_req {\n id: 1\n text: the test text.\n risk: high\n verifymethod: test\n }\n\n functionalRequirement test_req2 {\n id: 1.1\n text: the second test text.\n risk: low\n verifymethod: inspection\n }\n\n performanceRequirement test_req3 {\n id: 1.2\n text: the third test text.\n risk: medium\n verifymethod: demonstration\n }\n\n interfaceRequirement test_req4 {\n id: 1.2.1\n text: the fourth test text.\n risk: medium\n verifymethod: analysis\n }\n\n physicalRequirement test_req5 {\n id: 1.2.2\n text: the fifth test text.\n risk: medium\n verifymethod: analysis\n }\n\n designConstraint test_req6 {\n id: 1.2.3\n text: the sixth test text.\n risk: medium\n verifymethod: analysis\n }\n\n element test_entity {\n type: simulation\n }\n\n element test_entity2 {\n type: word doc\n docRef: reqs/test_entity\n }\n\n element test_entity3 {\n type: "test suite"\n docRef: github.com/all_the_tests\n }\n\n\n test_entity - satisfies -> test_req2\n test_req - traces -> test_req2\n test_req - contains -> test_req3\n test_req3 - contains -> test_req4\n test_req4 - derives -> test_req5\n test_req5 - refines -> test_req6\n test_entity3 - verifies -> test_req5\n test_req <- copies - test_entity2'}),"\n",(0,a.jsx)(n.h2,{id:"gitgraph-git-diagram",children:"Gitgraph (Git) Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%\n gitGraph\n commit\n branch hotfix\n checkout hotfix\n commit\n branch develop\n checkout develop\n commit id:\"ash\" tag:\"abc\"\n branch featureB\n checkout featureB\n commit type:HIGHLIGHT\n checkout main\n checkout hotfix\n commit type:NORMAL\n checkout develop\n commit type:REVERSE\n checkout featureB\n commit\n checkout main\n merge hotfix\n checkout featureB\n commit\n checkout develop\n branch featureA\n commit\n checkout develop\n merge hotfix\n checkout featureA\n commit\n checkout featureB\n commit\n checkout develop\n merge featureA\n branch release\n checkout release\n commit\n checkout main\n commit\n checkout release\n merge main\n checkout develop\n merge release"}),"\n",(0,a.jsx)(n.h2,{id:"mermaid-in-tabs",children:"Mermaid in tabs"}),"\n","\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsxs)(o.Z,{value:"tab-a",children:[(0,a.jsx)(n.p,{children:"The following mermaid diagram is shown:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n a ---\x3e c(10)\n b ---\x3e c(10)"})]}),(0,a.jsxs)(o.Z,{value:"tab-b",children:[(0,a.jsx)(n.p,{children:"This mermaid diagram is not displayed:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n d ---\x3e z(42)\n e ---\x3e z(42)"})]})]}),"\n",(0,a.jsx)(n.h2,{id:"mindmap",children:"Mindmap"}),"\n",(0,a.jsx)(n.mermaid,{value:"mindmap\n root((conda-forge))\n (Repos)\n (Package building)\n [*-feedstock]\n [staged-recipes]\n [cdt-builds]\n [msys2-recipes]\n (Maintenance)\n [admin-requests]\n [repodata-patches]\n (Configuration)\n [.github]\n [.cirun]\n [conda-forge-pinning]\n [conda-forge-ci-setup]\n [docker-images]\n [conda-smithy]\n (Automations)\n [admin-migrations]\n [artifact-validation]\n [regro/cf-scripts]\n [conda-forge-webservices]\n [regro/cf-graph-countyfair]\n [regro/libcfgraph + regro/libcflib]\n [feedstock-outputs]\n (Communications)\n [conda-forge.github.io]\n [blog]\n [status]\n [by-the-numbers]\n [conda-forge-status-monitor]\n [feedstocks]\n (Bots & apps)\n [conda-forge-admin]\n [conda-forge-bot]\n [conda-forge-coordinator]\n [conda-forge-daemon]\n [conda-forge-linter]\n [conda-forge-manager]\n [conda-forge-status]\n [regro-cf-autotick-bot]\n [conda-forge-curator]\n [conda-forge-webservices]\n (Delivery)\n [anaconda.org]\n [ghcr.io]\n [quay.io]\n (Installers)\n Miniforge\n Mambaforge\n (CI for builds)\n Azure Pipelines\n Travis CI\n cirun.io\n (Infra)\n Heroku\n Github Actions\n Circle CI"}),"\n",(0,a.jsx)(n.h2,{id:"quadrant-chart",children:"Quadrant Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>o});var a=t(27378);const r={},i=a.createContext(r);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/060daea9.f31224ce.js b/assets/js/060daea9.45a363bf.js similarity index 55% rename from assets/js/060daea9.f31224ce.js rename to assets/js/060daea9.45a363bf.js index 124fa8a9bbab..e294eb06e903 100644 --- a/assets/js/060daea9.f31224ce.js +++ b/assets/js/060daea9.45a363bf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52991],{75490:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},50510:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},47835:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"},nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},c={image:t(75490).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(50510).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52991],{75490:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},50510:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},47835:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"},nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},c={image:t(75490).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(50510).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06c6ffc3.d04b6917.js b/assets/js/06c6ffc3.d04b6917.js new file mode 100644 index 000000000000..e042af328d64 --- /dev/null +++ b/assets/js/06c6ffc3.d04b6917.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11007],{61132:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=(s(27378),s(40624));const o={tabItem:"tabItem_pnkT"};function r({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>N});var t=s(24246),i=s(27378),o=s(40624),r=s(75527),l=s(3620),a=s(44479),c=s(62821),d=s(52196),h=s(53589);function u(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function g(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function y(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function m({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,l.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,c._X)(t),r=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){u(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[o,r]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,o=y(e),[r,l]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,d]=j({queryString:s,groupId:t}),[u,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:u;return m({value:e,tabValues:o})?e:null})();(0,a.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var f=s(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function v(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){w(e,n,s[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function S({className:e,block:n,selectedValue:s,selectValue:i,tabValues:l}){const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),o=l[t].value;o!==s&&(c(n),i(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=a.indexOf(e.currentTarget)+1;var s;n=null!==(s=a[t])&&void 0!==s?s:a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;var t;n=null!==(t=a[s])&&void 0!==t?t:a[a.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>a.push(e),onKeyDown:h,onClick:d},i),{className:(0,o.Z)("tabs__item",b.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function H(e){const n=x(e);return(0,t.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,t.jsx)(S,v({},n,e)),(0,t.jsx)(D,v({},n,e))]})}function N(e){const n=(0,f.Z)();return(0,t.jsx)(H,k(v({},e),{children:g(e.children)}),String(n))}},53351:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var t=s(24246),i=s(71670),o=s(97555),r=s(61132);const l={description:"Deploy your Docusaurus app for production on a range of static site hosting services."},a="Deployment",c={id:"deployment",title:"Deployment",description:"Deploy your Docusaurus app for production on a range of static site hosting services.",source:"@site/docs/deployment.mdx",sourceDirName:".",slug:"/deployment",permalink:"/docs/deployment",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{description:"Deploy your Docusaurus app for production on a range of static site hosting services."},sidebar:"docs",previous:{title:"Using Plugins",permalink:"/docs/using-plugins"},next:{title:"i18n - Introduction",permalink:"/docs/i18n/introduction"}},d={},h=[{value:"Configuration",id:"configuration",level:2},{value:"Testing your Build Locally",id:"testing-build-locally",level:2},{value:"Trailing slash configuration",id:"trailing-slashes",level:2},{value:"Using environment variables",id:"using-environment-variables",level:2},{value:"Choosing a hosting provider",id:"choosing-a-hosting-provider",level:2},{value:"Self-Hosting",id:"self-hosting",level:2},{value:"Deploying to Netlify",id:"deploying-to-netlify",level:2},{value:"Deploying to Vercel",id:"deploying-to-vercel",level:2},{value:"Deploying to GitHub Pages",id:"deploying-to-github-pages",level:2},{value:"Overview",id:"github-pages-overview",level:3},{value:"<code>docusaurus.config.js</code> settings",id:"docusaurusconfigjs-settings",level:3},{value:"Environment settings",id:"environment-settings",level:3},{value:"Deploy",id:"deploy",level:3},{value:"Triggering deployment with GitHub Actions",id:"triggering-deployment-with-github-actions",level:3},{value:"Triggering deployment with Travis CI",id:"triggering-deployment-with-travis-ci",level:3},{value:"Triggering deployment with Buddy",id:"triggering-deployment-with-buddy",level:3},{value:"Using Azure Pipelines",id:"using-azure-pipelines",level:3},{value:"Using Drone",id:"using-drone",level:3},{value:"Deploying to Flightcontrol",id:"deploying-to-flightcontrol",level:2},{value:"Deploying to Koyeb",id:"deploying-to-koyeb",level:2},{value:"Deploying to Render",id:"deploying-to-render",level:2},{value:"Deploying to Qovery",id:"deploying-to-qovery",level:2},{value:"Deploying to Hostman",id:"deploying-to-hostman",level:2},{value:"Deploying to Surge",id:"deploying-to-surge",level:2},{value:"Using your domain",id:"using-your-domain",level:3},{value:"Setting up CNAME file",id:"setting-up-cname-file",level:3},{value:"Deploying to Stormkit",id:"deploying-to-stormkit",level:2},{value:"Deploying to QuantCDN",id:"deploying-to-quantcdn",level:2},{value:"Deploying to Layer0",id:"deploying-to-layer0",level:2},{value:"Deploying to Cloudflare Pages",id:"deploying-to-cloudflare-pages",level:2},{value:"Deploying to Azure Static Web Apps",id:"deploying-to-azure-static-web-apps",level:2},{value:"Deploying to Kinsta",id:"deploying-to-kinsta",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deployment",children:"Deployment"})}),"\n",(0,t.jsx)(n.p,{children:"To build the static files of your website for production, run:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Once it finishes, the static files will be generated within the ",(0,t.jsx)(n.code,{children:"build"})," directory."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The only responsibility of Docusaurus is to build your site and emit static files in ",(0,t.jsx)(n.code,{children:"build"}),"."]}),(0,t.jsx)(n.p,{children:"It is now up to you to choose how to host those static files."})]}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your site to static site hosting services such as ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"}),", ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"Render"}),", and ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"Surge"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"A Docusaurus site is statically rendered, and it can generally work without JavaScript!"}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["The following parameters are required in ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," to optimize routing and serve files from the correct location:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"url"})}),(0,t.jsxs)(n.td,{children:["URL for your site. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"url"})," is ",(0,t.jsx)(n.code,{children:"https://my-org.com/"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"baseUrl"})}),(0,t.jsxs)(n.td,{children:["Base URL for your project, with a trailing slash. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"baseUrl"})," is ",(0,t.jsx)(n.code,{children:"/my-project/"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"testing-build-locally",children:"Testing your Build Locally"}),"\n",(0,t.jsxs)(n.p,{children:["It is important to test your build locally before deploying it for production. Docusaurus provides a ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})})," command for that:"]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["By default, this will load your site at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:(0,t.jsx)(n.code,{children:"http://localhost:3000/"})}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"trailing-slashes",children:"Trailing slash configuration"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus has a ",(0,t.jsxs)(n.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:[(0,t.jsx)(n.code,{children:"trailingSlash"})," config"]})," to allow customizing URLs/links and emitted filename patterns."]}),"\n",(0,t.jsxs)(n.p,{children:["The default value generally works fine. Unfortunately, each static hosting provider has a ",(0,t.jsx)(n.strong,{children:"different behavior"}),", and deploying the exact same site to various hosts can lead to distinct results. Depending on your host, it can be useful to change this config."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," to understand better the behavior of your host and configure ",(0,t.jsx)(n.code,{children:"trailingSlash"})," appropriately."]})}),"\n",(0,t.jsx)(n.h2,{id:"using-environment-variables",children:"Using environment variables"}),"\n",(0,t.jsxs)(n.p,{children:["Putting potentially sensitive information in the environment is common practice. However, in a typical Docusaurus website, the ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," file is the only interface to the Node.js environment (see ",(0,t.jsx)(n.a,{href:"/docs/advanced/architecture",children:"our architecture overview"}),"), while everything else (MDX pages, React components, etc.) are client side and do not have direct access to the ",(0,t.jsx)(n.code,{children:"process"})," global variable. In this case, you can consider using ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config#customFields",children:(0,t.jsx)(n.code,{children:"customFields"})})," to pass environment variables to the client side."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// If you are using dotenv (https://www.npmjs.com/package/dotenv)\nimport 'dotenv/config';\n\nexport default {\n title: '...',\n url: process.env.URL, // You can use environment variables to control site specifics as well\n // highlight-start\n customFields: {\n // Put your custom environment here\n teamEmail: process.env.EMAIL,\n },\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="home.jsx"',children:"import useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nexport default function Home() {\n const {\n siteConfig: {customFields},\n } = useDocusaurusContext();\n return <div>Contact us through {customFields.teamEmail}!</div>;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"choosing-a-hosting-provider",children:"Choosing a hosting provider"}),"\n",(0,t.jsx)(n.p,{children:"There are a few common hosting options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#self-hosting",children:"Self hosting"})," with an HTTP server like Apache2 or Nginx."]}),"\n",(0,t.jsxs)(n.li,{children:["Jamstack providers (e.g. ",(0,t.jsx)(n.a,{href:"#deploying-to-netlify",children:"Netlify"})," and ",(0,t.jsx)(n.a,{href:"#deploying-to-vercel",children:"Vercel"}),"). We will use them as references, but the same reasoning can apply to other providers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"GitHub Pages"})," (by definition, it is also Jamstack, but we compare it separately)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If you are unsure of which one to choose, ask the following questions:"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(n.p,{children:"How many resources (money, person-hours, etc.) am I willing to invest in this?"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 Self-hosting requires experience in networking as well as Linux and web server administration. It's the most difficult option, and would require the most time to manage successfully. Expense-wise, cloud services are almost never free, and purchasing/deploying an onsite server can be even more costly."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Jamstack providers can help you set up a working website in almost no time and offer features like server-side redirects that are easily configurable. Many providers offer generous build-time quotas even for free plans that you would almost never exceed. However, free plans have limits, and you would need to pay once you hit those limits. Check the pricing page of your provider for details."}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udfe1 The GitHub Pages deployment workflow can be tedious to set up. (Evidence: see the length of ",(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"!) However, this service (including build and deployment) is always free for public repositories, and we have detailed instructions to help you make it work."]}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"How much server-side customization do I need?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 With self-hosting, you have access to the entire server's configuration. You can configure the virtual host to serve different content based on the request URL, you can do complicated server-side redirects, you can implement authentication, and so on. If you need a lot of server-side features, self-host your website."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Jamstack usually offers some server-side configuration (e.g. URL formatting (trailing slashes), server-side redirects, etc.)."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 GitHub Pages doesn't expose server-side configuration besides enforcing HTTPS and setting CNAME records."}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Do I need collaboration-friendly deployment workflows?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Self-hosted services can leverage continuous deployment functionality like Netlify, but more heavy-lifting is involved. Usually, you would designate a specific person to manage the deployment, and the workflow wouldn't be very git-based as opposed to the other two options."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Netlify and Vercel have deploy previews for every pull request, which is useful for a team to review work before merging to production. You can also manage a team with different member access to the deployment."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 GitHub Pages cannot do deploy previews in a non-convoluted way. One repo can only be associated with one site deployment. On the other hand, you can control who has write access to the site's deployment."}),"\n"]})]}),"\n",(0,t.jsx)(n.p,{children:"There isn't a silver bullet. You need to weigh your needs and resources before making a choice."}),"\n",(0,t.jsx)(n.h2,{id:"self-hosting",children:"Self-Hosting"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus can be self-hosted using ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})}),". Change port using ",(0,t.jsx)(n.code,{children:"--port"})," and ",(0,t.jsx)(n.code,{children:"--host"})," to change host."]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve -- --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve --build --port 80 --host 0.0.0.0\n"})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"It is not the best option, compared to a static hosting provider / CDN."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"In the following sections, we will introduce a few common hosting providers and how they should be configured to deploy Docusaurus sites most efficiently. Docusaurus is not affiliated with any of these services, and this information is provided for convenience only. Some of the write-ups are provided by third-parties, and recent API changes may not be reflected on our side. If you see outdated content, PRs are welcome."}),(0,t.jsx)(n.p,{children:"Because we can only provide this content on a best-effort basis only, we have stopped accepting PRs adding new hosting options. You can, however, publish your writeup on a separate site (e.g. your blog, or the provider's official website), and ask us to include a link to your writeup."})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-netlify",children:"Deploying to Netlify"}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus sites to ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", first make sure the following options are properly configured:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-start\n url: 'https://docusaurus-2.netlify.app', // Url to your site with no trailing slash\n baseUrl: '/', // Base directory of your site relative to your repo\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then, ",(0,t.jsx)(n.a,{href:"https://app.netlify.com/start",children:"create your site with Netlify"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"While you set up the site, specify the build commands and directories as follows:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["build command: ",(0,t.jsx)(n.code,{children:"npm run build"})]}),"\n",(0,t.jsxs)(n.li,{children:["publish directory: ",(0,t.jsx)(n.code,{children:"build"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:'If you did not configure these build options, you may still go to "Site settings" -> "Build & deploy" after your site is created.'}),"\n",(0,t.jsxs)(n.p,{children:["Once properly configured with the above options, your site should deploy and automatically redeploy upon merging to your deploy branch, which defaults to ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Some Docusaurus sites put the ",(0,t.jsx)(n.code,{children:"docs"})," folder outside of ",(0,t.jsx)(n.code,{children:"website"})," (most likely former Docusaurus v1 sites):"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"repo # git root\n\u251c\u2500\u2500 docs # MD files\n\u2514\u2500\u2500 website # Docusaurus root\n"})}),(0,t.jsxs)(n.p,{children:["If you decide to use the ",(0,t.jsx)(n.code,{children:"website"})," folder as Netlify's base directory, Netlify will not trigger builds when you update the ",(0,t.jsx)(n.code,{children:"docs"})," folder, and you need to configure a ",(0,t.jsxs)(n.a,{href:"https://docs.netlify.com/configure-builds/common-configurations/ignore-builds/",children:["custom ",(0,t.jsx)(n.code,{children:"ignore"})," command"]}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-toml",metastring:'title="website/netlify.toml"',children:'[build]\n ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../docs/"\n'})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"By default, Netlify adds trailing slashes to Docusaurus URLs."}),(0,t.jsxs)(n.p,{children:["It is recommended to disable the Netlify setting ",(0,t.jsx)(n.code,{children:"Post Processing > Asset Optimization > Pretty Urls"})," to prevent lowercase URLs, unnecessary redirects, and 404 errors."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Be very careful"}),": the ",(0,t.jsx)(n.code,{children:"Disable asset optimization"})," global checkbox is broken and does not really disable the ",(0,t.jsx)(n.code,{children:"Pretty URLs"})," setting in practice. Please make sure to ",(0,t.jsx)(n.strong,{children:"uncheck it independently"}),"."]}),(0,t.jsxs)(n.p,{children:["If you want to keep the ",(0,t.jsx)(n.code,{children:"Pretty Urls"})," Netlify setting on, adjust the ",(0,t.jsx)(n.code,{children:"trailingSlash"})," Docusaurus config appropriately."]}),(0,t.jsxs)(n.p,{children:["Refer to ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," for more information."]})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-vercel",children:"Deploying to Vercel"}),"\n",(0,t.jsxs)(n.p,{children:["Deploying your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"})," will provide you with ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"various benefits"})," in the areas of performance and ease of use."]}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus project with a ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/concepts/git",children:"Vercel for Git Integration"}),", make sure it has been pushed to a Git repository."]}),"\n",(0,t.jsxs)(n.p,{children:["Import the project into Vercel using the ",(0,t.jsx)(n.a,{href:"https://vercel.com/import/git",children:"Import Flow"}),". During the import, you will find all relevant options preconfigured for you; however, you can choose to change any of these ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/build-step#build-&-development-settings",children:"options"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["After your project has been imported, all subsequent pushes to branches will generate ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#preview",children:"Preview Deployments"}),", and all changes made to the ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/git-integrations#production-branch",children:"Production Branch"}),' (usually "main" or "master") will result in a ',(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#production",children:"Production Deployment"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus provides an easy way to publish to ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", which comes free with every GitHub repository."]}),"\n",(0,t.jsx)(n.h3,{id:"github-pages-overview",children:"Overview"}),"\n",(0,t.jsxs)(n.p,{children:["Usually, there are two repositories (at least two branches) involved in a publishing process: the branch containing the source files, and the branch containing the build output to be served with GitHub Pages. In the following tutorial, they will be referred to as ",(0,t.jsx)(n.strong,{children:'"source"'})," and ",(0,t.jsx)(n.strong,{children:'"deployment"'}),", respectively."]}),"\n",(0,t.jsxs)(n.p,{children:["Each GitHub repository is associated with a GitHub Pages service. If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-project"})," (where ",(0,t.jsx)(n.code,{children:"my-org"})," is the organization name or username), the deployed site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/my-project/"}),". If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-org.github.io"})," (the ",(0,t.jsx)(n.em,{children:"organization GitHub Pages repo"}),"), the site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["In case you want to use your custom domain for GitHub Pages, create a ",(0,t.jsx)(n.code,{children:"CNAME"})," file in the ",(0,t.jsx)(n.code,{children:"static"})," directory. Anything within the ",(0,t.jsx)(n.code,{children:"static"})," directory will be copied to the root of the ",(0,t.jsx)(n.code,{children:"build"})," directory for deployment. When using a custom domain, you should be able to move back from ",(0,t.jsx)(n.code,{children:"baseUrl: '/projectName/'"})," to ",(0,t.jsx)(n.code,{children:"baseUrl: '/'"}),", and also set your ",(0,t.jsx)(n.code,{children:"url"})," to your custom domain."]}),(0,t.jsxs)(n.p,{children:["You may refer to GitHub Pages' documentation ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/articles/user-organization-and-project-pages",children:"User, Organization, and Project Pages"})," for more details."]})]}),"\n",(0,t.jsxs)(n.p,{children:["GitHub Pages picks up deploy-ready files (the output from ",(0,t.jsx)(n.code,{children:"docusaurus build"}),") from the default branch (",(0,t.jsx)(n.code,{children:"master"})," / ",(0,t.jsx)(n.code,{children:"main"}),", usually) or the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch, and either from the root or the ",(0,t.jsx)(n.code,{children:"/docs"})," folder. You can configure that through ",(0,t.jsx)(n.code,{children:"Settings > Pages"}),' in your repository. This branch will be called the "deployment branch".']}),"\n",(0,t.jsxs)(n.p,{children:["We provide a ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," command that helps you deploy your site from the source branch to the deployment branch in one command: clone, build, and commit."]}),"\n",(0,t.jsxs)(n.h3,{id:"docusaurusconfigjs-settings",children:[(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," settings"]}),"\n",(0,t.jsxs)(n.p,{children:["First, modify your ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," and add the following params:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"organizationName"})}),(0,t.jsx)(n.td,{children:"The GitHub user or organization that owns the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"projectName"})}),(0,t.jsx)(n.td,{children:"The name of the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"deploymentBranch"})}),(0,t.jsxs)(n.td,{children:["The name of the deployment branch. It defaults to ",(0,t.jsx)(n.code,{children:"'gh-pages'"})," for non-organization GitHub Pages repos (",(0,t.jsx)(n.code,{children:"projectName"})," not ending in ",(0,t.jsx)(n.code,{children:".github.io"}),"). Otherwise, it needs to be explicit as a config field or environment variable."]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["These fields also have their environment variable counterparts which have a higher priority: ",(0,t.jsx)(n.code,{children:"ORGANIZATION_NAME"}),", ",(0,t.jsx)(n.code,{children:"PROJECT_NAME"}),", and ",(0,t.jsx)(n.code,{children:"DEPLOYMENT_BRANCH"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["GitHub Pages adds a trailing slash to Docusaurus URLs by default. It is recommended to set a ",(0,t.jsx)(n.code,{children:"trailingSlash"})," config (",(0,t.jsx)(n.code,{children:"true"})," or ",(0,t.jsx)(n.code,{children:"false"}),", not ",(0,t.jsx)(n.code,{children:"undefined"}),")."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n url: 'https://endiliey.github.io', // Your website URL\n baseUrl: '/',\n // highlight-start\n projectName: 'endiliey.github.io',\n organizationName: 'endiliey',\n trailingSlash: false,\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["By default, GitHub Pages runs published files through ",(0,t.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"}),". Since Jekyll will discard any files that begin with ",(0,t.jsx)(n.code,{children:"_"}),", it is recommended that you disable Jekyll by adding an empty file named ",(0,t.jsx)(n.code,{children:".nojekyll"})," file to your ",(0,t.jsx)(n.code,{children:"static"})," directory."]})}),"\n",(0,t.jsx)(n.h3,{id:"environment-settings",children:"Environment settings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"USE_SSH"})}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"true"})," to use SSH instead of the default HTTPS for the connection to the GitHub repo. If the source repo URL is an SSH URL (e.g. ",(0,t.jsx)(n.code,{children:"git@github.com:facebook/docusaurus.git"}),"), ",(0,t.jsx)(n.code,{children:"USE_SSH"})," is inferred to be ",(0,t.jsx)(n.code,{children:"true"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER"})}),(0,t.jsxs)(n.td,{children:["The username for a GitHub account that ",(0,t.jsx)(n.strong,{children:"has push access to the deployment repo"}),". For your own repositories, this will usually be your GitHub username. Required if not using SSH, and ignored otherwise."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_PASS"})}),(0,t.jsxs)(n.td,{children:["Personal access token of the git user (specified by ",(0,t.jsx)(n.code,{children:"GIT_USER"}),"), to facilitate non-interactive deployment (e.g. continuous deployment)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CURRENT_BRANCH"})}),(0,t.jsxs)(n.td,{children:["The source branch. Usually, the branch will be ",(0,t.jsx)(n.code,{children:"main"})," or ",(0,t.jsx)(n.code,{children:"master"}),", but it could be any branch except for ",(0,t.jsx)(n.code,{children:"gh-pages"}),". If nothing is set for this variable, then the current branch from which ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," is invoked will be used."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_NAME"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.name"})," value to use when pushing to the deployment repo"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_EMAIL"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.email"})," value to use when pushing to the deployment repo"]})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"GitHub enterprise installations should work in the same manner as github.com; you only need to set the organization's GitHub Enterprise host as an environment variable:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_HOST"})}),(0,t.jsx)(n.td,{children:"The domain name of your GitHub enterprise site."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_PORT"})}),(0,t.jsx)(n.td,{children:"The port of your GitHub enterprise site."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"deploy",children:"Deploy"}),"\n",(0,t.jsx)(n.p,{children:"Finally, to deploy your site to GitHub Pages, run:"}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsx)(r.Z,{value:"bash",label:"Bash",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"GIT_USER=<GITHUB_USERNAME> yarn deploy\n"})})}),(0,t.jsx)(r.Z,{value:"windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-batch",children:'cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n'})})}),(0,t.jsx)(r.Z,{value:"powershell",label:"PowerShell",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-powershell",children:"cmd /C 'set \"GIT_USER=<GITHUB_USERNAME>\" && yarn deploy'\n"})})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Beginning in August 2021, GitHub requires every command-line sign-in to use the ",(0,t.jsx)(n.strong,{children:"personal access token"})," instead of the password. When GitHub prompts for your password, enter the PAT instead. See the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",children:"GitHub documentation"})," for more information."]}),(0,t.jsxs)(n.p,{children:["Alternatively, you can use SSH (",(0,t.jsx)(n.code,{children:"USE_SSH=true"}),") to log in."]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-github-actions",children:"Triggering deployment with GitHub Actions"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions",children:"GitHub Actions"})," allow you to automate, customize, and execute your software development workflows right in your repository."]}),"\n",(0,t.jsxs)(n.p,{children:["The workflow examples below assume your website source resides in the ",(0,t.jsx)(n.code,{children:"main"})," branch of your repository (the ",(0,t.jsx)(n.em,{children:"source branch"})," is ",(0,t.jsx)(n.code,{children:"main"}),"), and your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is configured for ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow",children:"publishing with a custom GitHub Actions Workflow"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Our goal is that:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["When a new pull request is made to ",(0,t.jsx)(n.code,{children:"main"}),", there's an action that ensures the site builds successfully, without actually deploying. This job will be called ",(0,t.jsx)(n.code,{children:"test-deploy"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["When a pull request is merged to the ",(0,t.jsx)(n.code,{children:"main"})," branch or someone pushes to the ",(0,t.jsx)(n.code,{children:"main"})," branch directly, it will be built and deployed to GitHub Pages. This job will be called ",(0,t.jsx)(n.code,{children:"deploy"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Here are two approaches to deploying your docs with GitHub Actions. Based on the location of your deployment repository, choose the relevant tab below:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Source repo and deployment repo are the ",(0,t.jsx)(n.strong,{children:"same"})," repository."]}),"\n",(0,t.jsxs)(n.li,{children:["The deployment repo is a ",(0,t.jsx)(n.strong,{children:"remote"})," repository, different from the source. Instructions for this scenario assume ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch."]}),"\n"]}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsxs)(r.Z,{value:"same",label:"Same",children:[(0,t.jsxs)(n.p,{children:["While you can have both jobs defined in the same workflow file, the original ",(0,t.jsx)(n.code,{children:"deploy"})," workflow will always be listed as skipped in the PR check suite status, which is not indicative of the actual status and provides no value to the review process. We therefore propose to manage them as separate workflows instead."]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action files"}),(0,t.jsx)(n.p,{children:"Add these two workflow files:"}),(0,t.jsxs)(n.admonition,{title:"Tweak the parameters for your setup",type:"warning",children:[(0,t.jsxs)(n.p,{children:["These files assume you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]}),(0,t.jsxs)(n.p,{children:["If your Docusaurus project is not at the root of your repo, you may need to configure a ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-set-the-default-shell-and-working-directory",children:"default working directory"}),", and adjust the paths accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n push:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n build:\n name: Build Docusaurus\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Build website\n run: yarn build\n\n - name: Upload Build Artifact\n uses: actions/upload-pages-artifact@v3\n with:\n path: build\n\n deploy:\n name: Deploy to GitHub Pages\n needs: build\n\n # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n permissions:\n pages: write # to deploy to Pages\n id-token: write # to verify the deployment originates from an appropriate source\n\n # Deploy to the github-pages environment\n environment:\n name: github-pages\n url: ${{ steps.deployment.outputs.page_url }}\n\n runs-on: ubuntu-latest\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/test-deploy.yml"',children:"name: Test deployment\n\non:\n pull_request:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n test-deploy:\n name: Test deployment\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n"})})]})]}),(0,t.jsxs)(r.Z,{value:"remote",label:"Remote",children:[(0,t.jsx)(n.p,{children:"A cross-repo publish is more difficult to set up because you need to push to another repo with permission checks. We will be using SSH to do the authentication."}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH key"}),". Since this SSH key will be used in CI, make sure to not enter any passphrase."]}),"\n",(0,t.jsxs)(n.li,{children:["By default, your public key should have been created in ",(0,t.jsx)(n.code,{children:"~/.ssh/id_rsa.pub"}),"; otherwise, use the name you've provided in the previous step to add your key to ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/",children:"GitHub deploy keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy the key to clipboard with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa.pub"})," and paste it as a ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys",children:"deploy key"})," in the deployment repository. Copy the file content if the command line doesn't work for you. Check the box for ",(0,t.jsx)(n.code,{children:"Allow write access"})," before saving your deployment key."]}),"\n",(0,t.jsxs)(n.li,{children:["You'll need your private key as a ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets",children:"GitHub secret"})," to allow Docusaurus to run the deployment for you."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy your private key with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa"})," and paste a GitHub secret with the name ",(0,t.jsx)(n.code,{children:"GH_PAGES_DEPLOY"})," on your source repository. Copy the file content if the command line doesn't work for you. Save your secret."]}),"\n",(0,t.jsxs)(n.li,{children:["Create your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#creating-a-workflow-file",children:"documentation workflow file"})," in ",(0,t.jsx)(n.code,{children:".github/workflows/"}),". In this example, it's ",(0,t.jsx)(n.code,{children:"deploy.yml"}),"."]}),"\n"]}),(0,t.jsx)(n.p,{children:"At this point, you should have:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"the source repo with the GitHub workflow set with the private SSH key as the GitHub Secret, and"}),"\n",(0,t.jsx)(n.li,{children:"your deployment repo set with the public SSH key in GitHub Deploy Keys."}),"\n"]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action file"}),(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Please make sure that you replace ",(0,t.jsx)(n.code,{children:"actions@github.com"})," with your GitHub email and ",(0,t.jsx)(n.code,{children:"gh-actions"})," with your name."]}),(0,t.jsxs)(n.p,{children:["This file assumes you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n pull_request:\n branches: [main]\n push:\n branches: [main]\n\npermissions:\n contents: write\n\njobs:\n test-deploy:\n if: github.event_name != 'push'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n deploy:\n if: github.event_name != 'pull_request'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - uses: webfactory/ssh-agent@v0.5.0\n with:\n ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}\n - name: Deploy to GitHub Pages\n env:\n USE_SSH: true\n run: |\n git config --global user.email \"actions@github.com\"\n git config --global user.name \"gh-actions\"\n yarn install --frozen-lockfile\n yarn deploy\n"})})]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Site not deployed properly?"}),(0,t.jsx)(n.p,{children:"After pushing to main, if you don't see your site published at the desired location (for example, it says \"There isn't a GitHub Pages site here\", or it's showing your repo's README.md file), try the following:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Wait about three minutes and refresh. It may take a few minutes for GitHub pages to pick up the new files."}),"\n",(0,t.jsx)(n.li,{children:"Check your repo's landing page for a little green tick next to the last commit's title, indicating the CI has passed. If you see a cross, it means the build or deployment failed, and you should check the log for more debugging information."}),"\n",(0,t.jsxs)(n.li,{children:['Click on the tick and make sure you see a "Deploy to GitHub Pages" workflow. Names like "pages build and deployment / deploy" are GitHub\'s default workflows, indicating your custom deployment workflow failed to be triggered at all. Make sure the YAML files are placed under the ',(0,t.jsx)(n.code,{children:".github/workflows"}),' folder, and that the trigger condition is set correctly (e.g., if your default branch is "master" instead of "main", you need to change the ',(0,t.jsx)(n.code,{children:"on.push"})," property)."]}),"\n",(0,t.jsxs)(n.li,{children:['Under your repo\'s Settings > Pages, make sure the "Source" (which is the source for the ',(0,t.jsx)(n.em,{children:"deployment"}),' files, not "source" as in our terminology) is set to "gh-pages" + "/ (root)", since we are using ',(0,t.jsx)(n.code,{children:"gh-pages"})," as the deployment branch."]}),"\n"]}),(0,t.jsx)(n.p,{children:"If you are using a custom domain:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Verify that you have the correct DNS records set up if you're using a custom domain. See ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages",children:"GitHub pages documentation on configuring custom domains"}),". Also, please be aware that it may take up to 24 hours for DNS changes to propagate through the internet."]}),"\n"]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-travis-ci",children:"Triggering deployment with Travis CI"}),"\n",(0,t.jsxs)(n.p,{children:["Continuous integration (CI) services are typically used to perform routine tasks whenever new commits are checked in to source control. These tasks can be any combination of running unit tests and integration tests, automating builds, publishing packages to npm, and deploying changes to your website. All you need to do to automate the deployment of your website is to invoke the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script whenever your website is updated. The following section covers how to do just that using ",(0,t.jsx)(n.a,{href:"https://travis-ci.com/",children:"Travis CI"}),", a popular continuous integration service provider."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsxs)(n.li,{children:["Using your GitHub account, ",(0,t.jsx)(n.a,{href:"https://github.com/marketplace/travis-ci",children:"add the Travis CI app"})," to the repository you want to activate."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Travis CI dashboard. The URL looks like ",(0,t.jsx)(n.code,{children:"https://travis-ci.com/USERNAME/REPO"}),", and navigate to the ",(0,t.jsx)(n.code,{children:"More options > Setting > Environment Variables"})," section of your repository."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username)."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".travis.yml"})," on the root of your repository with the following:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".travis.yml"',children:'language: node_js\nnode_js:\n - 18\nbranches:\n only:\n - main\ncache:\n yarn: true\nscript:\n - git config --global user.name "${GH_NAME}"\n - git config --global user.email "${GH_EMAIL}"\n - echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n - yarn install\n - GIT_USER="${GH_NAME}" yarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Now, whenever a new commit lands in ",(0,t.jsx)(n.code,{children:"main"}),", Travis CI will run your suite of tests and if everything passes, your website will be deployed via the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script."]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-buddy",children:"Triggering deployment with Buddy"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://buddy.works/",children:"Buddy"})," is an easy-to-use CI/CD tool that allows you to automate the deployment of your portal to different environments, including GitHub Pages."]}),"\n",(0,t.jsx)(n.p,{children:"Follow these steps to create a pipeline that automatically deploys a new version of your website whenever you push changes to the selected branch of your project:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsx)(n.li,{children:"Sign in to your Buddy account and create a new project."}),"\n",(0,t.jsx)(n.li,{children:"Choose GitHub as your git hosting provider and select the repository with the code of your website."}),"\n",(0,t.jsxs)(n.li,{children:["Using the left navigation panel, switch to the ",(0,t.jsx)(n.code,{children:"Pipelines"})," view."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new pipeline. Define its name, set the trigger mode to ",(0,t.jsx)(n.code,{children:"On push"}),", and select the branch that triggers the pipeline execution."]}),"\n",(0,t.jsxs)(n.li,{children:["Add a ",(0,t.jsx)(n.code,{children:"Node.js"})," action."]}),"\n",(0,t.jsx)(n.li,{children:"Add these commands in the action's terminal:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'GIT_USER=<GH_PERSONAL_ACCESS_TOKEN>\ngit config --global user.email "<YOUR_GH_EMAIL>"\ngit config --global user.name "<YOUR_GH_USERNAME>"\nyarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["After creating this simple pipeline, each new commit pushed to the branch you selected deploys your website to GitHub Pages using ",(0,t.jsx)(n.code,{children:"yarn deploy"}),". Read ",(0,t.jsx)(n.a,{href:"https://buddy.works/guides/react-docusaurus",children:"this guide"})," to learn more about setting up a CI/CD pipeline for Docusaurus."]}),"\n",(0,t.jsx)(n.h3,{id:"using-azure-pipelines",children:"Using Azure Pipelines"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Sign Up at ",(0,t.jsx)(n.a,{href:"https://azure.microsoft.com/en-us/services/devops/pipelines/",children:"Azure Pipelines"})," if you haven't already."]}),"\n",(0,t.jsx)(n.li,{children:"Create an organization. Within the organization, create a project and connect your repository from GitHub."}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"})," with the ",(0,t.jsx)(n.code,{children:"repo"})," scope."]}),"\n",(0,t.jsxs)(n.li,{children:["In the project page (which looks like ",(0,t.jsx)(n.code,{children:"https://dev.azure.com/ORG_NAME/REPO_NAME/_build"}),"), create a new pipeline with the following text. Also, click on edit and add a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username). Make sure to mark them as secret. Alternatively, you can also add a file named ",(0,t.jsx)(n.code,{children:"azure-pipelines.yml"})," at your repository root."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title="azure-pipelines.yml"',children:'trigger:\n - main\n\npool:\n vmImage: ubuntu-latest\n\nsteps:\n - checkout: self\n persistCredentials: true\n\n - task: NodeTool@0\n inputs:\n versionSpec: \'18\'\n displayName: Install Node.js\n\n - script: |\n git config --global user.name "${GH_NAME}"\n git config --global user.email "${GH_EMAIL}"\n git checkout -b main\n echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n yarn install\n GIT_USER="${GH_NAME}" yarn deploy\n env:\n GH_NAME: $(GH_NAME)\n GH_EMAIL: $(GH_EMAIL)\n GH_TOKEN: $(GH_TOKEN)\n displayName: Install and build\n'})}),"\n",(0,t.jsx)(n.h3,{id:"using-drone",children:"Using Drone"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new SSH key that will be the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/developers/overview/managing-deploy-keys#deploy-keys",children:"deploy key"})," for your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Name your private and public keys to be specific and so that it does not overwrite your other ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.code,{children:"https://github.com/USERNAME/REPO/settings/keys"})," and add a new deploy key by pasting in the public key you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Drone.io dashboard and log in. The URL looks like ",(0,t.jsx)(n.code,{children:"https://cloud.drone.io/USERNAME/REPO"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on the repository, click on activate repository, and add a secret called ",(0,t.jsx)(n.code,{children:"git_deploy_private_key"})," with your private key value that you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".drone.yml"})," on the root of your repository with the below text."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".drone.yml"',children:'kind: pipeline\ntype: docker\ntrigger:\n event:\n - tag\n- name: Website\n image: node\n commands:\n - mkdir -p $HOME/.ssh\n - ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts\n - echo "$GITHUB_PRIVATE_KEY" > "$HOME/.ssh/id_rsa"\n - chmod 0600 $HOME/.ssh/id_rsa\n - cd website\n - yarn install\n - yarn deploy\n environment:\n USE_SSH: true\n GITHUB_PRIVATE_KEY:\n from_secret: git_deploy_private_key\n'})}),"\n",(0,t.jsx)(n.p,{children:"Now, whenever you push a new tag to GitHub, this trigger will start the drone CI job to publish your website."}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-flightcontrol",children:"Deploying to Flightcontrol"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/?ref=docusaurus",children:"Flightcontrol"})," is a service that automatically builds and deploys your web apps to AWS Fargate directly from your Git repository. It gives you full access to inspect and make infrastructure changes without the limitations of a traditional PaaS."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started by following ",(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/docs/reference/examples/docusaurus/?ref=docusaurus",children:"Flightcontrol's step-by-step Docusaurus guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-koyeb",children:"Deploying to Koyeb"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.koyeb.com",children:"Koyeb"})," is a developer-friendly serverless platform to deploy apps globally. The platform lets you seamlessly run Docker containers, web apps, and APIs with git-based deployment, native autoscaling, a global edge network, and built-in service mesh and discovery. Check out the ",(0,t.jsx)(n.a,{href:"https://www.koyeb.com/tutorials/deploy-docusaurus-on-koyeb",children:"Koyeb's Docusaurus deployment guide"})," to get started."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-render",children:"Deploying to Render"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://render.com",children:"Render"})," offers ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"free static site hosting"})," with fully managed SSL, custom domains, a global CDN, and continuous auto-deploy from your Git repo. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-qovery",children:"Deploying to Qovery"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.qovery.com",children:"Qovery"})," is a fully-managed cloud platform that runs on your AWS, Digital Ocean, and Scaleway account where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a Qovery account. Visit the ",(0,t.jsx)(n.a,{href:"https://console.qovery.com",children:"Qovery dashboard"})," to create an account if you don't already have one."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a project.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create project"})," and give a name to your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create environment"})," and give a name (e.g. staging, production)."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Add an application.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create an application"}),", give a name and select your GitHub or GitLab repository where your Docusaurus app is located."]}),"\n",(0,t.jsx)(n.li,{children:"Define the main branch name and the root application path."}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create"}),". After the application is created:"]}),"\n",(0,t.jsxs)(n.li,{children:["Navigate to your application ",(0,t.jsx)(n.strong,{children:"Settings"})]}),"\n",(0,t.jsxs)(n.li,{children:["Select ",(0,t.jsx)(n.strong,{children:"Port"})]}),"\n",(0,t.jsx)(n.li,{children:"Add port used by your Docusaurus application"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["All you have to do now is to navigate to your application and click on ",(0,t.jsx)(n.strong,{children:"Deploy"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://hub.qovery.com/img/heroku/heroku-1.png",alt:"Deploy the app"})}),"\n",(0,t.jsxs)(n.p,{children:["That's it. Watch the status and wait till the app is deployed. To open the application in your browser, click on ",(0,t.jsx)(n.strong,{children:"Action"})," and ",(0,t.jsx)(n.strong,{children:"Open"})," in your application overview."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-hostman",children:"Deploying to Hostman"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://hostman.com/",children:"Hostman"})," allows you to host static websites for free. Hostman automates everything, you just need to connect your repository and follow these easy steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a service."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To deploy a Docusaurus static website, click ",(0,t.jsx)(n.strong,{children:"Create"})," in the top-left corner of your ",(0,t.jsx)(n.a,{href:"https://dashboard.hostman.com/",children:"Dashboard"})," and choose ",(0,t.jsx)(n.strong,{children:"Front-end app or static website"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Select the project to deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you are logged in to Hostman with your GitHub, GitLab, or Bitbucket account, you will see the repository with your projects, including the private ones."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose the project you want to deploy. It must contain the directory with the project's files (e.g. ",(0,t.jsx)(n.code,{children:"website"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To access a different repository, click ",(0,t.jsx)(n.strong,{children:"Connect another repository"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you didn't use your Git account credentials to log in, you'll be able to access the necessary account now, and then select the project."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure the build settings."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Next, the ",(0,t.jsx)(n.strong,{children:"Website customization"})," window will appear. Choose the ",(0,t.jsx)(n.strong,{children:"Static website"})," option from the list of frameworks."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Directory with app"})," points at the directory that will contain the project's files after the build. If you selected the repository with the contents of the website (or ",(0,t.jsx)(n.code,{children:"my_website"}),") directory during Step 2, you can leave it empty."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The standard build command for Docusaurus is:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["You can modify the build command if needed. You can enter multiple commands separated by ",(0,t.jsx)(n.code,{children:"&&"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Deploy"})," to start the build process."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Once it starts, you will enter the deployment log. If there are any issues with the code, you will get warning or error messages in the log specifying the cause of the problem. Usually, the log contains all the debugging data you'll need."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"When the deployment is complete, you will receive an email notification and also see a log entry. All done! Your project is up and ready."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-surge",children:"Deploying to Surge"}),"\n",(0,t.jsxs)(n.p,{children:["Surge is a ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"static web hosting platform"})," that you can use to deploy your Docusaurus project from the command line in seconds. Deploying your project to Surge is easy and free (including custom domains and SSL certs)."]}),"\n",(0,t.jsx)(n.p,{children:"Deploy your app in a matter of seconds using Surge with the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["First, install Surge using npm by running the following command:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install -g surge\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn global add surge\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add -g surge\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["To build the static files of your site for production in the root directory of your project, run:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Then, run this command inside the root directory of your project:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"First-time users of Surge would be prompted to create an account from the command line (which happens only once)."}),"\n",(0,t.jsxs)(n.p,{children:["Confirm that the site you want to publish is in the ",(0,t.jsx)(n.code,{children:"build"})," directory. A randomly generated subdomain ",(0,t.jsx)(n.code,{children:"*.surge.sh subdomain"})," is always given (which can be edited)."]}),"\n",(0,t.jsx)(n.h3,{id:"using-your-domain",children:"Using your domain"}),"\n",(0,t.jsx)(n.p,{children:"If you have a domain name you can deploy your site using the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/ your-domain.com\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Your site is now deployed for free at ",(0,t.jsx)(n.code,{children:"subdomain.surge.sh"})," or ",(0,t.jsx)(n.code,{children:"your-domain.com"})," depending on the method you chose."]}),"\n",(0,t.jsx)(n.h3,{id:"setting-up-cname-file",children:"Setting up CNAME file"}),"\n",(0,t.jsx)(n.p,{children:"Store your domain in a CNAME file for future deployments with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"echo subdomain.surge.sh > CNAME\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy any other changes in the future with the command ",(0,t.jsx)(n.code,{children:"surge"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-stormkit",children:"Deploying to Stormkit"}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io",children:"Stormkit"}),", a deployment platform for static websites, single-page applications (SPAs), and serverless functions. For detailed instructions, refer to this ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io/blog/how-to-deploy-docusarous",children:"guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-quantcdn",children:"Deploying to QuantCDN"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Install ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/get-started",children:"Quant CLI"})]}),"\n",(0,t.jsxs)(n.li,{children:["Create a QuantCDN account by ",(0,t.jsx)(n.a,{href:"https://dashboard.quantcdn.io/register",children:"signing up"})]}),"\n",(0,t.jsxs)(n.li,{children:["Initialize your project with ",(0,t.jsx)(n.code,{children:"quant init"})," and fill in your credentials:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant init\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy your site.","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant deploy\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/continuous-integration",children:"docs"})," and ",(0,t.jsx)(n.a,{href:"https://www.quantcdn.io/blog",children:"blog"})," for more examples and use cases for deploying to QuantCDN."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-layer0",children:"Deploying to Layer0"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.layer0.co",children:"Layer0"})," is an all-in-one platform to develop, deploy, preview, experiment on, monitor, and run your headless frontend. It is focused on large, dynamic websites and best-in-class performance through EdgeJS (a JavaScript-based Content Delivery Network), predictive prefetching, and performance monitoring. Layer0 offers a free tier. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://docs.layer0.co/guides/docusaurus",children:"Layer0's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-cloudflare-pages",children:"Deploying to Cloudflare Pages"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://pages.cloudflare.com/",children:"Cloudflare Pages"})," is a Jamstack platform for frontend developers to collaborate and deploy websites. Get started within a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/apidev234/deploying-docusaurus-to-cloudflare-pages-565g",children:"this article"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-azure-static-web-apps",children:"Deploying to Azure Static Web Apps"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/static-web-apps/overview",children:"Azure Static Web Apps"})," is a service that automatically builds and deploys full-stack web apps to Azure directly from the code repository, simplifying the developer experience for CI/CD. Static Web Apps separates the web application's static assets from its dynamic (API) endpoints. Static assets are served from globally-distributed content servers, making it faster for clients to retrieve files using servers nearby. Dynamic APIs are scaled with serverless architectures using an event-driven functions-based approach that is more cost-effective and scales on demand. Get started in a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/azure/11-share-content-with-docusaurus-azure-static-web-apps-30hc",children:"this step-by-step guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-kinsta",children:"Deploying to Kinsta"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://kinsta.com/static-site-hosting",children:"Kinsta Static Site Hosting"})," lets you deploy up to 100 static sites for free, custom domains with SSL, 100 GB monthly bandwidth, and 260+ Cloudflare CDN locations."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started in just a few clicks by following our ",(0,t.jsx)(n.a,{href:"https://kinsta.com/docs/docusaurus-example/",children:"Docusaurus on Kinsta"})," article."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>r});var t=s(27378);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06c6ffc3.ecda5066.js b/assets/js/06c6ffc3.ecda5066.js deleted file mode 100644 index a71deb5f0d94..000000000000 --- a/assets/js/06c6ffc3.ecda5066.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11007],{61132:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=(s(27378),s(40624));const o={tabItem:"tabItem_pnkT"};function r({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>N});var t=s(24246),i=s(27378),o=s(40624),r=s(75527),l=s(3620),a=s(44479),c=s(62821),d=s(52196),h=s(53589);function u(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function g(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function y(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function m({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,l.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,c._X)(t),r=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){u(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[o,r]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,o=y(e),[r,l]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,d]=j({queryString:s,groupId:t}),[u,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:u;return m({value:e,tabValues:o})?e:null})();(0,a.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var f=s(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function v(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){w(e,n,s[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function S({className:e,block:n,selectedValue:s,selectValue:i,tabValues:l}){const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),o=l[t].value;o!==s&&(c(n),i(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=a.indexOf(e.currentTarget)+1;var s;n=null!==(s=a[t])&&void 0!==s?s:a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;var t;n=null!==(t=a[s])&&void 0!==t?t:a[a.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>a.push(e),onKeyDown:h,onClick:d},i),{className:(0,o.Z)("tabs__item",b.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function H(e){const n=x(e);return(0,t.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,t.jsx)(S,v({},n,e)),(0,t.jsx)(D,v({},n,e))]})}function N(e){const n=(0,f.Z)();return(0,t.jsx)(H,k(v({},e),{children:g(e.children)}),String(n))}},53351:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var t=s(24246),i=s(71670),o=s(97555),r=s(61132);const l={description:"Deploy your Docusaurus app for production on a range of static site hosting services."},a="Deployment",c={id:"deployment",title:"Deployment",description:"Deploy your Docusaurus app for production on a range of static site hosting services.",source:"@site/docs/deployment.mdx",sourceDirName:".",slug:"/deployment",permalink:"/docs/deployment",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{description:"Deploy your Docusaurus app for production on a range of static site hosting services."},sidebar:"docs",previous:{title:"Using Plugins",permalink:"/docs/using-plugins"},next:{title:"i18n - Introduction",permalink:"/docs/i18n/introduction"}},d={},h=[{value:"Configuration",id:"configuration",level:2},{value:"Testing your Build Locally",id:"testing-build-locally",level:2},{value:"Trailing slash configuration",id:"trailing-slashes",level:2},{value:"Using environment variables",id:"using-environment-variables",level:2},{value:"Choosing a hosting provider",id:"choosing-a-hosting-provider",level:2},{value:"Self-Hosting",id:"self-hosting",level:2},{value:"Deploying to Netlify",id:"deploying-to-netlify",level:2},{value:"Deploying to Vercel",id:"deploying-to-vercel",level:2},{value:"Deploying to GitHub Pages",id:"deploying-to-github-pages",level:2},{value:"Overview",id:"github-pages-overview",level:3},{value:"<code>docusaurus.config.js</code> settings",id:"docusaurusconfigjs-settings",level:3},{value:"Environment settings",id:"environment-settings",level:3},{value:"Deploy",id:"deploy",level:3},{value:"Triggering deployment with GitHub Actions",id:"triggering-deployment-with-github-actions",level:3},{value:"Triggering deployment with Travis CI",id:"triggering-deployment-with-travis-ci",level:3},{value:"Triggering deployment with Buddy",id:"triggering-deployment-with-buddy",level:3},{value:"Using Azure Pipelines",id:"using-azure-pipelines",level:3},{value:"Using Drone",id:"using-drone",level:3},{value:"Deploying to Flightcontrol",id:"deploying-to-flightcontrol",level:2},{value:"Deploying to Koyeb",id:"deploying-to-koyeb",level:2},{value:"Deploying to Render",id:"deploying-to-render",level:2},{value:"Deploying to Qovery",id:"deploying-to-qovery",level:2},{value:"Deploying to Hostman",id:"deploying-to-hostman",level:2},{value:"Deploying to Surge",id:"deploying-to-surge",level:2},{value:"Using your domain",id:"using-your-domain",level:3},{value:"Setting up CNAME file",id:"setting-up-cname-file",level:3},{value:"Deploying to Stormkit",id:"deploying-to-stormkit",level:2},{value:"Deploying to QuantCDN",id:"deploying-to-quantcdn",level:2},{value:"Deploying to Layer0",id:"deploying-to-layer0",level:2},{value:"Deploying to Cloudflare Pages",id:"deploying-to-cloudflare-pages",level:2},{value:"Deploying to Azure Static Web Apps",id:"deploying-to-azure-static-web-apps",level:2},{value:"Deploying to Kinsta",id:"deploying-to-kinsta",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deployment",children:"Deployment"})}),"\n",(0,t.jsx)(n.p,{children:"To build the static files of your website for production, run:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Once it finishes, the static files will be generated within the ",(0,t.jsx)(n.code,{children:"build"})," directory."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The only responsibility of Docusaurus is to build your site and emit static files in ",(0,t.jsx)(n.code,{children:"build"}),"."]}),(0,t.jsx)(n.p,{children:"It is now up to you to choose how to host those static files."})]}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your site to static site hosting services such as ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"}),", ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"Render"}),", and ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"Surge"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"A Docusaurus site is statically rendered, and it can generally work without JavaScript!"}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["The following parameters are required in ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," to optimize routing and serve files from the correct location:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"url"})}),(0,t.jsxs)(n.td,{children:["URL for your site. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"url"})," is ",(0,t.jsx)(n.code,{children:"https://my-org.com/"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"baseUrl"})}),(0,t.jsxs)(n.td,{children:["Base URL for your project, with a trailing slash. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"baseUrl"})," is ",(0,t.jsx)(n.code,{children:"/my-project/"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"testing-build-locally",children:"Testing your Build Locally"}),"\n",(0,t.jsxs)(n.p,{children:["It is important to test your build locally before deploying it for production. Docusaurus provides a ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})})," command for that:"]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["By default, this will load your site at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:(0,t.jsx)(n.code,{children:"http://localhost:3000/"})}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"trailing-slashes",children:"Trailing slash configuration"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus has a ",(0,t.jsxs)(n.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:[(0,t.jsx)(n.code,{children:"trailingSlash"})," config"]})," to allow customizing URLs/links and emitted filename patterns."]}),"\n",(0,t.jsxs)(n.p,{children:["The default value generally works fine. Unfortunately, each static hosting provider has a ",(0,t.jsx)(n.strong,{children:"different behavior"}),", and deploying the exact same site to various hosts can lead to distinct results. Depending on your host, it can be useful to change this config."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," to understand better the behavior of your host and configure ",(0,t.jsx)(n.code,{children:"trailingSlash"})," appropriately."]})}),"\n",(0,t.jsx)(n.h2,{id:"using-environment-variables",children:"Using environment variables"}),"\n",(0,t.jsxs)(n.p,{children:["Putting potentially sensitive information in the environment is common practice. However, in a typical Docusaurus website, the ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," file is the only interface to the Node.js environment (see ",(0,t.jsx)(n.a,{href:"/docs/advanced/architecture",children:"our architecture overview"}),"), while everything else (MDX pages, React components, etc.) are client side and do not have direct access to the ",(0,t.jsx)(n.code,{children:"process"})," global variable. In this case, you can consider using ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config#customFields",children:(0,t.jsx)(n.code,{children:"customFields"})})," to pass environment variables to the client side."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// If you are using dotenv (https://www.npmjs.com/package/dotenv)\nimport 'dotenv/config';\n\nexport default {\n title: '...',\n url: process.env.URL, // You can use environment variables to control site specifics as well\n // highlight-start\n customFields: {\n // Put your custom environment here\n teamEmail: process.env.EMAIL,\n },\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="home.jsx"',children:"import useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nexport default function Home() {\n const {\n siteConfig: {customFields},\n } = useDocusaurusContext();\n return <div>Contact us through {customFields.teamEmail}!</div>;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"choosing-a-hosting-provider",children:"Choosing a hosting provider"}),"\n",(0,t.jsx)(n.p,{children:"There are a few common hosting options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#self-hosting",children:"Self hosting"})," with an HTTP server like Apache2 or Nginx."]}),"\n",(0,t.jsxs)(n.li,{children:["Jamstack providers (e.g. ",(0,t.jsx)(n.a,{href:"#deploying-to-netlify",children:"Netlify"})," and ",(0,t.jsx)(n.a,{href:"#deploying-to-vercel",children:"Vercel"}),"). We will use them as references, but the same reasoning can apply to other providers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"GitHub Pages"})," (by definition, it is also Jamstack, but we compare it separately)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If you are unsure of which one to choose, ask the following questions:"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(n.p,{children:"How many resources (money, person-hours, etc.) am I willing to invest in this?"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 Self-hosting requires experience in networking as well as Linux and web server administration. It's the most difficult option, and would require the most time to manage successfully. Expense-wise, cloud services are almost never free, and purchasing/deploying an onsite server can be even more costly."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Jamstack providers can help you set up a working website in almost no time and offer features like server-side redirects that are easily configurable. Many providers offer generous build-time quotas even for free plans that you would almost never exceed. However, free plans have limits, and you would need to pay once you hit those limits. Check the pricing page of your provider for details."}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udfe1 The GitHub Pages deployment workflow can be tedious to set up. (Evidence: see the length of ",(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"!) However, this service (including build and deployment) is always free for public repositories, and we have detailed instructions to help you make it work."]}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"How much server-side customization do I need?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 With self-hosting, you have access to the entire server's configuration. You can configure the virtual host to serve different content based on the request URL, you can do complicated server-side redirects, you can implement authentication, and so on. If you need a lot of server-side features, self-host your website."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Jamstack usually offers some server-side configuration (e.g. URL formatting (trailing slashes), server-side redirects, etc.)."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 GitHub Pages doesn't expose server-side configuration besides enforcing HTTPS and setting CNAME records."}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Do I need collaboration-friendly deployment workflows?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Self-hosted services can leverage continuous deployment functionality like Netlify, but more heavy-lifting is involved. Usually, you would designate a specific person to manage the deployment, and the workflow wouldn't be very git-based as opposed to the other two options."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Netlify and Vercel have deploy previews for every pull request, which is useful for a team to review work before merging to production. You can also manage a team with different member access to the deployment."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 GitHub Pages cannot do deploy previews in a non-convoluted way. One repo can only be associated with one site deployment. On the other hand, you can control who has write access to the site's deployment."}),"\n"]})]}),"\n",(0,t.jsx)(n.p,{children:"There isn't a silver bullet. You need to weigh your needs and resources before making a choice."}),"\n",(0,t.jsx)(n.h2,{id:"self-hosting",children:"Self-Hosting"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus can be self-hosted using ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})}),". Change port using ",(0,t.jsx)(n.code,{children:"--port"})," and ",(0,t.jsx)(n.code,{children:"--host"})," to change host."]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve -- --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve --build --port 80 --host 0.0.0.0\n"})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"It is not the best option, compared to a static hosting provider / CDN."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"In the following sections, we will introduce a few common hosting providers and how they should be configured to deploy Docusaurus sites most efficiently. Docusaurus is not affiliated with any of these services, and this information is provided for convenience only. Some of the write-ups are provided by third-parties, and recent API changes may not be reflected on our side. If you see outdated content, PRs are welcome."}),(0,t.jsx)(n.p,{children:"Because we can only provide this content on a best-effort basis only, we have stopped accepting PRs adding new hosting options. You can, however, publish your writeup on a separate site (e.g. your blog, or the provider's official website), and ask us to include a link to your writeup."})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-netlify",children:"Deploying to Netlify"}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus sites to ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", first make sure the following options are properly configured:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-start\n url: 'https://docusaurus-2.netlify.app', // Url to your site with no trailing slash\n baseUrl: '/', // Base directory of your site relative to your repo\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then, ",(0,t.jsx)(n.a,{href:"https://app.netlify.com/start",children:"create your site with Netlify"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"While you set up the site, specify the build commands and directories as follows:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["build command: ",(0,t.jsx)(n.code,{children:"npm run build"})]}),"\n",(0,t.jsxs)(n.li,{children:["publish directory: ",(0,t.jsx)(n.code,{children:"build"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:'If you did not configure these build options, you may still go to "Site settings" -> "Build & deploy" after your site is created.'}),"\n",(0,t.jsxs)(n.p,{children:["Once properly configured with the above options, your site should deploy and automatically redeploy upon merging to your deploy branch, which defaults to ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Some Docusaurus sites put the ",(0,t.jsx)(n.code,{children:"docs"})," folder outside of ",(0,t.jsx)(n.code,{children:"website"})," (most likely former Docusaurus v1 sites):"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"repo # git root\n\u251c\u2500\u2500 docs # MD files\n\u2514\u2500\u2500 website # Docusaurus root\n"})}),(0,t.jsxs)(n.p,{children:["If you decide to use the ",(0,t.jsx)(n.code,{children:"website"})," folder as Netlify's base directory, Netlify will not trigger builds when you update the ",(0,t.jsx)(n.code,{children:"docs"})," folder, and you need to configure a ",(0,t.jsxs)(n.a,{href:"https://docs.netlify.com/configure-builds/common-configurations/ignore-builds/",children:["custom ",(0,t.jsx)(n.code,{children:"ignore"})," command"]}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-toml",metastring:'title="website/netlify.toml"',children:'[build]\n ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../docs/"\n'})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"By default, Netlify adds trailing slashes to Docusaurus URLs."}),(0,t.jsxs)(n.p,{children:["It is recommended to disable the Netlify setting ",(0,t.jsx)(n.code,{children:"Post Processing > Asset Optimization > Pretty Urls"})," to prevent lowercase URLs, unnecessary redirects, and 404 errors."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Be very careful"}),": the ",(0,t.jsx)(n.code,{children:"Disable asset optimization"})," global checkbox is broken and does not really disable the ",(0,t.jsx)(n.code,{children:"Pretty URLs"})," setting in practice. Please make sure to ",(0,t.jsx)(n.strong,{children:"uncheck it independently"}),"."]}),(0,t.jsxs)(n.p,{children:["If you want to keep the ",(0,t.jsx)(n.code,{children:"Pretty Urls"})," Netlify setting on, adjust the ",(0,t.jsx)(n.code,{children:"trailingSlash"})," Docusaurus config appropriately."]}),(0,t.jsxs)(n.p,{children:["Refer to ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," for more information."]})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-vercel",children:"Deploying to Vercel"}),"\n",(0,t.jsxs)(n.p,{children:["Deploying your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"})," will provide you with ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"various benefits"})," in the areas of performance and ease of use."]}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus project with a ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/concepts/git",children:"Vercel for Git Integration"}),", make sure it has been pushed to a Git repository."]}),"\n",(0,t.jsxs)(n.p,{children:["Import the project into Vercel using the ",(0,t.jsx)(n.a,{href:"https://vercel.com/import/git",children:"Import Flow"}),". During the import, you will find all relevant options preconfigured for you; however, you can choose to change any of these ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/build-step#build-&-development-settings",children:"options"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["After your project has been imported, all subsequent pushes to branches will generate ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#preview",children:"Preview Deployments"}),", and all changes made to the ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/git-integrations#production-branch",children:"Production Branch"}),' (usually "main" or "master") will result in a ',(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#production",children:"Production Deployment"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus provides an easy way to publish to ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", which comes free with every GitHub repository."]}),"\n",(0,t.jsx)(n.h3,{id:"github-pages-overview",children:"Overview"}),"\n",(0,t.jsxs)(n.p,{children:["Usually, there are two repositories (at least two branches) involved in a publishing process: the branch containing the source files, and the branch containing the build output to be served with GitHub Pages. In the following tutorial, they will be referred to as ",(0,t.jsx)(n.strong,{children:'"source"'})," and ",(0,t.jsx)(n.strong,{children:'"deployment"'}),", respectively."]}),"\n",(0,t.jsxs)(n.p,{children:["Each GitHub repository is associated with a GitHub Pages service. If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-project"})," (where ",(0,t.jsx)(n.code,{children:"my-org"})," is the organization name or username), the deployed site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/my-project/"}),". If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-org.github.io"})," (the ",(0,t.jsx)(n.em,{children:"organization GitHub Pages repo"}),"), the site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["In case you want to use your custom domain for GitHub Pages, create a ",(0,t.jsx)(n.code,{children:"CNAME"})," file in the ",(0,t.jsx)(n.code,{children:"static"})," directory. Anything within the ",(0,t.jsx)(n.code,{children:"static"})," directory will be copied to the root of the ",(0,t.jsx)(n.code,{children:"build"})," directory for deployment. When using a custom domain, you should be able to move back from ",(0,t.jsx)(n.code,{children:"baseUrl: '/projectName/'"})," to ",(0,t.jsx)(n.code,{children:"baseUrl: '/'"}),", and also set your ",(0,t.jsx)(n.code,{children:"url"})," to your custom domain."]}),(0,t.jsxs)(n.p,{children:["You may refer to GitHub Pages' documentation ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/articles/user-organization-and-project-pages",children:"User, Organization, and Project Pages"})," for more details."]})]}),"\n",(0,t.jsxs)(n.p,{children:["GitHub Pages picks up deploy-ready files (the output from ",(0,t.jsx)(n.code,{children:"docusaurus build"}),") from the default branch (",(0,t.jsx)(n.code,{children:"master"})," / ",(0,t.jsx)(n.code,{children:"main"}),", usually) or the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch, and either from the root or the ",(0,t.jsx)(n.code,{children:"/docs"})," folder. You can configure that through ",(0,t.jsx)(n.code,{children:"Settings > Pages"}),' in your repository. This branch will be called the "deployment branch".']}),"\n",(0,t.jsxs)(n.p,{children:["We provide a ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," command that helps you deploy your site from the source branch to the deployment branch in one command: clone, build, and commit."]}),"\n",(0,t.jsxs)(n.h3,{id:"docusaurusconfigjs-settings",children:[(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," settings"]}),"\n",(0,t.jsxs)(n.p,{children:["First, modify your ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," and add the following params:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"organizationName"})}),(0,t.jsx)(n.td,{children:"The GitHub user or organization that owns the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"projectName"})}),(0,t.jsx)(n.td,{children:"The name of the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"deploymentBranch"})}),(0,t.jsxs)(n.td,{children:["The name of the deployment branch. It defaults to ",(0,t.jsx)(n.code,{children:"'gh-pages'"})," for non-organization GitHub Pages repos (",(0,t.jsx)(n.code,{children:"projectName"})," not ending in ",(0,t.jsx)(n.code,{children:".github.io"}),"). Otherwise, it needs to be explicit as a config field or environment variable."]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["These fields also have their environment variable counterparts which have a higher priority: ",(0,t.jsx)(n.code,{children:"ORGANIZATION_NAME"}),", ",(0,t.jsx)(n.code,{children:"PROJECT_NAME"}),", and ",(0,t.jsx)(n.code,{children:"DEPLOYMENT_BRANCH"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["GitHub Pages adds a trailing slash to Docusaurus URLs by default. It is recommended to set a ",(0,t.jsx)(n.code,{children:"trailingSlash"})," config (",(0,t.jsx)(n.code,{children:"true"})," or ",(0,t.jsx)(n.code,{children:"false"}),", not ",(0,t.jsx)(n.code,{children:"undefined"}),")."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n url: 'https://endiliey.github.io', // Your website URL\n baseUrl: '/',\n // highlight-start\n projectName: 'endiliey.github.io',\n organizationName: 'endiliey',\n trailingSlash: false,\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["By default, GitHub Pages runs published files through ",(0,t.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"}),". Since Jekyll will discard any files that begin with ",(0,t.jsx)(n.code,{children:"_"}),", it is recommended that you disable Jekyll by adding an empty file named ",(0,t.jsx)(n.code,{children:".nojekyll"})," file to your ",(0,t.jsx)(n.code,{children:"static"})," directory."]})}),"\n",(0,t.jsx)(n.h3,{id:"environment-settings",children:"Environment settings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"USE_SSH"})}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"true"})," to use SSH instead of the default HTTPS for the connection to the GitHub repo. If the source repo URL is an SSH URL (e.g. ",(0,t.jsx)(n.code,{children:"git@github.com:facebook/docusaurus.git"}),"), ",(0,t.jsx)(n.code,{children:"USE_SSH"})," is inferred to be ",(0,t.jsx)(n.code,{children:"true"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER"})}),(0,t.jsxs)(n.td,{children:["The username for a GitHub account that ",(0,t.jsx)(n.strong,{children:"has push access to the deployment repo"}),". For your own repositories, this will usually be your GitHub username. Required if not using SSH, and ignored otherwise."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_PASS"})}),(0,t.jsxs)(n.td,{children:["Personal access token of the git user (specified by ",(0,t.jsx)(n.code,{children:"GIT_USER"}),"), to facilitate non-interactive deployment (e.g. continuous deployment)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CURRENT_BRANCH"})}),(0,t.jsxs)(n.td,{children:["The source branch. Usually, the branch will be ",(0,t.jsx)(n.code,{children:"main"})," or ",(0,t.jsx)(n.code,{children:"master"}),", but it could be any branch except for ",(0,t.jsx)(n.code,{children:"gh-pages"}),". If nothing is set for this variable, then the current branch from which ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," is invoked will be used."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_NAME"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.name"})," value to use when pushing to the deployment repo"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_EMAIL"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.email"})," value to use when pushing to the deployment repo"]})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"GitHub enterprise installations should work in the same manner as github.com; you only need to set the organization's GitHub Enterprise host as an environment variable:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_HOST"})}),(0,t.jsx)(n.td,{children:"The domain name of your GitHub enterprise site."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_PORT"})}),(0,t.jsx)(n.td,{children:"The port of your GitHub enterprise site."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"deploy",children:"Deploy"}),"\n",(0,t.jsx)(n.p,{children:"Finally, to deploy your site to GitHub Pages, run:"}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsx)(r.Z,{value:"bash",label:"Bash",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"GIT_USER=<GITHUB_USERNAME> yarn deploy\n"})})}),(0,t.jsx)(r.Z,{value:"windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-batch",children:'cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n'})})}),(0,t.jsx)(r.Z,{value:"powershell",label:"PowerShell",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-powershell",children:"cmd /C 'set \"GIT_USER=<GITHUB_USERNAME>\" && yarn deploy'\n"})})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Beginning in August 2021, GitHub requires every command-line sign-in to use the ",(0,t.jsx)(n.strong,{children:"personal access token"})," instead of the password. When GitHub prompts for your password, enter the PAT instead. See the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",children:"GitHub documentation"})," for more information."]}),(0,t.jsxs)(n.p,{children:["Alternatively, you can use SSH (",(0,t.jsx)(n.code,{children:"USE_SSH=true"}),") to log in."]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-github-actions",children:"Triggering deployment with GitHub Actions"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions",children:"GitHub Actions"})," allow you to automate, customize, and execute your software development workflows right in your repository."]}),"\n",(0,t.jsxs)(n.p,{children:["The workflow examples below assume your website source resides in the ",(0,t.jsx)(n.code,{children:"main"})," branch of your repository (the ",(0,t.jsx)(n.em,{children:"source branch"})," is ",(0,t.jsx)(n.code,{children:"main"}),"), and your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is configured for ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow",children:"publishing with a custom GitHub Actions Workflow"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Our goal is that:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["When a new pull request is made to ",(0,t.jsx)(n.code,{children:"main"}),", there's an action that ensures the site builds successfully, without actually deploying. This job will be called ",(0,t.jsx)(n.code,{children:"test-deploy"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["When a pull request is merged to the ",(0,t.jsx)(n.code,{children:"main"})," branch or someone pushes to the ",(0,t.jsx)(n.code,{children:"main"})," branch directly, it will be built and deployed to GitHub Pages. This job will be called ",(0,t.jsx)(n.code,{children:"deploy"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Here are two approaches to deploying your docs with GitHub Actions. Based on the location of your deployment repository, choose the relevant tab below:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Source repo and deployment repo are the ",(0,t.jsx)(n.strong,{children:"same"})," repository."]}),"\n",(0,t.jsxs)(n.li,{children:["The deployment repo is a ",(0,t.jsx)(n.strong,{children:"remote"})," repository, different from the source. Instructions for this scenario assume ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch."]}),"\n"]}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsxs)(r.Z,{value:"same",label:"Same",children:[(0,t.jsxs)(n.p,{children:["While you can have both jobs defined in the same workflow file, the original ",(0,t.jsx)(n.code,{children:"deploy"})," workflow will always be listed as skipped in the PR check suite status, which is not indicative of the actual status and provides no value to the review process. We therefore propose to manage them as separate workflows instead."]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action files"}),(0,t.jsx)(n.p,{children:"Add these two workflow files:"}),(0,t.jsxs)(n.admonition,{title:"Tweak the parameters for your setup",type:"warning",children:[(0,t.jsxs)(n.p,{children:["These files assume you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]}),(0,t.jsxs)(n.p,{children:["If your Docusaurus project is not at the root of your repo, you may need to configure a ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-set-the-default-shell-and-working-directory",children:"default working directory"}),", and adjust the paths accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n push:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n build:\n name: Build Docusaurus\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Build website\n run: yarn build\n\n - name: Upload Build Artifact\n uses: actions/upload-pages-artifact@v3\n with:\n path: build\n\n deploy:\n name: Deploy to GitHub Pages\n needs: build\n\n # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n permissions:\n pages: write # to deploy to Pages\n id-token: write # to verify the deployment originates from an appropriate source\n\n # Deploy to the github-pages environment\n environment:\n name: github-pages\n url: ${{ steps.deployment.outputs.page_url }}\n\n runs-on: ubuntu-latest\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/test-deploy.yml"',children:"name: Test deployment\n\non:\n pull_request:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n test-deploy:\n name: Test deployment\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n"})})]})]}),(0,t.jsxs)(r.Z,{value:"remote",label:"Remote",children:[(0,t.jsx)(n.p,{children:"A cross-repo publish is more difficult to set up because you need to push to another repo with permission checks. We will be using SSH to do the authentication."}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH key"}),". Since this SSH key will be used in CI, make sure to not enter any passphrase."]}),"\n",(0,t.jsxs)(n.li,{children:["By default, your public key should have been created in ",(0,t.jsx)(n.code,{children:"~/.ssh/id_rsa.pub"}),"; otherwise, use the name you've provided in the previous step to add your key to ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/",children:"GitHub deploy keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy the key to clipboard with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa.pub"})," and paste it as a ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys",children:"deploy key"})," in the deployment repository. Copy the file content if the command line doesn't work for you. Check the box for ",(0,t.jsx)(n.code,{children:"Allow write access"})," before saving your deployment key."]}),"\n",(0,t.jsxs)(n.li,{children:["You'll need your private key as a ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets",children:"GitHub secret"})," to allow Docusaurus to run the deployment for you."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy your private key with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa"})," and paste a GitHub secret with the name ",(0,t.jsx)(n.code,{children:"GH_PAGES_DEPLOY"})," on your source repository. Copy the file content if the command line doesn't work for you. Save your secret."]}),"\n",(0,t.jsxs)(n.li,{children:["Create your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#creating-a-workflow-file",children:"documentation workflow file"})," in ",(0,t.jsx)(n.code,{children:".github/workflows/"}),". In this example, it's ",(0,t.jsx)(n.code,{children:"deploy.yml"}),"."]}),"\n"]}),(0,t.jsx)(n.p,{children:"At this point, you should have:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"the source repo with the GitHub workflow set with the private SSH key as the GitHub Secret, and"}),"\n",(0,t.jsx)(n.li,{children:"your deployment repo set with the public SSH key in GitHub Deploy Keys."}),"\n"]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action file"}),(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Please make sure that you replace ",(0,t.jsx)(n.code,{children:"actions@github.com"})," with your GitHub email and ",(0,t.jsx)(n.code,{children:"gh-actions"})," with your name."]}),(0,t.jsxs)(n.p,{children:["This file assumes you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n pull_request:\n branches: [main]\n push:\n branches: [main]\n\npermissions:\n contents: write\n\njobs:\n test-deploy:\n if: github.event_name != 'push'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n deploy:\n if: github.event_name != 'pull_request'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - uses: webfactory/ssh-agent@v0.5.0\n with:\n ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}\n - name: Deploy to GitHub Pages\n env:\n USE_SSH: true\n run: |\n git config --global user.email \"actions@github.com\"\n git config --global user.name \"gh-actions\"\n yarn install --frozen-lockfile\n yarn deploy\n"})})]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Site not deployed properly?"}),(0,t.jsx)(n.p,{children:"After pushing to main, if you don't see your site published at the desired location (for example, it says \"There isn't a GitHub Pages site here\", or it's showing your repo's README.md file), try the following:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Wait about three minutes and refresh. It may take a few minutes for GitHub pages to pick up the new files."}),"\n",(0,t.jsx)(n.li,{children:"Check your repo's landing page for a little green tick next to the last commit's title, indicating the CI has passed. If you see a cross, it means the build or deployment failed, and you should check the log for more debugging information."}),"\n",(0,t.jsxs)(n.li,{children:['Click on the tick and make sure you see a "Deploy to GitHub Pages" workflow. Names like "pages build and deployment / deploy" are GitHub\'s default workflows, indicating your custom deployment workflow failed to be triggered at all. Make sure the YAML files are placed under the ',(0,t.jsx)(n.code,{children:".github/workflows"}),' folder, and that the trigger condition is set correctly (e.g., if your default branch is "master" instead of "main", you need to change the ',(0,t.jsx)(n.code,{children:"on.push"})," property)."]}),"\n",(0,t.jsxs)(n.li,{children:['Under your repo\'s Settings > Pages, make sure the "Source" (which is the source for the ',(0,t.jsx)(n.em,{children:"deployment"}),' files, not "source" as in our terminology) is set to "gh-pages" + "/ (root)", since we are using ',(0,t.jsx)(n.code,{children:"gh-pages"})," as the deployment branch."]}),"\n"]}),(0,t.jsx)(n.p,{children:"If you are using a custom domain:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Verify that you have the correct DNS records set up if you're using a custom domain. See ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages",children:"GitHub pages documentation on configuring custom domains"}),". Also, please be aware that it may take up to 24 hours for DNS changes to propagate through the internet."]}),"\n"]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-travis-ci",children:"Triggering deployment with Travis CI"}),"\n",(0,t.jsxs)(n.p,{children:["Continuous integration (CI) services are typically used to perform routine tasks whenever new commits are checked in to source control. These tasks can be any combination of running unit tests and integration tests, automating builds, publishing packages to npm, and deploying changes to your website. All you need to do to automate the deployment of your website is to invoke the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script whenever your website is updated. The following section covers how to do just that using ",(0,t.jsx)(n.a,{href:"https://travis-ci.com/",children:"Travis CI"}),", a popular continuous integration service provider."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsxs)(n.li,{children:["Using your GitHub account, ",(0,t.jsx)(n.a,{href:"https://github.com/marketplace/travis-ci",children:"add the Travis CI app"})," to the repository you want to activate."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Travis CI dashboard. The URL looks like ",(0,t.jsx)(n.code,{children:"https://travis-ci.com/USERNAME/REPO"}),", and navigate to the ",(0,t.jsx)(n.code,{children:"More options > Setting > Environment Variables"})," section of your repository."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username)."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".travis.yml"})," on the root of your repository with the following:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".travis.yml"',children:'language: node_js\nnode_js:\n - 18\nbranches:\n only:\n - main\ncache:\n yarn: true\nscript:\n - git config --global user.name "${GH_NAME}"\n - git config --global user.email "${GH_EMAIL}"\n - echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n - yarn install\n - GIT_USER="${GH_NAME}" yarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Now, whenever a new commit lands in ",(0,t.jsx)(n.code,{children:"main"}),", Travis CI will run your suite of tests and if everything passes, your website will be deployed via the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script."]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-buddy",children:"Triggering deployment with Buddy"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://buddy.works/",children:"Buddy"})," is an easy-to-use CI/CD tool that allows you to automate the deployment of your portal to different environments, including GitHub Pages."]}),"\n",(0,t.jsx)(n.p,{children:"Follow these steps to create a pipeline that automatically deploys a new version of your website whenever you push changes to the selected branch of your project:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsx)(n.li,{children:"Sign in to your Buddy account and create a new project."}),"\n",(0,t.jsx)(n.li,{children:"Choose GitHub as your git hosting provider and select the repository with the code of your website."}),"\n",(0,t.jsxs)(n.li,{children:["Using the left navigation panel, switch to the ",(0,t.jsx)(n.code,{children:"Pipelines"})," view."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new pipeline. Define its name, set the trigger mode to ",(0,t.jsx)(n.code,{children:"On push"}),", and select the branch that triggers the pipeline execution."]}),"\n",(0,t.jsxs)(n.li,{children:["Add a ",(0,t.jsx)(n.code,{children:"Node.js"})," action."]}),"\n",(0,t.jsx)(n.li,{children:"Add these commands in the action's terminal:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'GIT_USER=<GH_PERSONAL_ACCESS_TOKEN>\ngit config --global user.email "<YOUR_GH_EMAIL>"\ngit config --global user.name "<YOUR_GH_USERNAME>"\nyarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["After creating this simple pipeline, each new commit pushed to the branch you selected deploys your website to GitHub Pages using ",(0,t.jsx)(n.code,{children:"yarn deploy"}),". Read ",(0,t.jsx)(n.a,{href:"https://buddy.works/guides/react-docusaurus",children:"this guide"})," to learn more about setting up a CI/CD pipeline for Docusaurus."]}),"\n",(0,t.jsx)(n.h3,{id:"using-azure-pipelines",children:"Using Azure Pipelines"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Sign Up at ",(0,t.jsx)(n.a,{href:"https://azure.microsoft.com/en-us/services/devops/pipelines/",children:"Azure Pipelines"})," if you haven't already."]}),"\n",(0,t.jsx)(n.li,{children:"Create an organization. Within the organization, create a project and connect your repository from GitHub."}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"})," with the ",(0,t.jsx)(n.code,{children:"repo"})," scope."]}),"\n",(0,t.jsxs)(n.li,{children:["In the project page (which looks like ",(0,t.jsx)(n.code,{children:"https://dev.azure.com/ORG_NAME/REPO_NAME/_build"}),"), create a new pipeline with the following text. Also, click on edit and add a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username). Make sure to mark them as secret. Alternatively, you can also add a file named ",(0,t.jsx)(n.code,{children:"azure-pipelines.yml"})," at your repository root."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title="azure-pipelines.yml"',children:'trigger:\n - main\n\npool:\n vmImage: ubuntu-latest\n\nsteps:\n - checkout: self\n persistCredentials: true\n\n - task: NodeTool@0\n inputs:\n versionSpec: \'18\'\n displayName: Install Node.js\n\n - script: |\n git config --global user.name "${GH_NAME}"\n git config --global user.email "${GH_EMAIL}"\n git checkout -b main\n echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n yarn install\n GIT_USER="${GH_NAME}" yarn deploy\n env:\n GH_NAME: $(GH_NAME)\n GH_EMAIL: $(GH_EMAIL)\n GH_TOKEN: $(GH_TOKEN)\n displayName: Install and build\n'})}),"\n",(0,t.jsx)(n.h3,{id:"using-drone",children:"Using Drone"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new SSH key that will be the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/developers/overview/managing-deploy-keys#deploy-keys",children:"deploy key"})," for your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Name your private and public keys to be specific and so that it does not overwrite your other ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.code,{children:"https://github.com/USERNAME/REPO/settings/keys"})," and add a new deploy key by pasting in the public key you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Drone.io dashboard and log in. The URL looks like ",(0,t.jsx)(n.code,{children:"https://cloud.drone.io/USERNAME/REPO"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on the repository, click on activate repository, and add a secret called ",(0,t.jsx)(n.code,{children:"git_deploy_private_key"})," with your private key value that you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".drone.yml"})," on the root of your repository with the below text."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".drone.yml"',children:'kind: pipeline\ntype: docker\ntrigger:\n event:\n - tag\n- name: Website\n image: node\n commands:\n - mkdir -p $HOME/.ssh\n - ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts\n - echo "$GITHUB_PRIVATE_KEY" > "$HOME/.ssh/id_rsa"\n - chmod 0600 $HOME/.ssh/id_rsa\n - cd website\n - yarn install\n - yarn deploy\n environment:\n USE_SSH: true\n GITHUB_PRIVATE_KEY:\n from_secret: git_deploy_private_key\n'})}),"\n",(0,t.jsx)(n.p,{children:"Now, whenever you push a new tag to GitHub, this trigger will start the drone CI job to publish your website."}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-flightcontrol",children:"Deploying to Flightcontrol"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/?ref=docusaurus",children:"Flightcontrol"})," is a service that automatically builds and deploys your web apps to AWS Fargate directly from your Git repository. It gives you full access to inspect and make infrastructure changes without the limitations of a traditional PaaS."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started by following ",(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/docs/reference/examples/docusaurus/?ref=docusaurus",children:"Flightcontrol's step-by-step Docusaurus guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-koyeb",children:"Deploying to Koyeb"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.koyeb.com",children:"Koyeb"})," is a developer-friendly serverless platform to deploy apps globally. The platform lets you seamlessly run Docker containers, web apps, and APIs with git-based deployment, native autoscaling, a global edge network, and built-in service mesh and discovery. Check out the ",(0,t.jsx)(n.a,{href:"https://www.koyeb.com/tutorials/deploy-docusaurus-on-koyeb",children:"Koyeb's Docusaurus deployment guide"})," to get started."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-render",children:"Deploying to Render"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://render.com",children:"Render"})," offers ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"free static site hosting"})," with fully managed SSL, custom domains, a global CDN, and continuous auto-deploy from your Git repo. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-qovery",children:"Deploying to Qovery"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.qovery.com",children:"Qovery"})," is a fully-managed cloud platform that runs on your AWS, Digital Ocean, and Scaleway account where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a Qovery account. Visit the ",(0,t.jsx)(n.a,{href:"https://console.qovery.com",children:"Qovery dashboard"})," to create an account if you don't already have one."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a project.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create project"})," and give a name to your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create environment"})," and give a name (e.g. staging, production)."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Add an application.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create an application"}),", give a name and select your GitHub or GitLab repository where your Docusaurus app is located."]}),"\n",(0,t.jsx)(n.li,{children:"Define the main branch name and the root application path."}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create"}),". After the application is created:"]}),"\n",(0,t.jsxs)(n.li,{children:["Navigate to your application ",(0,t.jsx)(n.strong,{children:"Settings"})]}),"\n",(0,t.jsxs)(n.li,{children:["Select ",(0,t.jsx)(n.strong,{children:"Port"})]}),"\n",(0,t.jsx)(n.li,{children:"Add port used by your Docusaurus application"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["All you have to do now is to navigate to your application and click on ",(0,t.jsx)(n.strong,{children:"Deploy"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://hub.qovery.com/img/heroku/heroku-1.png",alt:"Deploy the app"})}),"\n",(0,t.jsxs)(n.p,{children:["That's it. Watch the status and wait till the app is deployed. To open the application in your browser, click on ",(0,t.jsx)(n.strong,{children:"Action"})," and ",(0,t.jsx)(n.strong,{children:"Open"})," in your application overview."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-hostman",children:"Deploying to Hostman"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://hostman.com/",children:"Hostman"})," allows you to host static websites for free. Hostman automates everything, you just need to connect your repository and follow these easy steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a service."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To deploy a Docusaurus static website, click ",(0,t.jsx)(n.strong,{children:"Create"})," in the top-left corner of your ",(0,t.jsx)(n.a,{href:"https://dashboard.hostman.com/",children:"Dashboard"})," and choose ",(0,t.jsx)(n.strong,{children:"Front-end app or static website"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Select the project to deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you are logged in to Hostman with your GitHub, GitLab, or Bitbucket account, you will see the repository with your projects, including the private ones."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose the project you want to deploy. It must contain the directory with the project's files (e.g. ",(0,t.jsx)(n.code,{children:"website"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To access a different repository, click ",(0,t.jsx)(n.strong,{children:"Connect another repository"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you didn't use your Git account credentials to log in, you'll be able to access the necessary account now, and then select the project."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure the build settings."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Next, the ",(0,t.jsx)(n.strong,{children:"Website customization"})," window will appear. Choose the ",(0,t.jsx)(n.strong,{children:"Static website"})," option from the list of frameworks."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Directory with app"})," points at the directory that will contain the project's files after the build. If you selected the repository with the contents of the website (or ",(0,t.jsx)(n.code,{children:"my_website"}),") directory during Step 2, you can leave it empty."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The standard build command for Docusaurus is:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["You can modify the build command if needed. You can enter multiple commands separated by ",(0,t.jsx)(n.code,{children:"&&"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Deploy"})," to start the build process."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Once it starts, you will enter the deployment log. If there are any issues with the code, you will get warning or error messages in the log specifying the cause of the problem. Usually, the log contains all the debugging data you'll need."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"When the deployment is complete, you will receive an email notification and also see a log entry. All done! Your project is up and ready."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-surge",children:"Deploying to Surge"}),"\n",(0,t.jsxs)(n.p,{children:["Surge is a ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"static web hosting platform"})," that you can use to deploy your Docusaurus project from the command line in seconds. Deploying your project to Surge is easy and free (including custom domains and SSL certs)."]}),"\n",(0,t.jsx)(n.p,{children:"Deploy your app in a matter of seconds using Surge with the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["First, install Surge using npm by running the following command:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install -g surge\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn global add surge\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add -g surge\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["To build the static files of your site for production in the root directory of your project, run:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Then, run this command inside the root directory of your project:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"First-time users of Surge would be prompted to create an account from the command line (which happens only once)."}),"\n",(0,t.jsxs)(n.p,{children:["Confirm that the site you want to publish is in the ",(0,t.jsx)(n.code,{children:"build"})," directory. A randomly generated subdomain ",(0,t.jsx)(n.code,{children:"*.surge.sh subdomain"})," is always given (which can be edited)."]}),"\n",(0,t.jsx)(n.h3,{id:"using-your-domain",children:"Using your domain"}),"\n",(0,t.jsx)(n.p,{children:"If you have a domain name you can deploy your site using the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/ your-domain.com\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Your site is now deployed for free at ",(0,t.jsx)(n.code,{children:"subdomain.surge.sh"})," or ",(0,t.jsx)(n.code,{children:"your-domain.com"})," depending on the method you chose."]}),"\n",(0,t.jsx)(n.h3,{id:"setting-up-cname-file",children:"Setting up CNAME file"}),"\n",(0,t.jsx)(n.p,{children:"Store your domain in a CNAME file for future deployments with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"echo subdomain.surge.sh > CNAME\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy any other changes in the future with the command ",(0,t.jsx)(n.code,{children:"surge"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-stormkit",children:"Deploying to Stormkit"}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io",children:"Stormkit"}),", a deployment platform for static websites, single-page applications (SPAs), and serverless functions. For detailed instructions, refer to this ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io/blog/how-to-deploy-docusarous",children:"guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-quantcdn",children:"Deploying to QuantCDN"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Install ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/get-started",children:"Quant CLI"})]}),"\n",(0,t.jsxs)(n.li,{children:["Create a QuantCDN account by ",(0,t.jsx)(n.a,{href:"https://dashboard.quantcdn.io/register",children:"signing up"})]}),"\n",(0,t.jsxs)(n.li,{children:["Initialize your project with ",(0,t.jsx)(n.code,{children:"quant init"})," and fill in your credentials:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant init\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy your site.","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant deploy\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/continuous-integration",children:"docs"})," and ",(0,t.jsx)(n.a,{href:"https://www.quantcdn.io/blog",children:"blog"})," for more examples and use cases for deploying to QuantCDN."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-layer0",children:"Deploying to Layer0"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.layer0.co",children:"Layer0"})," is an all-in-one platform to develop, deploy, preview, experiment on, monitor, and run your headless frontend. It is focused on large, dynamic websites and best-in-class performance through EdgeJS (a JavaScript-based Content Delivery Network), predictive prefetching, and performance monitoring. Layer0 offers a free tier. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://docs.layer0.co/guides/docusaurus",children:"Layer0's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-cloudflare-pages",children:"Deploying to Cloudflare Pages"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://pages.cloudflare.com/",children:"Cloudflare Pages"})," is a Jamstack platform for frontend developers to collaborate and deploy websites. Get started within a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/apidev234/deploying-docusaurus-to-cloudflare-pages-565g",children:"this article"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-azure-static-web-apps",children:"Deploying to Azure Static Web Apps"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/static-web-apps/overview",children:"Azure Static Web Apps"})," is a service that automatically builds and deploys full-stack web apps to Azure directly from the code repository, simplifying the developer experience for CI/CD. Static Web Apps separates the web application's static assets from its dynamic (API) endpoints. Static assets are served from globally-distributed content servers, making it faster for clients to retrieve files using servers nearby. Dynamic APIs are scaled with serverless architectures using an event-driven functions-based approach that is more cost-effective and scales on demand. Get started in a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/azure/11-share-content-with-docusaurus-azure-static-web-apps-30hc",children:"this step-by-step guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-kinsta",children:"Deploying to Kinsta"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://kinsta.com/static-site-hosting",children:"Kinsta Static Site Hosting"})," lets you deploy up to 100 static sites for free, custom domains with SSL, 100 GB monthly bandwidth, and 260+ Cloudflare CDN locations."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started in just a few clicks by following our ",(0,t.jsx)(n.a,{href:"https://kinsta.com/docs/docusaurus-example/",children:"Docusaurus on Kinsta"})," article."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>r});var t=s(27378);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/072728dc.4b64ee6f.js b/assets/js/072728dc.4b64ee6f.js new file mode 100644 index 000000000000..7838a5ac4830 --- /dev/null +++ b/assets/js/072728dc.4b64ee6f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75809],{24090:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:3},l=void 0,d={id:"toc/toc-3-_",title:"toc-3-_",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx",sourceDirName:"toc",slug:"/toc/toc-3-_",permalink:"/tests/docs/toc/toc-3-_",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:3},sidebar:"sidebar",previous:{title:"toc-3-5",permalink:"/tests/docs/toc/toc-3-5"},next:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-3-_.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/072728dc.a6172225.js b/assets/js/072728dc.a6172225.js deleted file mode 100644 index c9aadd61c6a0..000000000000 --- a/assets/js/072728dc.a6172225.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75809],{24090:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:3},l=void 0,d={id:"toc/toc-3-_",title:"toc-3-_",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx",sourceDirName:"toc",slug:"/toc/toc-3-_",permalink:"/tests/docs/toc/toc-3-_",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:3},sidebar:"sidebar",previous:{title:"toc-3-5",permalink:"/tests/docs/toc/toc-3-5"},next:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-3-_.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07d8cde9.2eb6e84d.js b/assets/js/07d8cde9.2eb6e84d.js deleted file mode 100644 index 64ed84541d6e..000000000000 --- a/assets/js/07d8cde9.2eb6e84d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75791],{40506:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var n=i(24246),t=i(71670);const c={sidebar_position:0,slug:"/api/misc/create-docusaurus"},a="\ud83d\udce6 create-docusaurus",o={id:"api/misc/create-docusaurus",title:"\ud83d\udce6 create-docusaurus",description:"A scaffolding utility to help you instantly set up a functional Docusaurus app.",source:"@site/docs/api/misc/create-docusaurus.mdx",sourceDirName:"api/misc",slug:"/api/misc/create-docusaurus",permalink:"/docs/api/misc/create-docusaurus",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/api/misc/create-docusaurus"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-mermaid",permalink:"/docs/api/themes/@docusaurus/theme-mermaid"},next:{title:"\ud83d\udce6 eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin"}},r={},l=[{value:"Usage",id:"usage",level:2},{value:"Options",id:"options",level:2},{value:"<code>-t, --typescript</code>",id:"typescript",level:3},{value:"<code>-g, --git-strategy</code>",id:"git-strategy",level:3},{value:"<code>-p, --package-manager</code>",id:"package-manager",level:3},{value:"<code>-s, --skip-install</code>",id:"skip-install",level:3}];function d(e){const s={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"-create-docusaurus",children:"\ud83d\udce6 create-docusaurus"})}),"\n",(0,n.jsx)(s.p,{children:"A scaffolding utility to help you instantly set up a functional Docusaurus app."}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npx create-docusaurus@latest [name] [template] [rootDir]\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"name"})," argument will be used as the site's path as well as the ",(0,n.jsx)(s.code,{children:"name"})," field in the created app's package.json. It can be an absolute path, or a path relative to ",(0,n.jsx)(s.code,{children:"rootDir"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"template"})," argument can be one of the following:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"classic"}),": Uses the classic template (recommended)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"facebook"}),": Uses the Facebook/Meta template, which contains some Meta-specific setup"]}),"\n",(0,n.jsxs)(s.li,{children:["A git repo URL (beginning with ",(0,n.jsx)(s.code,{children:"https://"})," or ",(0,n.jsx)(s.code,{children:"git@"}),"), which can be cloned to the destination"]}),"\n",(0,n.jsx)(s.li,{children:"A local file path relative to CWD, which contains the files to be copied to destination"}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"rootDir"})," will be used to resolve the absolute path to the site directory. The default is CWD."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"This command should be preferably used in an interactive shell so all features are available."})}),"\n",(0,n.jsx)(s.h2,{id:"options",children:"Options"}),"\n",(0,n.jsx)(s.h3,{id:"typescript",children:(0,n.jsx)(s.code,{children:"-t, --typescript"})}),"\n",(0,n.jsxs)(s.p,{children:["Used when the template argument is a recognized name. Currently, only ",(0,n.jsx)(s.code,{children:"classic"})," provides a TypeScript variant."]}),"\n",(0,n.jsx)(s.h3,{id:"git-strategy",children:(0,n.jsx)(s.code,{children:"-g, --git-strategy"})}),"\n",(0,n.jsx)(s.p,{children:"Used when the template argument is a git repo. It needs to be one of:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"deep"}),": preserves full git history"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"shallow"}),": clones with ",(0,n.jsx)(s.code,{children:"--depth=1"})]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"copy"}),": does a shallow clone, but does not create a git repo"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"custom"}),": enter your custom git clone command. We will prompt you for it. You can write something like ",(0,n.jsx)(s.code,{children:"git clone --depth 10"}),", and we will append the repository URL and destination directory."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"package-manager",children:(0,n.jsx)(s.code,{children:"-p, --package-manager"})}),"\n",(0,n.jsxs)(s.p,{children:["Value should be one of ",(0,n.jsx)(s.code,{children:"npm"}),", ",(0,n.jsx)(s.code,{children:"yarn"}),", ",(0,n.jsx)(s.code,{children:"pnpm"}),", or ",(0,n.jsx)(s.code,{children:"bun"}),". If it's not explicitly provided, Docusaurus will infer one based on:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The lockfile already present in the CWD (e.g. if you are setting up website in an existing project)"}),"\n",(0,n.jsxs)(s.li,{children:["The command used to invoke ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," (e.g. ",(0,n.jsx)(s.code,{children:"npm init"}),", ",(0,n.jsx)(s.code,{children:"npx"}),", ",(0,n.jsx)(s.code,{children:"yarn create"}),", ",(0,n.jsx)(s.code,{children:"bunx"}),", etc.)"]}),"\n",(0,n.jsx)(s.li,{children:"Interactive prompting, in case all heuristics are not present"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"skip-install",children:(0,n.jsx)(s.code,{children:"-s, --skip-install"})}),"\n",(0,n.jsxs)(s.p,{children:["If provided, Docusaurus will not automatically install dependencies after creating the app. The ",(0,n.jsx)(s.code,{children:"--package-manager"})," option is only useful when you are actually installing dependencies."]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>a});var n=i(27378);const t={},c=n.createContext(t);function a(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07d8cde9.bd13d19f.js b/assets/js/07d8cde9.bd13d19f.js new file mode 100644 index 000000000000..6e0b7c0d933b --- /dev/null +++ b/assets/js/07d8cde9.bd13d19f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75791],{40506:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var n=i(24246),t=i(71670);const c={sidebar_position:0,slug:"/api/misc/create-docusaurus"},a="\ud83d\udce6 create-docusaurus",o={id:"api/misc/create-docusaurus",title:"\ud83d\udce6 create-docusaurus",description:"A scaffolding utility to help you instantly set up a functional Docusaurus app.",source:"@site/docs/api/misc/create-docusaurus.mdx",sourceDirName:"api/misc",slug:"/api/misc/create-docusaurus",permalink:"/docs/api/misc/create-docusaurus",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/api/misc/create-docusaurus"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-mermaid",permalink:"/docs/api/themes/@docusaurus/theme-mermaid"},next:{title:"\ud83d\udce6 eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin"}},r={},l=[{value:"Usage",id:"usage",level:2},{value:"Options",id:"options",level:2},{value:"<code>-t, --typescript</code>",id:"typescript",level:3},{value:"<code>-g, --git-strategy</code>",id:"git-strategy",level:3},{value:"<code>-p, --package-manager</code>",id:"package-manager",level:3},{value:"<code>-s, --skip-install</code>",id:"skip-install",level:3}];function d(e){const s={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"-create-docusaurus",children:"\ud83d\udce6 create-docusaurus"})}),"\n",(0,n.jsx)(s.p,{children:"A scaffolding utility to help you instantly set up a functional Docusaurus app."}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npx create-docusaurus@latest [name] [template] [rootDir]\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"name"})," argument will be used as the site's path as well as the ",(0,n.jsx)(s.code,{children:"name"})," field in the created app's package.json. It can be an absolute path, or a path relative to ",(0,n.jsx)(s.code,{children:"rootDir"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"template"})," argument can be one of the following:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"classic"}),": Uses the classic template (recommended)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"facebook"}),": Uses the Facebook/Meta template, which contains some Meta-specific setup"]}),"\n",(0,n.jsxs)(s.li,{children:["A git repo URL (beginning with ",(0,n.jsx)(s.code,{children:"https://"})," or ",(0,n.jsx)(s.code,{children:"git@"}),"), which can be cloned to the destination"]}),"\n",(0,n.jsx)(s.li,{children:"A local file path relative to CWD, which contains the files to be copied to destination"}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"rootDir"})," will be used to resolve the absolute path to the site directory. The default is CWD."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"This command should be preferably used in an interactive shell so all features are available."})}),"\n",(0,n.jsx)(s.h2,{id:"options",children:"Options"}),"\n",(0,n.jsx)(s.h3,{id:"typescript",children:(0,n.jsx)(s.code,{children:"-t, --typescript"})}),"\n",(0,n.jsxs)(s.p,{children:["Used when the template argument is a recognized name. Currently, only ",(0,n.jsx)(s.code,{children:"classic"})," provides a TypeScript variant."]}),"\n",(0,n.jsx)(s.h3,{id:"git-strategy",children:(0,n.jsx)(s.code,{children:"-g, --git-strategy"})}),"\n",(0,n.jsx)(s.p,{children:"Used when the template argument is a git repo. It needs to be one of:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"deep"}),": preserves full git history"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"shallow"}),": clones with ",(0,n.jsx)(s.code,{children:"--depth=1"})]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"copy"}),": does a shallow clone, but does not create a git repo"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"custom"}),": enter your custom git clone command. We will prompt you for it. You can write something like ",(0,n.jsx)(s.code,{children:"git clone --depth 10"}),", and we will append the repository URL and destination directory."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"package-manager",children:(0,n.jsx)(s.code,{children:"-p, --package-manager"})}),"\n",(0,n.jsxs)(s.p,{children:["Value should be one of ",(0,n.jsx)(s.code,{children:"npm"}),", ",(0,n.jsx)(s.code,{children:"yarn"}),", ",(0,n.jsx)(s.code,{children:"pnpm"}),", or ",(0,n.jsx)(s.code,{children:"bun"}),". If it's not explicitly provided, Docusaurus will infer one based on:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The lockfile already present in the CWD (e.g. if you are setting up website in an existing project)"}),"\n",(0,n.jsxs)(s.li,{children:["The command used to invoke ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," (e.g. ",(0,n.jsx)(s.code,{children:"npm init"}),", ",(0,n.jsx)(s.code,{children:"npx"}),", ",(0,n.jsx)(s.code,{children:"yarn create"}),", ",(0,n.jsx)(s.code,{children:"bunx"}),", etc.)"]}),"\n",(0,n.jsx)(s.li,{children:"Interactive prompting, in case all heuristics are not present"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"skip-install",children:(0,n.jsx)(s.code,{children:"-s, --skip-install"})}),"\n",(0,n.jsxs)(s.p,{children:["If provided, Docusaurus will not automatically install dependencies after creating the app. The ",(0,n.jsx)(s.code,{children:"--package-manager"})," option is only useful when you are actually installing dependencies."]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>a});var n=i(27378);const t={},c=n.createContext(t);function a(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0938a5e1.c5e1ee3a.js b/assets/js/0938a5e1.c5e1ee3a.js new file mode 100644 index 000000000000..016cb5d7f523 --- /dev/null +++ b/assets/js/0938a5e1.c5e1ee3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8648],{40805:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},6698:(e,s,r)=>{r.d(s,{Z:()=>l});var n=r(24246),a=(r(27378),r(40624));const t={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,s,r){return s in e?Object.defineProperty(e,s,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[s]=r,e}function i(e){for(var s=1;s<arguments.length;s++){var r=null!=arguments[s]?arguments[s]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(s){o(e,s,r[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),r.push.apply(r,n)}return r}(Object(s)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))})),e}function l({children:e,minHeight:s,url:r="http://localhost:3000",style:o,bodyStyle:l}){return(0,n.jsxs)("div",{className:t.browserWindow,style:c(i({},o),{minHeight:s}),children:[(0,n.jsxs)("div",{className:t.browserWindowHeader,children:[(0,n.jsxs)("div",{className:t.buttons,children:[(0,n.jsx)("span",{className:t.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:t.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:t.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(t.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:t.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:t.bar}),(0,n.jsx)("span",{className:t.bar}),(0,n.jsx)("span",{className:t.bar})]})})]}),(0,n.jsx)("div",{className:t.browserWindowBody,style:l,children:e})]})}},89686:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},73660:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var n=r(24246),a=r(71670),t=r(6698);const o={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},i=void 0,c={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},l={image:r(40805).Z,authorsImageUrls:[void 0]},d=[{value:"Highlights",id:"highlights",level:2},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Config <code>headTags</code>",id:"config-headtags",level:3},{value:"Accessibility",id:"accessibility",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:r(89686).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7490",children:"#7490"}),", we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also ",(0,n.jsx)(s.a,{href:"https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/",children:"added support recently"}),". You can create Mermaid diagrams using Markdown code blocks:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",children:"```mermaid\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!\n```\n"})}),"\n","\n",(0,n.jsx)(t.Z,{children:(0,n.jsx)(s.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"})}),"\n",(0,n.jsxs)(s.p,{children:["Make sure to check the ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/diagrams",children:"documentation"}),", and the ",(0,n.jsx)(s.a,{href:"/tests/pages/diagrams",children:"more advanced examples"})]}),"\n",(0,n.jsxs)(s.h3,{id:"config-headtags",children:["Config ",(0,n.jsx)(s.code,{children:"headTags"})]}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8151",children:"#8151"}),", we added the ability to apply arbitrary HTML ",(0,n.jsx)(s.code,{children:"<head>"})," tags to all pages of your site."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'icon',\n href: '/img/docusaurus.png',\n },\n },\n ],\n};\n"})}),"\n",(0,n.jsx)(s.h3,{id:"accessibility",children:"Accessibility"}),"\n",(0,n.jsx)(s.p,{children:"We did several accessibility improvements:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8207",children:"#8207"}),": improves keyboard navigation for mobile drawer hamburger button"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8161",children:"#8161"}),": improves keyboard navigation for tabs"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8204",children:"#8204"}),": makes the skip to content button support progressive enhancement"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8174",children:"#8174"}),": improves screen reader announcement when toggling between light/dark mode"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,n.jsx)(s.p,{children:"We made validation stricter and improved error messages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8234",children:"#8234"}),": in case of doc processing failure, prints the problematic markdown file path in the error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8192",children:"#8192"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8159",children:"#8159"}),": validates ",(0,n.jsx)(s.code,{children:"siteConfig.url"})," more strictly and with better error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8066",children:"#8066"}),": makes config ",(0,n.jsx)(s.code,{children:"url"})," and ",(0,n.jsx)(s.code,{children:"baseUrl"})," fail-safe and less sensitive to the presence or absence of a leading or trailing slash"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"translations",children:"Translations"}),"\n",(0,n.jsx)(s.p,{children:"We completed the default theme translation support for multiple languages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8105",children:"#8105"}),": completes Turkish translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf7\ud83c\uddfa ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8253",children:"#8253"}),": completes Russian translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddeb\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8243",children:"#8243"}),": completes French translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddef\ud83c\uddf5 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8075",children:"#8075"}),": completes Japanese translations"]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Completing theme translations is an ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(s.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8210",children:"#8210"}),": the ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," CLI has a new ",(0,n.jsx)(s.code,{children:"--config"})," option"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8109",children:"#8109"}),": mobile navigation performance optimizations, prefetch resources earlier"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8059",children:"#8059"}),": versions/locales navbar dropdowns preserve hash and querystring on navigation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8227",children:"#8227"}),": the client redirect plugin preserves hash and querystring on redirect"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/2.2.0",children:"2.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>o});var n=r(27378);const a={},t=n.createContext(a);function o(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0938a5e1.cf38cec4.js b/assets/js/0938a5e1.cf38cec4.js deleted file mode 100644 index bc2a96d52581..000000000000 --- a/assets/js/0938a5e1.cf38cec4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8648],{40805:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},6698:(e,s,r)=>{r.d(s,{Z:()=>l});var n=r(24246),a=(r(27378),r(40624));const t={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,s,r){return s in e?Object.defineProperty(e,s,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[s]=r,e}function i(e){for(var s=1;s<arguments.length;s++){var r=null!=arguments[s]?arguments[s]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(s){o(e,s,r[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),r.push.apply(r,n)}return r}(Object(s)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))})),e}function l({children:e,minHeight:s,url:r="http://localhost:3000",style:o,bodyStyle:l}){return(0,n.jsxs)("div",{className:t.browserWindow,style:c(i({},o),{minHeight:s}),children:[(0,n.jsxs)("div",{className:t.browserWindowHeader,children:[(0,n.jsxs)("div",{className:t.buttons,children:[(0,n.jsx)("span",{className:t.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:t.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:t.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(t.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:t.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:t.bar}),(0,n.jsx)("span",{className:t.bar}),(0,n.jsx)("span",{className:t.bar})]})})]}),(0,n.jsx)("div",{className:t.browserWindowBody,style:l,children:e})]})}},89686:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},73660:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var n=r(24246),a=r(71670),t=r(6698);const o={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},i=void 0,c={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},l={image:r(40805).Z,authorsImageUrls:[void 0]},d=[{value:"Highlights",id:"highlights",level:2},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Config <code>headTags</code>",id:"config-headtags",level:3},{value:"Accessibility",id:"accessibility",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:r(89686).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7490",children:"#7490"}),", we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also ",(0,n.jsx)(s.a,{href:"https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/",children:"added support recently"}),". You can create Mermaid diagrams using Markdown code blocks:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",children:"```mermaid\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!\n```\n"})}),"\n","\n",(0,n.jsx)(t.Z,{children:(0,n.jsx)(s.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"})}),"\n",(0,n.jsxs)(s.p,{children:["Make sure to check the ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/diagrams",children:"documentation"}),", and the ",(0,n.jsx)(s.a,{href:"/tests/pages/diagrams",children:"more advanced examples"})]}),"\n",(0,n.jsxs)(s.h3,{id:"config-headtags",children:["Config ",(0,n.jsx)(s.code,{children:"headTags"})]}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8151",children:"#8151"}),", we added the ability to apply arbitrary HTML ",(0,n.jsx)(s.code,{children:"<head>"})," tags to all pages of your site."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'icon',\n href: '/img/docusaurus.png',\n },\n },\n ],\n};\n"})}),"\n",(0,n.jsx)(s.h3,{id:"accessibility",children:"Accessibility"}),"\n",(0,n.jsx)(s.p,{children:"We did several accessibility improvements:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8207",children:"#8207"}),": improves keyboard navigation for mobile drawer hamburger button"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8161",children:"#8161"}),": improves keyboard navigation for tabs"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8204",children:"#8204"}),": makes the skip to content button support progressive enhancement"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8174",children:"#8174"}),": improves screen reader announcement when toggling between light/dark mode"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,n.jsx)(s.p,{children:"We made validation stricter and improved error messages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8234",children:"#8234"}),": in case of doc processing failure, prints the problematic markdown file path in the error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8192",children:"#8192"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8159",children:"#8159"}),": validates ",(0,n.jsx)(s.code,{children:"siteConfig.url"})," more strictly and with better error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8066",children:"#8066"}),": makes config ",(0,n.jsx)(s.code,{children:"url"})," and ",(0,n.jsx)(s.code,{children:"baseUrl"})," fail-safe and less sensitive to the presence or absence of a leading or trailing slash"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"translations",children:"Translations"}),"\n",(0,n.jsx)(s.p,{children:"We completed the default theme translation support for multiple languages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8105",children:"#8105"}),": completes Turkish translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf7\ud83c\uddfa ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8253",children:"#8253"}),": completes Russian translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddeb\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8243",children:"#8243"}),": completes French translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddef\ud83c\uddf5 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8075",children:"#8075"}),": completes Japanese translations"]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Completing theme translations is an ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(s.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8210",children:"#8210"}),": the ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," CLI has a new ",(0,n.jsx)(s.code,{children:"--config"})," option"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8109",children:"#8109"}),": mobile navigation performance optimizations, prefetch resources earlier"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8059",children:"#8059"}),": versions/locales navbar dropdowns preserve hash and querystring on navigation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8227",children:"#8227"}),": the client redirect plugin preserves hash and querystring on redirect"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/2.2.0",children:"2.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>o});var n=r(27378);const a={},t=n.createContext(a);function o(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0a818389.217954cb.js b/assets/js/0a818389.217954cb.js new file mode 100644 index 000000000000..01f040c24160 --- /dev/null +++ b/assets/js/0a818389.217954cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23485],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),c=t(3620),l=t(44479),a=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,a._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=m(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[a,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:h;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=c[r].value;s!==t&&(a(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=f(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(P,w({},n,e))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(N,O(w({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),o=(t(27378),t(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:l(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>He});var r={};t.r(r),t.d(r,{ButtonExample:()=>E});var o=t(24246),s=t(27378),i=t(40624),c=t(29088),l=t(32711),a=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function m(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){f(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function N(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(N,{})]})}const C=e=>`${e};`;function D(e){var n,{children:t,transformCode:r}=e,s=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=m();var u;const h=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:a},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function I(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function B(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){I(e,n,t[n])}))}return e}function T(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function E(e){return(0,o.jsx)("button",T(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const Z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var H,M,_=t(89583),R=t(6324),W=t.n(R);function z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const A=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(Y=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){z(e,n,t[n])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Y,Object.getOwnPropertyDescriptors(U)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(U)).forEach((function(e){Object.defineProperty(Y,e,Object.getOwnPropertyDescriptor(U,e))})),Y);var Y,U;const $=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function X(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J($,n)}}(r,o),c=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),c.splice(p,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{W()(n).forEach((n=>{var t;null!==(t=(H=h)[M=n])&&void 0!==t||(H[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const G={codeBlockContainer:"codeBlockContainer_jDV4"};function Q(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(m());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Q(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,G.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ae(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e})),n)));return(0,o.jsxs)("span",ue(de({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ne({className:e,onClick:n,isEnabled:t}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:a),p=m(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(A))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:f,code:y}=X(e,{metastring:t,language:h,magicComments:d}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:f[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ne,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ve,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function De(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ie(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}const Ee=(Le=function(e){var{children:n}=e,t=Ie(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?Se:re;return(0,o.jsx)(l,De(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(D,Te({scope:Z},e)):(0,o.jsx)(Le,Te({},e))});var Le;function Ze(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function He(e){return(0,o.jsx)(Ee,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ze(e,n,t[n])}))}return e}({},e))}},37569:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),s=t(97555),i=t(61132),c=t(6698),l=t(38112);const a={id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},d="Code blocks",u={id:"guides/markdown-features/code-blocks",title:"Code blocks",description:"Handling code blocks in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/code-blocks",permalink:"/docs/markdown-features/code-blocks",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},sidebar:"docs",previous:{title:"Tabs",permalink:"/docs/markdown-features/tabs"},next:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"}},h={},p=[{value:"Code title",id:"code-title",level:2},{value:"Syntax highlighting",id:"syntax-highlighting",level:2},{value:"Theming",id:"theming",level:3},{value:"Supported Languages",id:"supported-languages",level:3},{value:"Line highlighting",id:"line-highlighting",level:2},{value:"Highlighting with comments",id:"highlighting-with-comments",level:3},{value:"Highlighting with metadata string",id:"highlighting-with-metadata-string",level:3},{value:"Custom magic comments",id:"custom-magic-comments",level:3},{value:"Line numbering",id:"line-numbering",level:2},{value:"Interactive code editor",id:"interactive-code-editor",level:2},{value:"Imports",id:"imports",level:3},{value:"Imperative Rendering (noInline)",id:"imperative-rendering-noinline",level:3},{value:"Using JSX markup in code blocks",id:"using-jsx-markup",level:2},{value:"Multi-language support code blocks",id:"multi-language-support-code-blocks",level:2},{value:"Docusaurus npm2yarn remark plugin",id:"npm2yarn-remark-plugin",level:3},{value:"Configuration",id:"npm2yarn-remark-plugin-configuration",level:4},{value:"Usage in JSX",id:"usage-in-jsx",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"code-blocks",children:"Code blocks"})}),"\n","\n",(0,r.jsx)(n.p,{children:"Code blocks within documentation are super-powered \ud83d\udcaa."}),"\n",(0,r.jsx)(n.h2,{id:"code-title",children:"Code title"}),"\n",(0,r.jsxs)(n.p,{children:["You can add a title to the code block by adding a ",(0,r.jsx)(n.code,{children:"title"})," key after the language (leave a space between them)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'```jsx title="/src/components/HelloCodeTitle.js"\nfunction HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n```\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="/src/components/HelloCodeTitle.js"',children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"syntax-highlighting",children:"Syntax highlighting"}),"\n",(0,r.jsxs)(n.p,{children:["Code blocks are text blocks wrapped around by strings of 3 backticks. You may check out ",(0,r.jsx)(n.a,{href:"https://github.com/mdx-js/specification",children:"this reference"})," for the specifications of MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nconsole.log('Every repo must come with a mascot.');\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Use the matching language meta string for your code block, and Docusaurus will pick up syntax highlighting automatically, powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"}),"."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"console.log('Every repo must come with a mascot.');\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"theming",children:"Theming"}),"\n",(0,r.jsxs)(n.p,{children:["By default, the Prism ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer#theming",children:"syntax highlighting theme"})," we use is ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"}),". You can change this to another theme by passing ",(0,r.jsx)(n.code,{children:"theme"})," field in ",(0,r.jsx)(n.code,{children:"prism"})," as ",(0,r.jsx)(n.code,{children:"themeConfig"})," in your docusaurus.config.js."]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you prefer to use the ",(0,r.jsx)(n.code,{children:"dracula"})," highlighting theme:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-next-line\n theme: prismThemes.dracula,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Because a Prism theme is just a JS object, you can also write your own theme if you are not satisfied with the default. Docusaurus enhances the ",(0,r.jsx)(n.code,{children:"github"})," and ",(0,r.jsx)(n.code,{children:"vsDark"})," themes to provide richer highlight, and you can check our implementations for the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismLight.ts",children:"light"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismDark.ts",children:"dark"})," code block themes."]}),"\n",(0,r.jsx)(n.h3,{id:"supported-languages",children:"Supported Languages"}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus comes with a subset of ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/generate-prism-languages/index.ts#L9-L23",children:"commonly used languages"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Some popular languages like Java, C#, or PHP are not enabled by default."})}),"\n",(0,r.jsxs)(n.p,{children:["To add syntax highlighting for any of the other ",(0,r.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"Prism-supported languages"}),", define it in an array of additional languages."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Each additional language has to be a valid Prism component name. For example, Prism would map the ",(0,r.jsx)(n.em,{children:"language"})," ",(0,r.jsx)(n.code,{children:"cs"})," to ",(0,r.jsx)(n.code,{children:"csharp"}),", but only ",(0,r.jsx)(n.code,{children:"prism-csharp.js"})," exists as a ",(0,r.jsx)(n.em,{children:"component"}),", so you need to use ",(0,r.jsx)(n.code,{children:"additionalLanguages: ['csharp']"}),". You can look into ",(0,r.jsx)(n.code,{children:"node_modules/prismjs/components"})," to find all components (languages) available."]})}),"\n",(0,r.jsx)(n.p,{children:"For example, if you want to add highlighting for the PowerShell language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['powershell'],\n },\n // ...\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["After adding ",(0,r.jsx)(n.code,{children:"additionalLanguages"}),", restart Docusaurus."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to add highlighting for languages not yet supported by Prism, you can swizzle ",(0,r.jsx)(n.code,{children:"prism-include-languages"}),":"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["It will produce ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," in your ",(0,r.jsx)(n.code,{children:"src/theme"})," folder. You can add highlighting support for custom languages by editing ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/prism-include-languages.js"',children:"const prismIncludeLanguages = (Prism) => {\n // ...\n\n additionalLanguages.forEach((lang) => {\n require(`prismjs/components/prism-${lang}`);\n });\n\n // highlight-next-line\n require('/path/to/your/prism-language-definition');\n\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can refer to ",(0,r.jsx)(n.a,{href:"https://github.com/PrismJS/prism/tree/master/components",children:"Prism's official language definitions"})," when you are writing your own language definitions."]}),"\n",(0,r.jsxs)(n.p,{children:["When adding a custom language definition, you do not need to add the language to the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," config array, since Docusaurus only looks up the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," strings in languages that Prism provides. Adding the language import in ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," is sufficient."]}),"\n",(0,r.jsx)(n.h2,{id:"line-highlighting",children:"Line highlighting"}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-comments",children:"Highlighting with comments"}),"\n",(0,r.jsxs)(n.p,{children:["You can use comments with ",(0,r.jsx)(n.code,{children:"highlight-next-line"}),", ",(0,r.jsx)(n.code,{children:"highlight-start"}),", and ",(0,r.jsx)(n.code,{children:"highlight-end"})," to select which lines are highlighted."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nfunction HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n"})})}),"\n",(0,r.jsx)(n.p,{children:"Supported commenting syntax:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Style"}),(0,r.jsx)(n.th,{children:"Syntax"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"C-style"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/* ... */"})," and ",(0,r.jsx)(n.code,{children:"// ..."})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"JSX-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{/* ... */}"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Bash-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"# ..."})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"HTML-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"\x3c!-- ... --\x3e"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["We will do our best to infer which set of comment styles to use based on the language, and default to allowing ",(0,r.jsx)(n.em,{children:"all"})," comment styles. If there's a comment style that is not currently supported, we are open to adding them! Pull requests welcome. Note that different comment styles have no semantic difference, only their content does."]}),"\n",(0,r.jsxs)(n.p,{children:["You can set your own background color for highlighted code line in your ",(0,r.jsx)(n.code,{children:"src/css/custom.css"})," which will better fit to your selected syntax highlighting theme. The color given below works for the default highlighting theme (Palenight), so if you are using another theme, you will have to tweak the color accordingly."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);\n}\n\n/* If you have a different syntax highlighting theme for dark mode. */\n[data-theme='dark'] {\n /* Color which works with dark mode syntax highlighting theme */\n --docusaurus-highlighted-code-line-bg: rgb(100, 100, 100);\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you also need to style the highlighted code line in some other way, you can target on ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"})," CSS class."]}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-metadata-string",children:"Highlighting with metadata string"}),"\n",(0,r.jsxs)(n.p,{children:["You can also specify highlighted line ranges within the language meta string (leave a space after the language). To highlight multiple lines, separate the line numbers by commas or use the range syntax to select a chunk of lines. This feature uses the ",(0,r.jsx)(n.code,{children:"parse-number-range"})," library and you can find ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/parse-numeric-range",children:"more syntax"})," on their project details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11}\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11}",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsxs)(n.admonition,{title:"prefer comments",type:"tip",children:[(0,r.jsx)(n.p,{children:"Prefer highlighting with comments where you can. By inlining highlight in the code, you don't have to manually count the lines if your code block becomes long. If you add/remove lines, you also don't have to offset your line ranges."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"- ```jsx {3}\n+ ```jsx {4}\n function HighlightSomeText(highlight) {\n if (highlight) {\n+ console.log('Highlighted text found');\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n }\n ```\n"})}),(0,r.jsx)(n.p,{children:"Below, we will introduce how the magic comment system can be extended to define custom directives and their functionalities. The magic comments would only be parsed if a highlight metastring is not present."})]}),"\n",(0,r.jsx)(n.h3,{id:"custom-magic-comments",children:"Custom magic comments"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"// highlight-next-line"})," and ",(0,r.jsx)(n.code,{children:"// highlight-start"}),' etc. are called "magic comments", because they will be parsed and removed, and their purposes are to add metadata to the next line, or the section that the pair of start- and end-comments enclose.']}),"\n",(0,r.jsxs)(n.p,{children:["You can declare custom magic comments through theme config. For example, you can register another magic comment that adds a ",(0,r.jsx)(n.code,{children:"code-block-error-line"})," class name:"]}),"\n",(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"docusaurus.config.js",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"export default {\n themeConfig: {\n prism: {\n magicComments: [\n // Remember to extend the default highlight class name as well!\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n // highlight-start\n {\n className: 'code-block-error-line',\n line: 'This will error',\n },\n // highlight-end\n ],\n },\n },\n};\n"})})}),(0,r.jsx)(i.Z,{value:"src/css/custom.css",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",children:".code-block-error-line {\n background-color: #ff000020;\n display: block;\n margin: 0 calc(-1 * var(--ifm-pre-padding));\n padding: 0 var(--ifm-pre-padding);\n border-left: 3px solid #ff000080;\n}\n"})})}),(0,r.jsx)(i.Z,{value:"myDoc.md",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"In JavaScript, trying to access properties on `null` will error.\n\n```js\nconst name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n```\n"})})})]}),"\n",(0,r.jsxs)(c.Z,{children:[(0,r.jsxs)(n.p,{children:["In JavaScript, trying to access properties on ",(0,r.jsx)(n.code,{children:"null"})," will error."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n"})})]}),"\n",(0,r.jsxs)(n.p,{children:["If you use number ranges in metastring (the ",(0,r.jsx)(n.code,{children:"{1,3-4}"})," syntax), Docusaurus will apply the ",(0,r.jsxs)(n.strong,{children:["first ",(0,r.jsx)(n.code,{children:"magicComments"})," entry"]}),"'s class name. This, by default, is ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"}),", but if you change the ",(0,r.jsx)(n.code,{children:"magicComments"})," config and use a different entry as the first one, the meaning of the metastring range will change as well."]}),"\n",(0,r.jsxs)(n.p,{children:["You can disable the default line highlighting comments with ",(0,r.jsx)(n.code,{children:"magicComments: []"}),". If there's no magic comment config, but Docusaurus encounters a code block containing a metastring range, it will error because there will be no class name to apply\u2014the highlighting class name, after all, is just a magic comment entry."]}),"\n",(0,r.jsxs)(n.p,{children:["Every magic comment entry will contain three keys: ",(0,r.jsx)(n.code,{children:"className"})," (required), ",(0,r.jsx)(n.code,{children:"line"}),", which applies to the directly next line, or ",(0,r.jsx)(n.code,{children:"block"})," (containing ",(0,r.jsx)(n.code,{children:"start"})," and ",(0,r.jsx)(n.code,{children:"end"}),"), which applies to the entire block enclosed by the two comments."]}),"\n",(0,r.jsxs)(n.p,{children:["Using CSS to target the class can already do a lot, but you can unlock the full potential of this feature through ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"}),"."]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Line"})," component will receive the list of class names, based on which you can conditionally render different markup."]}),"\n",(0,r.jsx)(n.h2,{id:"line-numbering",children:"Line numbering"}),"\n",(0,r.jsxs)(n.p,{children:["You can enable line numbering for your code block by using ",(0,r.jsx)(n.code,{children:"showLineNumbers"})," key within the language meta string (don't forget to add space directly before the key)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11} showLineNumbers\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11} showLineNumbers",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"interactive-code-editor",children:"Interactive code editor"}),"\n",(0,r.jsxs)(n.p,{children:["(Powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"React Live"}),")"]}),"\n",(0,r.jsxs)(n.p,{children:["You can create an interactive coding editor with the ",(0,r.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," plugin. First, add the plugin to your package."]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["You will also need to add the plugin to your ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"{3}",children:"export default {\n // ...\n themes: ['@docusaurus/theme-live-codeblock'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To use the plugin, create a code block with ",(0,r.jsx)(n.code,{children:"live"})," attached to the language meta string."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live\nfunction Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n```\n"})}),"\n",(0,r.jsx)(n.p,{children:"The code block will be rendered as an interactive editor. Changes to the code will reflect on the result panel live."}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imports",children:"Imports"}),"\n",(0,r.jsx)(n.admonition,{title:"react-live and imports",type:"warning",children:(0,r.jsx)(n.p,{children:"It is not possible to import components directly from the react-live code editor, you have to define available imports upfront."})}),"\n",(0,r.jsx)(n.p,{children:"By default, all React imports are available. If you need more imports available, swizzle the react-live scope:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope -- --eject\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/ReactLiveScope/index.js"',children:"import React from 'react';\n\n// highlight-start\nconst ButtonExample = (props) => (\n <button\n {...props}\n style={{\n backgroundColor: 'white',\n color: 'black',\n border: 'solid red',\n borderRadius: 20,\n padding: 10,\n cursor: 'pointer',\n ...props.style,\n }}\n />\n);\n// highlight-end\n\n// Add react-live imports you need here\nconst ReactLiveScope = {\n React,\n ...React,\n // highlight-next-line\n ButtonExample,\n};\n\nexport default ReactLiveScope;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"ButtonExample"})," component is now available to use:"]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function MyPlayground(props) {\n return (\n <div>\n <ButtonExample onClick={() => alert('hey!')}>Click me</ButtonExample>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imperative-rendering-noinline",children:"Imperative Rendering (noInline)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"noInline"})," option should be used to avoid errors when your code spans multiple components or variables."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live noInline\nconst project = 'Docusaurus';\n\nconst Greeting = () => <p>Hello {project}!</p>;\n\nrender(<Greeting />);\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Unlike an ordinary interactive code block, when using ",(0,r.jsx)(n.code,{children:"noInline"})," React Live won't wrap your code in an inline function to render it."]}),"\n",(0,r.jsxs)(n.p,{children:["You will need to explicitly call ",(0,r.jsx)(n.code,{children:"render()"})," at the end of your code to display the output."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live noInline",live:!0,children:'const project = "Docusaurus";\n\nconst Greeting = () => (\n <p>Hello {project}!</p>\n);\n\nrender(\n <Greeting />\n);\n'})})}),"\n",(0,r.jsx)(n.h2,{id:"using-jsx-markup",children:"Using JSX markup in code blocks"}),"\n",(0,r.jsx)(n.p,{children:"Code block in Markdown always preserves its content as plain text, meaning you can't do something like:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type EditUrlFunction = (params: {\n // This doesn\'t turn into a link (for good reason!)\n version: <a href="/docs/versioning">Version</a>;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n'})}),"\n",(0,r.jsxs)(n.p,{children:["If you want to embed HTML markup such as anchor links or bold type, you can use the ",(0,r.jsx)(n.code,{children:"<pre>"})," tag, ",(0,r.jsx)(n.code,{children:"<code>"})," tag, or ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"<pre>\n <b>Input: </b>1 2 3 4{'\\n'}\n <b>Output: </b>\"366300745\"{'\\n'}\n</pre>\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)("pre",{children:[(0,r.jsx)("b",{children:"Input: "}),"1 2 3 4\n",(0,r.jsx)("b",{children:"Output: "}),'"366300745"\n']})}),"\n",(0,r.jsx)(n.admonition,{title:"MDX is whitespace insensitive",type:"warning",children:(0,r.jsxs)(n.p,{children:["MDX is in line with JSX behavior: line break characters, even when inside ",(0,r.jsx)(n.code,{children:"<pre>"}),", are turned into spaces. You have to explicitly write the new line character for it to be printed out."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Syntax highlighting only works on plain strings. Docusaurus will not attempt to parse code block content containing JSX children."})}),"\n",(0,r.jsx)(n.h2,{id:"multi-language-support-code-blocks",children:"Multi-language support code blocks"}),"\n",(0,r.jsx)(n.p,{children:"With MDX, you can easily create interactive components within your documentation, for example, to display code in multiple programming languages and switch between them using a tabs component."}),"\n",(0,r.jsxs)(n.p,{children:["Instead of implementing a dedicated component for multi-language support code blocks, we've implemented a general-purpose ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,r.jsx)(n.code,{children:"<Tabs>"})})," component in the classic theme so that you can use it for other non-code scenarios as well."]}),"\n",(0,r.jsxs)(n.p,{children:["The following example is how you can have multi-language code tabs in your docs. Note that the empty lines above and below each language block are ",(0,r.jsx)(n.strong,{children:"intentional"}),". This is a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react#markdown-and-jsx-interoperability",children:"current limitation of MDX"}),": you have to leave empty lines around Markdown syntax for the MDX parser to know that it's Markdown syntax and not JSX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n<TabItem value="js" label="JavaScript">\n\n```js\nfunction helloWorld() {\n console.log(\'Hello, world!\');\n}\n```\n\n</TabItem>\n<TabItem value="py" label="Python">\n\n```py\ndef hello_world():\n print("Hello, world!")\n```\n\n</TabItem>\n<TabItem value="java" label="Java">\n\n```java\nclass HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n```\n\n</TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(n.p,{children:"And you will get the following:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"js",label:"JavaScript",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function helloWorld() {\n console.log('Hello, world!');\n}\n"})})}),(0,r.jsx)(i.Z,{value:"py",label:"Python",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-py",children:'def hello_world():\n print("Hello, world!")\n'})})}),(0,r.jsx)(i.Z,{value:"java",label:"Java",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})})})]})}),"\n",(0,r.jsxs)(n.p,{children:["If you have multiple of these multi-language code tabs, and you want to sync the selection across the tab instances, refer to the ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs#syncing-tab-choices",children:"Syncing tab choices section"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"npm2yarn-remark-plugin",children:"Docusaurus npm2yarn remark plugin"}),"\n",(0,r.jsx)(n.p,{children:"Displaying CLI commands in both npm and Yarn is a very common need, for example:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/remark-plugin-npm2yarn\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus provides such a utility out of the box, freeing you from using the ",(0,r.jsx)(n.code,{children:"Tabs"})," component every time. To enable this feature, first install the ",(0,r.jsx)(n.code,{children:"@docusaurus/remark-plugin-npm2yarn"})," package as above, and then in ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),", for the plugins where you need this feature (doc, blog, pages, etc.), register it in the ",(0,r.jsx)(n.code,{children:"remarkPlugins"})," option. (See ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#ex-config",children:"Docs configuration"})," for more details on configuration format)"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n remarkPlugins: [\n [require('@docusaurus/remark-plugin-npm2yarn'), {sync: true}],\n ],\n // highlight-end\n },\n pages: {\n // highlight-next-line\n remarkPlugins: [require('@docusaurus/remark-plugin-npm2yarn')],\n },\n blog: {\n // highlight-start\n remarkPlugins: [\n [\n require('@docusaurus/remark-plugin-npm2yarn'),\n {converters: ['pnpm']},\n ],\n ],\n // highlight-end\n // ...\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And then use it by adding the ",(0,r.jsx)(n.code,{children:"npm2yarn"})," key to the code block:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```bash npm2yarn\nnpm install @docusaurus/remark-plugin-npm2yarn\n```\n"})}),"\n",(0,r.jsx)(n.h4,{id:"npm2yarn-remark-plugin-configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Option"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to sync the selected converter across all code blocks."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"converters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"array"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"'yarn'"}),", ",(0,r.jsx)(n.code,{children:"'pnpm'"})]}),(0,r.jsx)(n.td,{children:"The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"usage-in-jsx",children:"Usage in JSX"}),"\n",(0,r.jsxs)(n.p,{children:["Outside of Markdown, you can use the ",(0,r.jsx)(n.code,{children:"@theme/CodeBlock"})," component to get the same output."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import CodeBlock from \'@theme/CodeBlock\';\n\nexport default function MyReactPage() {\n return (\n <div>\n {/* highlight-start */}\n <CodeBlock\n language="jsx"\n title="/src/components/HelloCodeTitle.js"\n showLineNumbers>\n {`function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}`}\n </CodeBlock>\n {/* highlight-end */}\n </div>\n );\n}\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(l.Z,{language:"jsx",title:"/src/components/HelloCodeTitle.js",showLineNumbers:!0,children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}"})}),"\n",(0,r.jsxs)(n.p,{children:["The props accepted are ",(0,r.jsx)(n.code,{children:"language"}),", ",(0,r.jsx)(n.code,{children:"title"})," and ",(0,r.jsx)(n.code,{children:"showLineNumbers"}),", in the same way as you write Markdown code blocks."]}),"\n",(0,r.jsxs)(n.p,{children:["Although discouraged, you can also pass in a ",(0,r.jsx)(n.code,{children:"metastring"})," prop like ",(0,r.jsx)(n.code,{children:"metastring='{1-2} title=\"/src/components/HelloCodeTitle.js\" showLineNumbers'"}),", which is how Markdown code blocks are handled under the hood. However, we recommend you ",(0,r.jsx)(n.a,{href:"#highlighting-with-comments",children:"use comments for highlighting lines"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["As ",(0,r.jsx)(n.a,{href:"#using-jsx-markup",children:"previously stated"}),", syntax highlighting is only applied when the children is a simple string."]})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/0a818389.608cc21a.js b/assets/js/0a818389.608cc21a.js deleted file mode 100644 index f83be656192e..000000000000 --- a/assets/js/0a818389.608cc21a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23485],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),c=t(3620),l=t(44479),a=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,a._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=m(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[a,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:h;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=c[r].value;s!==t&&(a(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=f(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(P,w({},n,e))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(N,O(w({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),o=(t(27378),t(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:l(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>He});var r={};t.r(r),t.d(r,{ButtonExample:()=>E});var o=t(24246),s=t(27378),i=t(40624),c=t(29088),l=t(32711),a=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function m(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){f(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function N(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(N,{})]})}const C=e=>`${e};`;function D(e){var n,{children:t,transformCode:r}=e,s=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=m();var u;const h=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:a},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function I(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function B(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){I(e,n,t[n])}))}return e}function T(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function E(e){return(0,o.jsx)("button",T(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const Z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var H,M,_=t(89583),R=t(6324),W=t.n(R);function z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const A=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(Y=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){z(e,n,t[n])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Y,Object.getOwnPropertyDescriptors(U)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(U)).forEach((function(e){Object.defineProperty(Y,e,Object.getOwnPropertyDescriptor(U,e))})),Y);var Y,U;const $=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function X(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J($,n)}}(r,o),c=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),c.splice(p,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{W()(n).forEach((n=>{var t;null!==(t=(H=h)[M=n])&&void 0!==t||(H[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const G={codeBlockContainer:"codeBlockContainer_jDV4"};function Q(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(m());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Q(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,G.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ae(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e})),n)));return(0,o.jsxs)("span",ue(de({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ne({className:e,onClick:n,isEnabled:t}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:a),p=m(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(A))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:f,code:y}=X(e,{metastring:t,language:h,magicComments:d}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:f[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ne,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ve,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function De(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ie(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}const Ee=(Le=function(e){var{children:n}=e,t=Ie(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?Se:re;return(0,o.jsx)(l,De(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(D,Te({scope:Z},e)):(0,o.jsx)(Le,Te({},e))});var Le;function Ze(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function He(e){return(0,o.jsx)(Ee,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ze(e,n,t[n])}))}return e}({},e))}},37569:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),s=t(97555),i=t(61132),c=t(6698),l=t(38112);const a={id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},d="Code blocks",u={id:"guides/markdown-features/code-blocks",title:"Code blocks",description:"Handling code blocks in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/code-blocks",permalink:"/docs/markdown-features/code-blocks",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},sidebar:"docs",previous:{title:"Tabs",permalink:"/docs/markdown-features/tabs"},next:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"}},h={},p=[{value:"Code title",id:"code-title",level:2},{value:"Syntax highlighting",id:"syntax-highlighting",level:2},{value:"Theming",id:"theming",level:3},{value:"Supported Languages",id:"supported-languages",level:3},{value:"Line highlighting",id:"line-highlighting",level:2},{value:"Highlighting with comments",id:"highlighting-with-comments",level:3},{value:"Highlighting with metadata string",id:"highlighting-with-metadata-string",level:3},{value:"Custom magic comments",id:"custom-magic-comments",level:3},{value:"Line numbering",id:"line-numbering",level:2},{value:"Interactive code editor",id:"interactive-code-editor",level:2},{value:"Imports",id:"imports",level:3},{value:"Imperative Rendering (noInline)",id:"imperative-rendering-noinline",level:3},{value:"Using JSX markup in code blocks",id:"using-jsx-markup",level:2},{value:"Multi-language support code blocks",id:"multi-language-support-code-blocks",level:2},{value:"Docusaurus npm2yarn remark plugin",id:"npm2yarn-remark-plugin",level:3},{value:"Configuration",id:"npm2yarn-remark-plugin-configuration",level:4},{value:"Usage in JSX",id:"usage-in-jsx",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"code-blocks",children:"Code blocks"})}),"\n","\n",(0,r.jsx)(n.p,{children:"Code blocks within documentation are super-powered \ud83d\udcaa."}),"\n",(0,r.jsx)(n.h2,{id:"code-title",children:"Code title"}),"\n",(0,r.jsxs)(n.p,{children:["You can add a title to the code block by adding a ",(0,r.jsx)(n.code,{children:"title"})," key after the language (leave a space between them)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'```jsx title="/src/components/HelloCodeTitle.js"\nfunction HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n```\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="/src/components/HelloCodeTitle.js"',children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"syntax-highlighting",children:"Syntax highlighting"}),"\n",(0,r.jsxs)(n.p,{children:["Code blocks are text blocks wrapped around by strings of 3 backticks. You may check out ",(0,r.jsx)(n.a,{href:"https://github.com/mdx-js/specification",children:"this reference"})," for the specifications of MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nconsole.log('Every repo must come with a mascot.');\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Use the matching language meta string for your code block, and Docusaurus will pick up syntax highlighting automatically, powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"}),"."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"console.log('Every repo must come with a mascot.');\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"theming",children:"Theming"}),"\n",(0,r.jsxs)(n.p,{children:["By default, the Prism ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer#theming",children:"syntax highlighting theme"})," we use is ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"}),". You can change this to another theme by passing ",(0,r.jsx)(n.code,{children:"theme"})," field in ",(0,r.jsx)(n.code,{children:"prism"})," as ",(0,r.jsx)(n.code,{children:"themeConfig"})," in your docusaurus.config.js."]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you prefer to use the ",(0,r.jsx)(n.code,{children:"dracula"})," highlighting theme:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-next-line\n theme: prismThemes.dracula,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Because a Prism theme is just a JS object, you can also write your own theme if you are not satisfied with the default. Docusaurus enhances the ",(0,r.jsx)(n.code,{children:"github"})," and ",(0,r.jsx)(n.code,{children:"vsDark"})," themes to provide richer highlight, and you can check our implementations for the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismLight.ts",children:"light"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismDark.ts",children:"dark"})," code block themes."]}),"\n",(0,r.jsx)(n.h3,{id:"supported-languages",children:"Supported Languages"}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus comes with a subset of ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/generate-prism-languages/index.ts#L9-L23",children:"commonly used languages"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Some popular languages like Java, C#, or PHP are not enabled by default."})}),"\n",(0,r.jsxs)(n.p,{children:["To add syntax highlighting for any of the other ",(0,r.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"Prism-supported languages"}),", define it in an array of additional languages."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Each additional language has to be a valid Prism component name. For example, Prism would map the ",(0,r.jsx)(n.em,{children:"language"})," ",(0,r.jsx)(n.code,{children:"cs"})," to ",(0,r.jsx)(n.code,{children:"csharp"}),", but only ",(0,r.jsx)(n.code,{children:"prism-csharp.js"})," exists as a ",(0,r.jsx)(n.em,{children:"component"}),", so you need to use ",(0,r.jsx)(n.code,{children:"additionalLanguages: ['csharp']"}),". You can look into ",(0,r.jsx)(n.code,{children:"node_modules/prismjs/components"})," to find all components (languages) available."]})}),"\n",(0,r.jsx)(n.p,{children:"For example, if you want to add highlighting for the PowerShell language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['powershell'],\n },\n // ...\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["After adding ",(0,r.jsx)(n.code,{children:"additionalLanguages"}),", restart Docusaurus."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to add highlighting for languages not yet supported by Prism, you can swizzle ",(0,r.jsx)(n.code,{children:"prism-include-languages"}),":"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["It will produce ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," in your ",(0,r.jsx)(n.code,{children:"src/theme"})," folder. You can add highlighting support for custom languages by editing ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/prism-include-languages.js"',children:"const prismIncludeLanguages = (Prism) => {\n // ...\n\n additionalLanguages.forEach((lang) => {\n require(`prismjs/components/prism-${lang}`);\n });\n\n // highlight-next-line\n require('/path/to/your/prism-language-definition');\n\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can refer to ",(0,r.jsx)(n.a,{href:"https://github.com/PrismJS/prism/tree/master/components",children:"Prism's official language definitions"})," when you are writing your own language definitions."]}),"\n",(0,r.jsxs)(n.p,{children:["When adding a custom language definition, you do not need to add the language to the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," config array, since Docusaurus only looks up the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," strings in languages that Prism provides. Adding the language import in ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," is sufficient."]}),"\n",(0,r.jsx)(n.h2,{id:"line-highlighting",children:"Line highlighting"}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-comments",children:"Highlighting with comments"}),"\n",(0,r.jsxs)(n.p,{children:["You can use comments with ",(0,r.jsx)(n.code,{children:"highlight-next-line"}),", ",(0,r.jsx)(n.code,{children:"highlight-start"}),", and ",(0,r.jsx)(n.code,{children:"highlight-end"})," to select which lines are highlighted."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nfunction HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n"})})}),"\n",(0,r.jsx)(n.p,{children:"Supported commenting syntax:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Style"}),(0,r.jsx)(n.th,{children:"Syntax"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"C-style"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/* ... */"})," and ",(0,r.jsx)(n.code,{children:"// ..."})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"JSX-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{/* ... */}"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Bash-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"# ..."})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"HTML-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"\x3c!-- ... --\x3e"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["We will do our best to infer which set of comment styles to use based on the language, and default to allowing ",(0,r.jsx)(n.em,{children:"all"})," comment styles. If there's a comment style that is not currently supported, we are open to adding them! Pull requests welcome. Note that different comment styles have no semantic difference, only their content does."]}),"\n",(0,r.jsxs)(n.p,{children:["You can set your own background color for highlighted code line in your ",(0,r.jsx)(n.code,{children:"src/css/custom.css"})," which will better fit to your selected syntax highlighting theme. The color given below works for the default highlighting theme (Palenight), so if you are using another theme, you will have to tweak the color accordingly."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);\n}\n\n/* If you have a different syntax highlighting theme for dark mode. */\n[data-theme='dark'] {\n /* Color which works with dark mode syntax highlighting theme */\n --docusaurus-highlighted-code-line-bg: rgb(100, 100, 100);\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you also need to style the highlighted code line in some other way, you can target on ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"})," CSS class."]}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-metadata-string",children:"Highlighting with metadata string"}),"\n",(0,r.jsxs)(n.p,{children:["You can also specify highlighted line ranges within the language meta string (leave a space after the language). To highlight multiple lines, separate the line numbers by commas or use the range syntax to select a chunk of lines. This feature uses the ",(0,r.jsx)(n.code,{children:"parse-number-range"})," library and you can find ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/parse-numeric-range",children:"more syntax"})," on their project details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11}\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11}",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsxs)(n.admonition,{title:"prefer comments",type:"tip",children:[(0,r.jsx)(n.p,{children:"Prefer highlighting with comments where you can. By inlining highlight in the code, you don't have to manually count the lines if your code block becomes long. If you add/remove lines, you also don't have to offset your line ranges."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"- ```jsx {3}\n+ ```jsx {4}\n function HighlightSomeText(highlight) {\n if (highlight) {\n+ console.log('Highlighted text found');\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n }\n ```\n"})}),(0,r.jsx)(n.p,{children:"Below, we will introduce how the magic comment system can be extended to define custom directives and their functionalities. The magic comments would only be parsed if a highlight metastring is not present."})]}),"\n",(0,r.jsx)(n.h3,{id:"custom-magic-comments",children:"Custom magic comments"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"// highlight-next-line"})," and ",(0,r.jsx)(n.code,{children:"// highlight-start"}),' etc. are called "magic comments", because they will be parsed and removed, and their purposes are to add metadata to the next line, or the section that the pair of start- and end-comments enclose.']}),"\n",(0,r.jsxs)(n.p,{children:["You can declare custom magic comments through theme config. For example, you can register another magic comment that adds a ",(0,r.jsx)(n.code,{children:"code-block-error-line"})," class name:"]}),"\n",(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"docusaurus.config.js",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"export default {\n themeConfig: {\n prism: {\n magicComments: [\n // Remember to extend the default highlight class name as well!\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n // highlight-start\n {\n className: 'code-block-error-line',\n line: 'This will error',\n },\n // highlight-end\n ],\n },\n },\n};\n"})})}),(0,r.jsx)(i.Z,{value:"src/css/custom.css",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",children:".code-block-error-line {\n background-color: #ff000020;\n display: block;\n margin: 0 calc(-1 * var(--ifm-pre-padding));\n padding: 0 var(--ifm-pre-padding);\n border-left: 3px solid #ff000080;\n}\n"})})}),(0,r.jsx)(i.Z,{value:"myDoc.md",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"In JavaScript, trying to access properties on `null` will error.\n\n```js\nconst name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n```\n"})})})]}),"\n",(0,r.jsxs)(c.Z,{children:[(0,r.jsxs)(n.p,{children:["In JavaScript, trying to access properties on ",(0,r.jsx)(n.code,{children:"null"})," will error."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n"})})]}),"\n",(0,r.jsxs)(n.p,{children:["If you use number ranges in metastring (the ",(0,r.jsx)(n.code,{children:"{1,3-4}"})," syntax), Docusaurus will apply the ",(0,r.jsxs)(n.strong,{children:["first ",(0,r.jsx)(n.code,{children:"magicComments"})," entry"]}),"'s class name. This, by default, is ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"}),", but if you change the ",(0,r.jsx)(n.code,{children:"magicComments"})," config and use a different entry as the first one, the meaning of the metastring range will change as well."]}),"\n",(0,r.jsxs)(n.p,{children:["You can disable the default line highlighting comments with ",(0,r.jsx)(n.code,{children:"magicComments: []"}),". If there's no magic comment config, but Docusaurus encounters a code block containing a metastring range, it will error because there will be no class name to apply\u2014the highlighting class name, after all, is just a magic comment entry."]}),"\n",(0,r.jsxs)(n.p,{children:["Every magic comment entry will contain three keys: ",(0,r.jsx)(n.code,{children:"className"})," (required), ",(0,r.jsx)(n.code,{children:"line"}),", which applies to the directly next line, or ",(0,r.jsx)(n.code,{children:"block"})," (containing ",(0,r.jsx)(n.code,{children:"start"})," and ",(0,r.jsx)(n.code,{children:"end"}),"), which applies to the entire block enclosed by the two comments."]}),"\n",(0,r.jsxs)(n.p,{children:["Using CSS to target the class can already do a lot, but you can unlock the full potential of this feature through ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"}),"."]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Line"})," component will receive the list of class names, based on which you can conditionally render different markup."]}),"\n",(0,r.jsx)(n.h2,{id:"line-numbering",children:"Line numbering"}),"\n",(0,r.jsxs)(n.p,{children:["You can enable line numbering for your code block by using ",(0,r.jsx)(n.code,{children:"showLineNumbers"})," key within the language meta string (don't forget to add space directly before the key)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11} showLineNumbers\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11} showLineNumbers",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"interactive-code-editor",children:"Interactive code editor"}),"\n",(0,r.jsxs)(n.p,{children:["(Powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"React Live"}),")"]}),"\n",(0,r.jsxs)(n.p,{children:["You can create an interactive coding editor with the ",(0,r.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," plugin. First, add the plugin to your package."]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["You will also need to add the plugin to your ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"{3}",children:"export default {\n // ...\n themes: ['@docusaurus/theme-live-codeblock'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To use the plugin, create a code block with ",(0,r.jsx)(n.code,{children:"live"})," attached to the language meta string."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live\nfunction Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n```\n"})}),"\n",(0,r.jsx)(n.p,{children:"The code block will be rendered as an interactive editor. Changes to the code will reflect on the result panel live."}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imports",children:"Imports"}),"\n",(0,r.jsx)(n.admonition,{title:"react-live and imports",type:"warning",children:(0,r.jsx)(n.p,{children:"It is not possible to import components directly from the react-live code editor, you have to define available imports upfront."})}),"\n",(0,r.jsx)(n.p,{children:"By default, all React imports are available. If you need more imports available, swizzle the react-live scope:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope -- --eject\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/ReactLiveScope/index.js"',children:"import React from 'react';\n\n// highlight-start\nconst ButtonExample = (props) => (\n <button\n {...props}\n style={{\n backgroundColor: 'white',\n color: 'black',\n border: 'solid red',\n borderRadius: 20,\n padding: 10,\n cursor: 'pointer',\n ...props.style,\n }}\n />\n);\n// highlight-end\n\n// Add react-live imports you need here\nconst ReactLiveScope = {\n React,\n ...React,\n // highlight-next-line\n ButtonExample,\n};\n\nexport default ReactLiveScope;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"ButtonExample"})," component is now available to use:"]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function MyPlayground(props) {\n return (\n <div>\n <ButtonExample onClick={() => alert('hey!')}>Click me</ButtonExample>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imperative-rendering-noinline",children:"Imperative Rendering (noInline)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"noInline"})," option should be used to avoid errors when your code spans multiple components or variables."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live noInline\nconst project = 'Docusaurus';\n\nconst Greeting = () => <p>Hello {project}!</p>;\n\nrender(<Greeting />);\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Unlike an ordinary interactive code block, when using ",(0,r.jsx)(n.code,{children:"noInline"})," React Live won't wrap your code in an inline function to render it."]}),"\n",(0,r.jsxs)(n.p,{children:["You will need to explicitly call ",(0,r.jsx)(n.code,{children:"render()"})," at the end of your code to display the output."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live noInline",live:!0,children:'const project = "Docusaurus";\n\nconst Greeting = () => (\n <p>Hello {project}!</p>\n);\n\nrender(\n <Greeting />\n);\n'})})}),"\n",(0,r.jsx)(n.h2,{id:"using-jsx-markup",children:"Using JSX markup in code blocks"}),"\n",(0,r.jsx)(n.p,{children:"Code block in Markdown always preserves its content as plain text, meaning you can't do something like:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type EditUrlFunction = (params: {\n // This doesn\'t turn into a link (for good reason!)\n version: <a href="/docs/versioning">Version</a>;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n'})}),"\n",(0,r.jsxs)(n.p,{children:["If you want to embed HTML markup such as anchor links or bold type, you can use the ",(0,r.jsx)(n.code,{children:"<pre>"})," tag, ",(0,r.jsx)(n.code,{children:"<code>"})," tag, or ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"<pre>\n <b>Input: </b>1 2 3 4{'\\n'}\n <b>Output: </b>\"366300745\"{'\\n'}\n</pre>\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)("pre",{children:[(0,r.jsx)("b",{children:"Input: "}),"1 2 3 4\n",(0,r.jsx)("b",{children:"Output: "}),'"366300745"\n']})}),"\n",(0,r.jsx)(n.admonition,{title:"MDX is whitespace insensitive",type:"warning",children:(0,r.jsxs)(n.p,{children:["MDX is in line with JSX behavior: line break characters, even when inside ",(0,r.jsx)(n.code,{children:"<pre>"}),", are turned into spaces. You have to explicitly write the new line character for it to be printed out."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Syntax highlighting only works on plain strings. Docusaurus will not attempt to parse code block content containing JSX children."})}),"\n",(0,r.jsx)(n.h2,{id:"multi-language-support-code-blocks",children:"Multi-language support code blocks"}),"\n",(0,r.jsx)(n.p,{children:"With MDX, you can easily create interactive components within your documentation, for example, to display code in multiple programming languages and switch between them using a tabs component."}),"\n",(0,r.jsxs)(n.p,{children:["Instead of implementing a dedicated component for multi-language support code blocks, we've implemented a general-purpose ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,r.jsx)(n.code,{children:"<Tabs>"})})," component in the classic theme so that you can use it for other non-code scenarios as well."]}),"\n",(0,r.jsxs)(n.p,{children:["The following example is how you can have multi-language code tabs in your docs. Note that the empty lines above and below each language block are ",(0,r.jsx)(n.strong,{children:"intentional"}),". This is a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react#markdown-and-jsx-interoperability",children:"current limitation of MDX"}),": you have to leave empty lines around Markdown syntax for the MDX parser to know that it's Markdown syntax and not JSX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n<TabItem value="js" label="JavaScript">\n\n```js\nfunction helloWorld() {\n console.log(\'Hello, world!\');\n}\n```\n\n</TabItem>\n<TabItem value="py" label="Python">\n\n```py\ndef hello_world():\n print("Hello, world!")\n```\n\n</TabItem>\n<TabItem value="java" label="Java">\n\n```java\nclass HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n```\n\n</TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(n.p,{children:"And you will get the following:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"js",label:"JavaScript",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function helloWorld() {\n console.log('Hello, world!');\n}\n"})})}),(0,r.jsx)(i.Z,{value:"py",label:"Python",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-py",children:'def hello_world():\n print("Hello, world!")\n'})})}),(0,r.jsx)(i.Z,{value:"java",label:"Java",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})})})]})}),"\n",(0,r.jsxs)(n.p,{children:["If you have multiple of these multi-language code tabs, and you want to sync the selection across the tab instances, refer to the ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs#syncing-tab-choices",children:"Syncing tab choices section"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"npm2yarn-remark-plugin",children:"Docusaurus npm2yarn remark plugin"}),"\n",(0,r.jsx)(n.p,{children:"Displaying CLI commands in both npm and Yarn is a very common need, for example:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/remark-plugin-npm2yarn\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus provides such a utility out of the box, freeing you from using the ",(0,r.jsx)(n.code,{children:"Tabs"})," component every time. To enable this feature, first install the ",(0,r.jsx)(n.code,{children:"@docusaurus/remark-plugin-npm2yarn"})," package as above, and then in ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),", for the plugins where you need this feature (doc, blog, pages, etc.), register it in the ",(0,r.jsx)(n.code,{children:"remarkPlugins"})," option. (See ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#ex-config",children:"Docs configuration"})," for more details on configuration format)"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n remarkPlugins: [\n [require('@docusaurus/remark-plugin-npm2yarn'), {sync: true}],\n ],\n // highlight-end\n },\n pages: {\n // highlight-next-line\n remarkPlugins: [require('@docusaurus/remark-plugin-npm2yarn')],\n },\n blog: {\n // highlight-start\n remarkPlugins: [\n [\n require('@docusaurus/remark-plugin-npm2yarn'),\n {converters: ['pnpm']},\n ],\n ],\n // highlight-end\n // ...\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And then use it by adding the ",(0,r.jsx)(n.code,{children:"npm2yarn"})," key to the code block:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```bash npm2yarn\nnpm install @docusaurus/remark-plugin-npm2yarn\n```\n"})}),"\n",(0,r.jsx)(n.h4,{id:"npm2yarn-remark-plugin-configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Option"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to sync the selected converter across all code blocks."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"converters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"array"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"'yarn'"}),", ",(0,r.jsx)(n.code,{children:"'pnpm'"})]}),(0,r.jsx)(n.td,{children:"The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"usage-in-jsx",children:"Usage in JSX"}),"\n",(0,r.jsxs)(n.p,{children:["Outside of Markdown, you can use the ",(0,r.jsx)(n.code,{children:"@theme/CodeBlock"})," component to get the same output."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import CodeBlock from \'@theme/CodeBlock\';\n\nexport default function MyReactPage() {\n return (\n <div>\n {/* highlight-start */}\n <CodeBlock\n language="jsx"\n title="/src/components/HelloCodeTitle.js"\n showLineNumbers>\n {`function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}`}\n </CodeBlock>\n {/* highlight-end */}\n </div>\n );\n}\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(l.Z,{language:"jsx",title:"/src/components/HelloCodeTitle.js",showLineNumbers:!0,children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}"})}),"\n",(0,r.jsxs)(n.p,{children:["The props accepted are ",(0,r.jsx)(n.code,{children:"language"}),", ",(0,r.jsx)(n.code,{children:"title"})," and ",(0,r.jsx)(n.code,{children:"showLineNumbers"}),", in the same way as you write Markdown code blocks."]}),"\n",(0,r.jsxs)(n.p,{children:["Although discouraged, you can also pass in a ",(0,r.jsx)(n.code,{children:"metastring"})," prop like ",(0,r.jsx)(n.code,{children:"metastring='{1-2} title=\"/src/components/HelloCodeTitle.js\" showLineNumbers'"}),", which is how Markdown code blocks are handled under the hood. However, we recommend you ",(0,r.jsx)(n.a,{href:"#highlighting-with-comments",children:"use comments for highlighting lines"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["As ",(0,r.jsx)(n.a,{href:"#using-jsx-markup",children:"previously stated"}),", syntax highlighting is only applied when the children is a simple string."]})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/0b6cd89a.bdb8d8c6.js b/assets/js/0b6cd89a.89d93ce3.js similarity index 50% rename from assets/js/0b6cd89a.bdb8d8c6.js rename to assets/js/0b6cd89a.89d93ce3.js index 33f00f42cbc7..0a47a1ddf071 100644 --- a/assets/js/0b6cd89a.bdb8d8c6.js +++ b/assets/js/0b6cd89a.89d93ce3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39987],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),s=t(27378),i=t(40624),o=t(75527),c=t(3620),l=t(44479),d=t(62821),a=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function x(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,d._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,o]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=x(e),[o,c]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[d,a]=b({queryString:t,groupId:r}),[h,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=d?d:h;return f({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),a(e),j(e)}),[a,j,i]),tabValues:i}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),a=e=>{const n=e.currentTarget,r=l.indexOf(n),i=c[r].value;i!==t&&(d(n),s(i))},u=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(O({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:a},s),{className:(0,i.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=g(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,O({},n,e)),(0,r.jsx)(k,O({},n,e))]})}function S(e){const n=(0,m.Z)();return(0,r.jsx)(D,w(O({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(29088));function i({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),i=t(80474),o=t(3620);const c={apiTable:"apiTable_e8hp"};function l({name:e,children:n},t){const c=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),l=e?`${e}-${c}`:c,d=`#${l}`,a=(0,o.k6)();return(0,i.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:a.location.hash===d?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(d)},onKeyDown:e=>{"Enter"===e.key&&a.push(d)},children:n.props.children})}const d=s.forwardRef(l);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,i]=s.Children.toArray(e.props.children),o=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=o.current)||void 0===e||e.focus()}),[o]);const l=s.Children.map(i.props.children,(e=>(0,r.jsx)(d,{name:n,ref:o,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[t,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),s=(t(27378),t(41428)),i=t(92053),o=t(36712),c=t(97555),l=t(61132),d=t(38112);const a=void 0;function u({code:e,pluginName:n,presetOptionName:t}){const u=(0,i.zu)(a).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,o.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${u}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(o.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,o.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Re});var r={};t.r(r),t.d(r,{ButtonExample:()=>_});var s=t(24246),i=t(27378),o=t(40624),c=t(29088),l=t(32711),d=t(36712),a=t(4423),u=t(94544),h=t(30691),j=t(78844),p=t(73919);function x(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var f=t(88941);const b={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){g(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,o.Z)(b.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(u.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(f.Z,{fallback:e=>(0,s.jsx)(h.Ac,m({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:b.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function D(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:b.playgroundEditor},String(e))}function S(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,i=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:o}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:c}}=o,d=x();var u;const h=null!==(u=null===(n=i.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,s.jsx)("div",{className:b.playgroundContainer,children:(0,s.jsx)(l.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:d},i),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(S,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(S,{}),(0,s.jsx)(k,{})]})}))})}function T(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){T(e,n,t[n])}))}return e}function I(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function _(e){return(0,s.jsx)("button",I(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function B(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const L=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){B(e,n,t[n])}))}return e}({React:i},i,r);var R,U,A=t(89583),M=t(6324),V=t.n(M);function Z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),$=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(G=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Z(e,n,t[n])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(G,Object.getOwnPropertyDescriptors(z)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(z)).forEach((function(e){Object.defineProperty(G,e,Object.getOwnPropertyDescriptor(z,e))})),G);var G,z;const H=Object.keys(W);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Y(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:i}=n;if(i&&$.test(i)){const e=i.match($).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=V()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const o=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(H,n)}}(r,s),c=t.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),d=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<c.length;){const e=c[j].match(o);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));d[n]?l[d[n]].range+=`${j},`:a[n]?l[a[n]].start=j:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${j-1},`),c.splice(j,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{V()(n).forEach((n=>{var t;null!==(t=(R=h)[U=n])&&void 0!==t||(R[U]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(x());return(0,s.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,o.Z)(t.className,J.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,o.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function oe(e,n){const[t,r]=(0,i.useState)(),s=(0,i.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{s()}),[s]),function(e,n,t=ie){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,i.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function de(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){de(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,o.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ae({},i({token:e})),n)));return(0,s.jsxs)("span",ue(ae({},c),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function xe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function fe(e){return(0,s.jsx)("svg",xe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){be(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,i.useState)(!1),c=(0,i.useRef)(void 0),l=(0,i.useCallback)((()=>{(0,je.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,d.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,d.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,d.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(fe,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function Oe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Oe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,d.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,o.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:d,magicComments:a}}=(0,p.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:d),j=x(),f=function(){const[e,n]=(0,i.useState)(!1),[t,r]=(0,i.useState)(!1),s=(0,i.useRef)(null),o=(0,i.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return oe(s,c),(0,i.useEffect)((()=>{c()}),[e,c]),(0,i.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:o}}(),b=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(F))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:g,code:m}=Y(e,{metastring:t,language:h,magicComments:a}),y=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,o.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[b&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:b}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:j,code:m,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:i})=>(0,s.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,o.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,o.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:r,getTokenProps:i,classNames:g[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,s.jsx)(De,{className:te.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,s.jsx)(ve,{className:te.codeButton,code:m})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Te(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const _e=(Be=function(e){var{children:n}=e,t=Te(e,["children"]);const r=(0,c.Z)(),o=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof o?Se:re;return(0,s.jsx)(l,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:o}),String(r))},function(e){return e.live?(0,s.jsx)(N,Ie({scope:L},e)):(0,s.jsx)(Be,Ie({},e))});var Be;function Le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(e){return(0,s.jsx)(_e,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Le(e,n,t[n])}))}return e}({},e))}},30546:(e,n,t)=>{t.d(n,{ZP:()=>c,d$:()=>i});var r=t(24246),s=t(71670);const i=[{value:"Tags File",id:"tags-file",level:2},{value:"Types",id:"tags-file-types",level:3},{value:"Example",id:"tags-file-example",level:3}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"tags-file",children:"Tags File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#tags",children:[(0,r.jsx)(n.code,{children:"tags"})," plugin option"]})," to configure the path of a YAML tags file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"tags.yml"})," file at the root of your content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined tags. You can reference these tags by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"tags"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Keeping tags consistent",type:"tip",children:(0,r.jsxs)(n.p,{children:["Using a tags file, you can ensure that your tags usage is consistent across your plugin content set. Use the ",(0,r.jsx)(n.a,{href:"#onInlineTags",children:(0,r.jsx)(n.code,{children:"onInlineTags: 'throw'"})})," plugin option to enforce this consistency and prevent usage of inline tags declared on the fly."]})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided tags file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type Tag = {\n label?: string; // Tag display label\n permalink?: string; // Tag URL pathname segment\n description?: string; // Tag description displayed in the tag page\n};\n\ntype TagsFileInput = Record<string, Partial<Tag> | null>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"releases:\n label: 'Product releases'\n permalink: '/product-releases'\n description: 'Content related to product releases.'\n\n# A partial tag definition is also valid\nannouncements:\n label: 'Announcements'\n\n# An empty tag definition is also valid\n# Other attributes will be inferred from the key\nemptyTag:\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="content.md"',children:"---\ntags: [releases, announcements, emptyTag]\n---\n\n# Title\n\nContent\n"})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},56618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>j,contentTitle:()=>u,default:()=>f,frontMatter:()=>a,metadata:()=>h,toc:()=>p});var r=t(24246),s=t(71670),i=t(97555),o=t(61132),c=t(52605),l=t(82064),d=t(30546);const a={sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},u="\ud83d\udce6 plugin-content-docs",h={id:"api/plugins/plugin-content-docs",title:"\ud83d\udce6 plugin-content-docs",description:"Provides the Docs functionality and is the default docs plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-docs.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},sidebar:"api",previous:{title:"Plugins overview",permalink:"/docs/api/plugins"},next:{title:"\ud83d\udce6 plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog"}},j={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFunction</code>",id:"EditUrlFunction",level:4},{value:"<code>PrefixParser</code>",id:"PrefixParser",level:4},{value:"<code>SidebarGenerator</code>",id:"SidebarGenerator",level:4},{value:"<code>VersionsConfig</code>",id:"VersionsConfig",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},...d.d$,{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function x(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-content-docs",children:"\ud83d\udce6 plugin-content-docs"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/docs-introduction",children:"Docs"})," functionality and is the default docs plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-docs\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsx)(n.td,{children:"Path to the docs content directory on the file system, relative to site directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFunction",children:"EditUrlFunction"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativeDocPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will always target the current version doc instead of older versions. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsxs)(n.td,{children:["URL route for the docs section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," for shipping docs without base path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags list page of your site. It is prepended to the ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"false | string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Path to sidebar configuration. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable sidebars, or ",(0,r.jsx)(n.code,{children:"undefined"})," to create a fully autogenerated sidebar."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsible"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsible by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#collapsible-categories",children:"Collapsible categories"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsed"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsed by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#expanded-categories-by-default",children:"Expanded categories by default"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#SidebarGenerator",children:"SidebarGenerator"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Function used to replace the sidebar items of type ",(0,r.jsx)(n.code,{children:"'autogenerated'"})," with real sidebar items (docs, categories, links...). See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"numberPrefixParser"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["boolean | ",(0,r.jsx)(n.a,{href:"#PrefixParser",children:"PrefixParser"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Custom parsing logic to extract number prefixes from file names. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable this behavior and leave the docs untouched, and ",(0,r.jsx)(n.code,{children:"true"})," to use the default parser. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docsRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocsRoot'"})}),(0,r.jsx)(n.td,{children:"Parent component of all the docs plugin pages (including all versions). Stays mounted when navigation between docs pages and versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docVersionRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocVersionLayout'"})}),(0,r.jsx)(n.td,{children:"Parent component of all docs pages of an individual version (doc pages with sidebars, tags pages). Stays mounted when navigation between pages of that specific version."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocRoot'"})}),(0,r.jsx)(n.td,{children:"Parent component of all doc pages with sidebars (regular docs pages, category generated index pages). Stays mounted when navigation between such pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docItemComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocItem'"})}),(0,r.jsx)(n.td,{children:"Main doc container, with TOC, pagination, etc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagDocListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagDocListPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "docs containing tag X" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docCategoryGeneratedIndexComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocCategoryGeneratedIndexPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the generated category index page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Recma plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the doc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the doc was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"breadcrumbs"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Enable or disable the breadcrumbs on doc pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"disableVersioning"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Explicitly disable versioning even when multiple versions exist. This will make the site only include the current version. Will error if ",(0,r.jsx)(n.code,{children:"includeCurrentVersion: false"})," and ",(0,r.jsx)(n.code,{children:"disableVersioning: true"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"includeCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Include the current version of your docs."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"lastVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["First version in ",(0,r.jsx)(n.code,{children:"versions.json"})]}),(0,r.jsx)(n.td,{children:"The version navigated to in priority and displayed by default for docs navbar items."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onlyIncludeVersions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:"All versions available"}),(0,r.jsx)(n.td,{children:"Only include a subset of all available versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"versions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#VersionsConfig",children:"VersionsConfig"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{}"})}),(0,r.jsx)(n.td,{children:"Independent customization of each version's properties."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string | false | null | undefined"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags.yml"})}),(0,r.jsx)(n.td,{children:"Path to a YAML file listing pre-defined tags. Relative to the docs version content directories."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onInlineTags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'ignore' | 'log' | 'warn' | 'throw'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"warn"})}),(0,r.jsxs)(n.td,{children:["The plugin behavior when docs contain inline tags (not appearing in the list of pre-defined tags, usually ",(0,r.jsx)(n.code,{children:"docs/tags.yml"}),")."]})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFunction",children:(0,r.jsx)(n.code,{children:"EditUrlFunction"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n version: string;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"PrefixParser",children:(0,r.jsx)(n.code,{children:"PrefixParser"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type PrefixParser = (filename: string) => {\n filename: string;\n numberPrefix?: number;\n};\n"})}),"\n",(0,r.jsx)(n.h4,{id:"SidebarGenerator",children:(0,r.jsx)(n.code,{children:"SidebarGenerator"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarGenerator = (generatorArgs: {\n /** The sidebar item with type \"autogenerated\" to be transformed. */\n item: {type: 'autogenerated'; dirName: string};\n /** Useful metadata for the version this sidebar belongs to. */\n version: {contentPath: string; versionName: string};\n /** All the docs of that version (unfiltered). */\n docs: {\n id: string;\n title: string;\n frontMatter: DocFrontMatter & Record<string, unknown>;\n source: string;\n sourceDirName: string;\n sidebarPosition?: number | undefined;\n }[];\n /** Number prefix parser configured for this plugin. */\n numberPrefixParser: PrefixParser;\n /** The default category index matcher which you can override. */\n isCategoryIndex: CategoryIndexMatcher;\n /**\n * key is the path relative to the doc content directory, value is the\n * category metadata file's content.\n */\n categoriesMetadata: {[filePath: string]: CategoryMetadata};\n /**\n * Useful to re-use/enhance the default sidebar generation logic from\n * Docusaurus.\n */\n defaultSidebarItemsGenerator: SidebarGenerator;\n // Returns an array of sidebar items \u2014 same as what you can declare in\n // sidebars.js, except for shorthands. See https://docusaurus.io/docs/sidebar/items\n}) => Promise<SidebarItem[]>;\n\ntype CategoryIndexMatcher = (param: {\n /** The file name, without extension */\n fileName: string;\n /**\n * The list of directories, from lowest level to highest.\n * If there's no dir name, directories is ['.']\n */\n directories: string[];\n /** The extension, with a leading dot */\n extension: string;\n}) => boolean;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"VersionsConfig",children:(0,r.jsx)(n.code,{children:"VersionsConfig"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type VersionConfig = {\n /**\n * The base path of the version, will be appended to `baseUrl` +\n * `routeBasePath`.\n */\n path?: string;\n /** The label of the version to be used in badges, dropdowns, etc. */\n label?: string;\n /** The banner to show at the top of a doc of that version. */\n banner?: 'none' | 'unreleased' | 'unmaintained';\n /** Show a badge with the version label at the top of each doc. */\n badge?: boolean;\n /** Prevents search engines from indexing this version */\n noIndex?: boolean;\n /** Add a custom class name to the <html> element of each doc */\n className?: string;\n};\n\ntype VersionsConfig = {[versionName: string]: VersionConfig};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-content-docs",presetOptionName:"docs",code:"{\n path: 'docs',\n breadcrumbs: true,\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({versionDocsDirPath, docPath}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`,\n editLocalizedFiles: false,\n editCurrentVersion: false,\n routeBasePath: 'docs',\n include: ['**/*.md', '**/*.mdx'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n sidebarPath: 'sidebars.js',\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n isCategoryIndex,\n }) {\n // Use the provided data to generate a custom sidebar slice\n return [\n {type: 'doc', id: 'intro'},\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n {type: 'doc', id: 'tutorial1'},\n {type: 'doc', id: 'tutorial2'},\n ],\n },\n ];\n },\n numberPrefixParser(filename) {\n // Implement your own logic to extract a potential number prefix\n const numberPrefix = findNumberPrefix(filename);\n // Prefix found: return it with the cleaned filename\n if (numberPrefix) {\n return {\n numberPrefix,\n filename: filename.replace(prefix, ''),\n };\n }\n // No number prefix found\n return {numberPrefix: undefined, filename};\n },\n docsRootComponent: '@theme/DocsRoot',\n docVersionRootComponent: '@theme/DocVersionRoot',\n docRootComponent: '@theme/DocRoot',\n docItemComponent: '@theme/DocItem',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n showLastUpdateAuthor: false,\n showLastUpdateTime: false,\n disableVersioning: false,\n includeCurrentVersion: true,\n lastVersion: undefined,\n versions: {\n current: {\n label: 'Android SDK v2.0.0 (WIP)',\n path: 'android-2.0.0',\n banner: 'none',\n },\n '1.0.0': {\n label: 'Android SDK v1.0.0',\n path: 'android-1.0.0',\n banner: 'unmaintained',\n },\n },\n onlyIncludeVersions: ['current', '1.0.0', '2.0.0'],\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"id"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"file path (including folders, without the extension)"}),(0,r.jsx)(n.td,{children:"A unique document ID."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["Markdown title or ",(0,r.jsx)(n.code,{children:"id"})]}),(0,r.jsx)(n.td,{children:"The text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"sidebar_label"})," or ",(0,r.jsx)(n.code,{children:"title"})]}),(0,r.jsx)(n.td,{children:"The text used in the document next/previous buttons for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:"The text shown in the document sidebar for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_position"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:"Default ordering"}),(0,r.jsxs)(n.td,{children:["Controls the position of a doc inside the generated sidebar slice when using ",(0,r.jsx)(n.code,{children:"autogenerated"})," sidebar items. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_class_name"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Gives the corresponding sidebar label a special class name when using autogenerated sidebars."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_custom_props"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Assign ",(0,r.jsx)(n.a,{href:"/docs/sidebar#passing-custom-props",children:"custom props"})," to the sidebar item referencing this doc"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"displayed_sidebar"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Force the display of a given sidebar when browsing the current document. Read the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars guide"})," for details."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the title at the top of the doc. It only hides a title declared through the front matter, and have no effect on a Markdown title at the top of your document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_next"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Next doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Next" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Next" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_prev"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Previous doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Previous" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Previous" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"parse_number_prefixes"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"numberPrefixParser"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["Whether number prefix parsing is disabled on this doc. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"custom_edit_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsxs)(n.td,{children:["Computed using the ",(0,r.jsx)(n.code,{children:"editUrl"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["The URL for editing this document. Use ",(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Edit this page" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Keywords meta tag for the document page, for search engines."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the document URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-doc"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/myDoc"}),", ",(0,r.jsx)(n.code,{children:"slug: /"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your docs. Strings can be a reference to keys of a ",(0,r.jsx)(n.a,{href:"#tags-file",children:"tags file"})," (usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft documents will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted documents will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\nid: doc-markdown\ntitle: Docs Markdown Features\nhide_title: false\nhide_table_of_contents: false\nsidebar_label: Markdown\nsidebar_position: 3\npagination_label: Markdown features\ncustom_edit_url: https://github.com/facebook/docusaurus/edit/main/docs/api-doc-markdown.md\ndescription: How do I find you when I cannot solve this problem\nkeywords:\n - docs\n - docusaurus\ntags: [docusaurus]\nimage: https://i.imgur.com/mErPwqL.png\nslug: /myDoc\nlast_update:\n date: 1/1/2000\n author: custom author name\n---\n\n# Markdown Features\n\nMy Document Markdown content\n"})}),"\n","\n",(0,r.jsx)(d.ZP,{}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-docs\n\u2502\n\u2502 # translations for website/docs\n\u251c\u2500\u2500 current\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u251c\u2500\u2500 current.json\n\u2502\n\u2502 # translations for website/versioned_docs/version-1.0.0\n\u251c\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u2514\u2500\u2500 version-1.0.0.json\n"})})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39987],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),s=t(27378),i=t(40624),o=t(75527),c=t(3620),l=t(44479),d=t(62821),a=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function x(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,d._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,o]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=x(e),[o,c]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[d,a]=b({queryString:t,groupId:r}),[h,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=d?d:h;return f({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),a(e),j(e)}),[a,j,i]),tabValues:i}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),a=e=>{const n=e.currentTarget,r=l.indexOf(n),i=c[r].value;i!==t&&(d(n),s(i))},u=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(O({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:a},s),{className:(0,i.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=g(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,O({},n,e)),(0,r.jsx)(k,O({},n,e))]})}function S(e){const n=(0,m.Z)();return(0,r.jsx)(D,w(O({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(29088));function i({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),i=t(80474),o=t(3620);const c={apiTable:"apiTable_e8hp"};function l({name:e,children:n},t){const c=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),l=e?`${e}-${c}`:c,d=`#${l}`,a=(0,o.k6)();return(0,i.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:a.location.hash===d?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(d)},onKeyDown:e=>{"Enter"===e.key&&a.push(d)},children:n.props.children})}const d=s.forwardRef(l);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,i]=s.Children.toArray(e.props.children),o=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=o.current)||void 0===e||e.focus()}),[o]);const l=s.Children.map(i.props.children,(e=>(0,r.jsx)(d,{name:n,ref:o,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[t,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),s=(t(27378),t(41428)),i=t(92053),o=t(36712),c=t(97555),l=t(61132),d=t(38112);const a=void 0;function u({code:e,pluginName:n,presetOptionName:t}){const u=(0,i.zu)(a).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,o.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${u}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(o.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,o.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Re});var r={};t.r(r),t.d(r,{ButtonExample:()=>_});var s=t(24246),i=t(27378),o=t(40624),c=t(29088),l=t(32711),d=t(36712),a=t(4423),u=t(94544),h=t(30691),j=t(78844),p=t(73919);function x(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var f=t(88941);const b={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){g(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,o.Z)(b.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(u.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(f.Z,{fallback:e=>(0,s.jsx)(h.Ac,m({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:b.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function D(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:b.playgroundEditor},String(e))}function S(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,i=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:o}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:c}}=o,d=x();var u;const h=null!==(u=null===(n=i.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,s.jsx)("div",{className:b.playgroundContainer,children:(0,s.jsx)(l.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:d},i),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(S,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(S,{}),(0,s.jsx)(k,{})]})}))})}function T(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){T(e,n,t[n])}))}return e}function I(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function _(e){return(0,s.jsx)("button",I(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function B(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const L=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){B(e,n,t[n])}))}return e}({React:i},i,r);var R,U,A=t(89583),M=t(6324),V=t.n(M);function Z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),$=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},G=(q=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Z(e,n,t[n])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(z)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(z)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(z,e))})),q);var q,z;const H=Object.keys(W);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=G[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Y(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:i}=n;if(i&&$.test(i)){const e=i.match($).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=V()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const o=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(H,n)}}(r,s),c=t.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),d=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<c.length;){const e=c[j].match(o);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));d[n]?l[d[n]].range+=`${j},`:a[n]?l[a[n]].start=j:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${j-1},`),c.splice(j,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{V()(n).forEach((n=>{var t;null!==(t=(R=h)[U=n])&&void 0!==t||(R[U]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(x());return(0,s.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,o.Z)(t.className,J.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,o.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function oe(e,n){const[t,r]=(0,i.useState)(),s=(0,i.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{s()}),[s]),function(e,n,t=ie){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,i.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function de(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){de(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,o.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ae({},i({token:e})),n)));return(0,s.jsxs)("span",ue(ae({},c),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function xe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function fe(e){return(0,s.jsx)("svg",xe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){be(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,i.useState)(!1),c=(0,i.useRef)(void 0),l=(0,i.useCallback)((()=>{(0,je.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,d.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,d.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,d.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(fe,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function Oe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Oe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,d.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,o.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:d,magicComments:a}}=(0,p.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:d),j=x(),f=function(){const[e,n]=(0,i.useState)(!1),[t,r]=(0,i.useState)(!1),s=(0,i.useRef)(null),o=(0,i.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return oe(s,c),(0,i.useEffect)((()=>{c()}),[e,c]),(0,i.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:o}}(),b=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(F))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:g,code:m}=Y(e,{metastring:t,language:h,magicComments:a}),y=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,o.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[b&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:b}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:j,code:m,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:i})=>(0,s.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,o.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,o.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:r,getTokenProps:i,classNames:g[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,s.jsx)(De,{className:te.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,s.jsx)(ve,{className:te.codeButton,code:m})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Te(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const _e=(Be=function(e){var{children:n}=e,t=Te(e,["children"]);const r=(0,c.Z)(),o=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof o?Se:re;return(0,s.jsx)(l,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:o}),String(r))},function(e){return e.live?(0,s.jsx)(N,Ie({scope:L},e)):(0,s.jsx)(Be,Ie({},e))});var Be;function Le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(e){return(0,s.jsx)(_e,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Le(e,n,t[n])}))}return e}({},e))}},30546:(e,n,t)=>{t.d(n,{ZP:()=>c,d$:()=>i});var r=t(24246),s=t(71670);const i=[{value:"Tags File",id:"tags-file",level:2},{value:"Types",id:"tags-file-types",level:3},{value:"Example",id:"tags-file-example",level:3}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"tags-file",children:"Tags File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#tags",children:[(0,r.jsx)(n.code,{children:"tags"})," plugin option"]})," to configure the path of a YAML tags file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"tags.yml"})," file at the root of your content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined tags. You can reference these tags by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"tags"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Keeping tags consistent",type:"tip",children:(0,r.jsxs)(n.p,{children:["Using a tags file, you can ensure that your tags usage is consistent across your plugin content set. Use the ",(0,r.jsx)(n.a,{href:"#onInlineTags",children:(0,r.jsx)(n.code,{children:"onInlineTags: 'throw'"})})," plugin option to enforce this consistency and prevent usage of inline tags declared on the fly."]})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided tags file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type Tag = {\n label?: string; // Tag display label\n permalink?: string; // Tag URL pathname segment\n description?: string; // Tag description displayed in the tag page\n};\n\ntype TagsFileInput = Record<string, Partial<Tag> | null>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"releases:\n label: 'Product releases'\n permalink: '/product-releases'\n description: 'Content related to product releases.'\n\n# A partial tag definition is also valid\nannouncements:\n label: 'Announcements'\n\n# An empty tag definition is also valid\n# Other attributes will be inferred from the key\nemptyTag:\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="content.md"',children:"---\ntags: [releases, announcements, emptyTag]\n---\n\n# Title\n\nContent\n"})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},56618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>j,contentTitle:()=>u,default:()=>f,frontMatter:()=>a,metadata:()=>h,toc:()=>p});var r=t(24246),s=t(71670),i=t(97555),o=t(61132),c=t(52605),l=t(82064),d=t(30546);const a={sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},u="\ud83d\udce6 plugin-content-docs",h={id:"api/plugins/plugin-content-docs",title:"\ud83d\udce6 plugin-content-docs",description:"Provides the Docs functionality and is the default docs plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-docs.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},sidebar:"api",previous:{title:"Plugins overview",permalink:"/docs/api/plugins"},next:{title:"\ud83d\udce6 plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog"}},j={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFunction</code>",id:"EditUrlFunction",level:4},{value:"<code>PrefixParser</code>",id:"PrefixParser",level:4},{value:"<code>SidebarGenerator</code>",id:"SidebarGenerator",level:4},{value:"<code>VersionsConfig</code>",id:"VersionsConfig",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},...d.d$,{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function x(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-content-docs",children:"\ud83d\udce6 plugin-content-docs"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/docs-introduction",children:"Docs"})," functionality and is the default docs plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-docs\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsx)(n.td,{children:"Path to the docs content directory on the file system, relative to site directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFunction",children:"EditUrlFunction"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativeDocPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will always target the current version doc instead of older versions. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsxs)(n.td,{children:["URL route for the docs section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," for shipping docs without base path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags list page of your site. It is prepended to the ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"false | string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Path to sidebar configuration. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable sidebars, or ",(0,r.jsx)(n.code,{children:"undefined"})," to create a fully autogenerated sidebar."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsible"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsible by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#collapsible-categories",children:"Collapsible categories"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsed"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsed by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#expanded-categories-by-default",children:"Expanded categories by default"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#SidebarGenerator",children:"SidebarGenerator"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Function used to replace the sidebar items of type ",(0,r.jsx)(n.code,{children:"'autogenerated'"})," with real sidebar items (docs, categories, links...). See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"numberPrefixParser"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["boolean | ",(0,r.jsx)(n.a,{href:"#PrefixParser",children:"PrefixParser"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Custom parsing logic to extract number prefixes from file names. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable this behavior and leave the docs untouched, and ",(0,r.jsx)(n.code,{children:"true"})," to use the default parser. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docsRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocsRoot'"})}),(0,r.jsx)(n.td,{children:"Parent component of all the docs plugin pages (including all versions). Stays mounted when navigation between docs pages and versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docVersionRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocVersionLayout'"})}),(0,r.jsx)(n.td,{children:"Parent component of all docs pages of an individual version (doc pages with sidebars, tags pages). Stays mounted when navigation between pages of that specific version."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocRoot'"})}),(0,r.jsx)(n.td,{children:"Parent component of all doc pages with sidebars (regular docs pages, category generated index pages). Stays mounted when navigation between such pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docItemComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocItem'"})}),(0,r.jsx)(n.td,{children:"Main doc container, with TOC, pagination, etc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagDocListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagDocListPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "docs containing tag X" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docCategoryGeneratedIndexComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocCategoryGeneratedIndexPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the generated category index page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Recma plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the doc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the doc was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"breadcrumbs"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Enable or disable the breadcrumbs on doc pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"disableVersioning"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Explicitly disable versioning even when multiple versions exist. This will make the site only include the current version. Will error if ",(0,r.jsx)(n.code,{children:"includeCurrentVersion: false"})," and ",(0,r.jsx)(n.code,{children:"disableVersioning: true"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"includeCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Include the current version of your docs."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"lastVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["First version in ",(0,r.jsx)(n.code,{children:"versions.json"})]}),(0,r.jsx)(n.td,{children:"The version navigated to in priority and displayed by default for docs navbar items."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onlyIncludeVersions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:"All versions available"}),(0,r.jsx)(n.td,{children:"Only include a subset of all available versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"versions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#VersionsConfig",children:"VersionsConfig"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{}"})}),(0,r.jsx)(n.td,{children:"Independent customization of each version's properties."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string | false | null | undefined"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags.yml"})}),(0,r.jsx)(n.td,{children:"Path to a YAML file listing pre-defined tags. Relative to the docs version content directories."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onInlineTags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'ignore' | 'log' | 'warn' | 'throw'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"warn"})}),(0,r.jsxs)(n.td,{children:["The plugin behavior when docs contain inline tags (not appearing in the list of pre-defined tags, usually ",(0,r.jsx)(n.code,{children:"docs/tags.yml"}),")."]})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFunction",children:(0,r.jsx)(n.code,{children:"EditUrlFunction"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n version: string;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"PrefixParser",children:(0,r.jsx)(n.code,{children:"PrefixParser"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type PrefixParser = (filename: string) => {\n filename: string;\n numberPrefix?: number;\n};\n"})}),"\n",(0,r.jsx)(n.h4,{id:"SidebarGenerator",children:(0,r.jsx)(n.code,{children:"SidebarGenerator"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarGenerator = (generatorArgs: {\n /** The sidebar item with type \"autogenerated\" to be transformed. */\n item: {type: 'autogenerated'; dirName: string};\n /** Useful metadata for the version this sidebar belongs to. */\n version: {contentPath: string; versionName: string};\n /** All the docs of that version (unfiltered). */\n docs: {\n id: string;\n title: string;\n frontMatter: DocFrontMatter & Record<string, unknown>;\n source: string;\n sourceDirName: string;\n sidebarPosition?: number | undefined;\n }[];\n /** Number prefix parser configured for this plugin. */\n numberPrefixParser: PrefixParser;\n /** The default category index matcher which you can override. */\n isCategoryIndex: CategoryIndexMatcher;\n /**\n * key is the path relative to the doc content directory, value is the\n * category metadata file's content.\n */\n categoriesMetadata: {[filePath: string]: CategoryMetadata};\n /**\n * Useful to re-use/enhance the default sidebar generation logic from\n * Docusaurus.\n */\n defaultSidebarItemsGenerator: SidebarGenerator;\n // Returns an array of sidebar items \u2014 same as what you can declare in\n // sidebars.js, except for shorthands. See https://docusaurus.io/docs/sidebar/items\n}) => Promise<SidebarItem[]>;\n\ntype CategoryIndexMatcher = (param: {\n /** The file name, without extension */\n fileName: string;\n /**\n * The list of directories, from lowest level to highest.\n * If there's no dir name, directories is ['.']\n */\n directories: string[];\n /** The extension, with a leading dot */\n extension: string;\n}) => boolean;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"VersionsConfig",children:(0,r.jsx)(n.code,{children:"VersionsConfig"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type VersionConfig = {\n /**\n * The base path of the version, will be appended to `baseUrl` +\n * `routeBasePath`.\n */\n path?: string;\n /** The label of the version to be used in badges, dropdowns, etc. */\n label?: string;\n /** The banner to show at the top of a doc of that version. */\n banner?: 'none' | 'unreleased' | 'unmaintained';\n /** Show a badge with the version label at the top of each doc. */\n badge?: boolean;\n /** Prevents search engines from indexing this version */\n noIndex?: boolean;\n /** Add a custom class name to the <html> element of each doc */\n className?: string;\n};\n\ntype VersionsConfig = {[versionName: string]: VersionConfig};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-content-docs",presetOptionName:"docs",code:"{\n path: 'docs',\n breadcrumbs: true,\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({versionDocsDirPath, docPath}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`,\n editLocalizedFiles: false,\n editCurrentVersion: false,\n routeBasePath: 'docs',\n include: ['**/*.md', '**/*.mdx'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n sidebarPath: 'sidebars.js',\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n isCategoryIndex,\n }) {\n // Use the provided data to generate a custom sidebar slice\n return [\n {type: 'doc', id: 'intro'},\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n {type: 'doc', id: 'tutorial1'},\n {type: 'doc', id: 'tutorial2'},\n ],\n },\n ];\n },\n numberPrefixParser(filename) {\n // Implement your own logic to extract a potential number prefix\n const numberPrefix = findNumberPrefix(filename);\n // Prefix found: return it with the cleaned filename\n if (numberPrefix) {\n return {\n numberPrefix,\n filename: filename.replace(prefix, ''),\n };\n }\n // No number prefix found\n return {numberPrefix: undefined, filename};\n },\n docsRootComponent: '@theme/DocsRoot',\n docVersionRootComponent: '@theme/DocVersionRoot',\n docRootComponent: '@theme/DocRoot',\n docItemComponent: '@theme/DocItem',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n showLastUpdateAuthor: false,\n showLastUpdateTime: false,\n disableVersioning: false,\n includeCurrentVersion: true,\n lastVersion: undefined,\n versions: {\n current: {\n label: 'Android SDK v2.0.0 (WIP)',\n path: 'android-2.0.0',\n banner: 'none',\n },\n '1.0.0': {\n label: 'Android SDK v1.0.0',\n path: 'android-1.0.0',\n banner: 'unmaintained',\n },\n },\n onlyIncludeVersions: ['current', '1.0.0', '2.0.0'],\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"id"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"file path (including folders, without the extension)"}),(0,r.jsx)(n.td,{children:"A unique document ID."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["Markdown title or ",(0,r.jsx)(n.code,{children:"id"})]}),(0,r.jsx)(n.td,{children:"The text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"sidebar_label"})," or ",(0,r.jsx)(n.code,{children:"title"})]}),(0,r.jsx)(n.td,{children:"The text used in the document next/previous buttons for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:"The text shown in the document sidebar for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_position"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:"Default ordering"}),(0,r.jsxs)(n.td,{children:["Controls the position of a doc inside the generated sidebar slice when using ",(0,r.jsx)(n.code,{children:"autogenerated"})," sidebar items. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_class_name"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Gives the corresponding sidebar label a special class name when using autogenerated sidebars."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_custom_props"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Assign ",(0,r.jsx)(n.a,{href:"/docs/sidebar#passing-custom-props",children:"custom props"})," to the sidebar item referencing this doc"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"displayed_sidebar"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Force the display of a given sidebar when browsing the current document. Read the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars guide"})," for details."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the title at the top of the doc. It only hides a title declared through the front matter, and have no effect on a Markdown title at the top of your document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_next"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Next doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Next" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Next" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_prev"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Previous doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Previous" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Previous" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"parse_number_prefixes"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"numberPrefixParser"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["Whether number prefix parsing is disabled on this doc. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"custom_edit_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsxs)(n.td,{children:["Computed using the ",(0,r.jsx)(n.code,{children:"editUrl"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["The URL for editing this document. Use ",(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Edit this page" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Keywords meta tag for the document page, for search engines."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the document URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-doc"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/myDoc"}),", ",(0,r.jsx)(n.code,{children:"slug: /"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your docs. Strings can be a reference to keys of a ",(0,r.jsx)(n.a,{href:"#tags-file",children:"tags file"})," (usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft documents will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted documents will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\nid: doc-markdown\ntitle: Docs Markdown Features\nhide_title: false\nhide_table_of_contents: false\nsidebar_label: Markdown\nsidebar_position: 3\npagination_label: Markdown features\ncustom_edit_url: https://github.com/facebook/docusaurus/edit/main/docs/api-doc-markdown.md\ndescription: How do I find you when I cannot solve this problem\nkeywords:\n - docs\n - docusaurus\ntags: [docusaurus]\nimage: https://i.imgur.com/mErPwqL.png\nslug: /myDoc\nlast_update:\n date: 1/1/2000\n author: custom author name\n---\n\n# Markdown Features\n\nMy Document Markdown content\n"})}),"\n","\n",(0,r.jsx)(d.ZP,{}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-docs\n\u2502\n\u2502 # translations for website/docs\n\u251c\u2500\u2500 current\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u251c\u2500\u2500 current.json\n\u2502\n\u2502 # translations for website/versioned_docs/version-1.0.0\n\u251c\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u2514\u2500\u2500 version-1.0.0.json\n"})})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}}}]); \ No newline at end of file diff --git a/assets/js/0b7c2a4a.20ebd1ec.js b/assets/js/0b7c2a4a.20ebd1ec.js deleted file mode 100644 index bdf492b6be73..000000000000 --- a/assets/js/0b7c2a4a.20ebd1ec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43769],{90632:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},61132:(e,r,n)=>{n.d(r,{Z:()=>o});var t=n(24246),s=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:r,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>P});var t=n(24246),s=n(27378),a=n(40624),o=n(75527),i=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:r,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:t}})=>({value:e,label:r,attributes:n,default:t})))}(n);return function(e){const r=(0,u.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function f({queryString:e=!1,groupId:r}){const n=(0,i.k6)(),t=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),a=(0,c._X)(t),o=(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){h(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[t,n]);return[a,o]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:t}=e,a=b(e),[o,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:a}))),[c,u]=f({queryString:n,groupId:t}),[h,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,d.Nk)(r);return[n,(0,s.useCallback)((e=>{r&&t.set(e)}),[r,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){w(e,r,n[r])}))}return e}function k(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function O({className:e,block:r,selectedValue:n,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const r=e.currentTarget,t=l.indexOf(r),a=i[t].value;a!==n&&(c(r),s(a))},d=e=>{let r=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;var n;r=null!==(n=l[t])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var t;r=null!==(t=l[n])&&void 0!==t?t:l[l.length-1];break}}null==r||r.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},e),children:i.map((({value:e,label:r,attributes:s})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function D({lazy:e,children:r,selectedValue:n}){const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:o.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function S(e){const r=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(O,v({},r,e)),(0,t.jsx)(D,v({},r,e))]})}function P(e){const r=(0,x.Z)();return(0,t.jsx)(S,k(v({},e),{children:g(e.children)}),String(r))}},13381:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=(n(27378),n(6698));function a({url:e}){return(0,t.jsx)("div",{style:{padding:10},children:(0,t.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,t.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,n)=>{n.d(r,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){o(e,r,n[r])}))}return e}function l(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function c({children:e,minHeight:r,url:n="http://localhost:3000",style:o,bodyStyle:c}){return(0,t.jsxs)("div",{className:a.browserWindow,style:l(i({},o),{minHeight:r}),children:[(0,t.jsxs)("div",{className:a.browserWindowHeader,children:[(0,t.jsxs)("div",{className:a.buttons,children:[(0,t.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar})]})})]}),(0,t.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},3818:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=n(27378);function a({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:n}){const[a,o]=(0,s.useState)(!1);if(a)throw new Error(r,{cause:n?new Error(n):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}},57688:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg"},49621:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg"},81736:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},38260:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>u,metadata:()=>h,toc:()=>g});var t=n(24246),s=n(71670),a=n(97555),o=n(61132),i=n(6698),l=n(13381),c=n(3818);const u={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},d=void 0,h={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},p={image:n(90632).Z,authorsImageUrls:[void 0]},g=[{value:"Highlights",id:"highlights",level:2},{value:"Sidebar item description",id:"sidebar-item-description",level:3},{value:"Theme Query String",id:"theme-query-string",level:3},{value:"Remark plugin npm2yarn upgrade",id:"remark-plugin-npm2yarn-upgrade",level:3},{value:"gtag support for multiple tracking IDs",id:"gtag-support-for-multiple-tracking-ids",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function b(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.p,{children:["We are happy to announce ",(0,t.jsx)(r.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus blog post social card",src:n(81736).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,t.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(r.h3,{id:"sidebar-item-description",children:"Sidebar item description"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8236",children:"#8236"}),", we made it possible to provide a new ",(0,t.jsx)(r.code,{children:"description"})," attribute for docs sidebar items of type ",(0,t.jsx)(r.code,{children:"link"})," and ",(0,t.jsx)(r.code,{children:"category"}),"."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-tsx",metastring:'title="sidebars.js"',children:"[\n {\n type: 'link',\n label: 'Link with description',\n href: 'https://docusaurus.io',\n // highlight-next-line\n description: 'Some link description',\n },\n {\n type: 'category',\n label: 'Category with description',\n // highlight-next-line\n description: 'Some category description',\n items: [],\n },\n];\n"})}),"\n",(0,t.jsx)(r.p,{children:"These descriptions will be used in category generated index pages."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Show sidebar category generated index with custom descriptions",src:n(49621).Z+"",width:"1400",height:"691"})}),"\n",(0,t.jsx)(r.h3,{id:"theme-query-string",children:"Theme Query String"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8708",children:"#8708"}),", we added the possibility to force Docusaurus to initialize itself in ",(0,t.jsx)(r.code,{children:"light"})," or ",(0,t.jsx)(r.code,{children:"dark"})," mode through a new ",(0,t.jsx)(r.code,{children:"docusaurus-theme"})," query-string parameter."]}),"\n",(0,t.jsx)(r.p,{children:"This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView."}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=light"}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=dark"}),"\n",(0,t.jsx)(r.h3,{id:"remark-plugin-npm2yarn-upgrade",children:"Remark plugin npm2yarn upgrade"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8690",children:"#8690"}),", we upgraded our Remark plugin ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn",children:"@docusaurus/remark-plugin-npm2yarn"})," with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-markdown",children:"Run these commands!\n\n```bash npm2yarn\nnpm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n```\n"})}),"\n",(0,t.jsx)(i.Z,{children:(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn install\nyarn build\nyarn myCustomScript --some-arg\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm install\npnpm run build\npnpm run myCustomScript --some-arg\n"})})})]})}),"\n",(0,t.jsx)(r.h3,{id:"gtag-support-for-multiple-tracking-ids",children:"gtag support for multiple tracking IDs"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8620",children:"#8620"})," we added support for the ",(0,t.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"@docusaurus/plugin-google-gtag"})," plugin to declare multiple tracking IDs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n gtag: {\n trackingID: [\n // highlight-next-line\n 'G-<YOUR-NEW-GA4-ID>',\n // highlight-next-line\n 'UA-<YOUR-OLD-UA-ID>',\n ],\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(r.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})})," on ",(0,t.jsx)(r.strong,{children:"July 1, 2023"}),"."]}),(0,t.jsxs)(r.p,{children:["Docusaurus users should migrate to Google Analytics 4. Google ",(0,t.jsx)(r.strong,{children:"does not permit to migrate your existing Universal Analytics data"})," to your new Google Analytics 4 property."]}),(0,t.jsxs)(r.p,{children:["To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (",(0,t.jsx)(r.code,{children:"UA-*"}),") and new one (",(0,t.jsx)(r.code,{children:"G-*"}),"). Refer to the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated issue"})})," for details."]})]}),"\n",(0,t.jsx)(r.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8736",children:"#8736"}),", we improved how we render error messages and added initial support to render the full causal chain of an error (see ",(0,t.jsx)(r.a,{href:"https://h3manth.com/ES2022/#error-cause",children:"ES2022 Error Cause"}),")."]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["To see it in action, click here: ",(0,t.jsx)(c.Z,{cause:"Probably undefined is not a function \ud83d\ude04"})]})}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8735",children:"#8735"})," we also made navbar-related error messages clearer to help users understand what they did wrong."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus navbar error message screenshot",src:n(57688).Z+"",width:"1676",height:"1614"})}),"\n",(0,t.jsx)(r.h3,{id:"translations",children:"Translations"}),"\n",(0,t.jsx)(r.p,{children:"We made it possible to translate some new elements:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8677",children:"#8677"})," introduces a new ",(0,t.jsx)(r.code,{children:"process.env.DOCUSAURUS_CURRENT_LOCALE"})," (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl..."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8616",children:"#8616"})," allows to translate the navbar and footer logo alt text"]}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"We added default theme translation support for multiple languages:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["\ud83c\udded\ud83c\uddfa ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8668",children:"#8668"}),": Hungarian"]}),"\n",(0,t.jsxs)(r.li,{children:["\ud83c\uddf3\ud83c\uddf4 ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8631",children:"#8631"}),": Norwegian (Bokm\xe5l)"]}),"\n"]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["Completing theme translations is an ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,t.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8674",children:"#8674"}),": respect ",(0,t.jsx)(r.code,{children:"prefers-reduced-motion: reduce"})," media query"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8712",children:"#8712"}),": use a navbar item of type ",(0,t.jsx)(r.code,{children:"docSidebar"})," in template"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8801",children:"#8801"}),": allow tabs children to be falsy"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8757",children:"#8757"}),": make search page react to external query-string changes"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8803",children:"#8803"}),": fix code block buttons position in RTL"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8615",children:"#8615"}),": fix color mode toggle when using dark navbar"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8699",children:"#8699"}),": fix navbar dropdown tab focus bug"]}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Check the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"/changelog/2.4.0",children:"2.4.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function m(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(b,{...e})}):b(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var t=n(27378);const s={},a=t.createContext(s);function o(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b7c2a4a.bbc63202.js b/assets/js/0b7c2a4a.bbc63202.js new file mode 100644 index 000000000000..496371fa105f --- /dev/null +++ b/assets/js/0b7c2a4a.bbc63202.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43769],{90632:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},61132:(e,r,n)=>{n.d(r,{Z:()=>o});var t=n(24246),s=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:r,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>P});var t=n(24246),s=n(27378),a=n(40624),o=n(75527),i=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:r,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:t}})=>({value:e,label:r,attributes:n,default:t})))}(n);return function(e){const r=(0,u.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function f({queryString:e=!1,groupId:r}){const n=(0,i.k6)(),t=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),a=(0,c._X)(t),o=(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){h(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[t,n]);return[a,o]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:t}=e,a=b(e),[o,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:a}))),[c,u]=f({queryString:n,groupId:t}),[h,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,d.Nk)(r);return[n,(0,s.useCallback)((e=>{r&&t.set(e)}),[r,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){w(e,r,n[r])}))}return e}function k(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function O({className:e,block:r,selectedValue:n,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const r=e.currentTarget,t=l.indexOf(r),a=i[t].value;a!==n&&(c(r),s(a))},d=e=>{let r=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;var n;r=null!==(n=l[t])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var t;r=null!==(t=l[n])&&void 0!==t?t:l[l.length-1];break}}null==r||r.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},e),children:i.map((({value:e,label:r,attributes:s})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function D({lazy:e,children:r,selectedValue:n}){const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:o.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function S(e){const r=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(O,v({},r,e)),(0,t.jsx)(D,v({},r,e))]})}function P(e){const r=(0,x.Z)();return(0,t.jsx)(S,k(v({},e),{children:g(e.children)}),String(r))}},13381:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=(n(27378),n(6698));function a({url:e}){return(0,t.jsx)("div",{style:{padding:10},children:(0,t.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,t.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,n)=>{n.d(r,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){o(e,r,n[r])}))}return e}function l(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function c({children:e,minHeight:r,url:n="http://localhost:3000",style:o,bodyStyle:c}){return(0,t.jsxs)("div",{className:a.browserWindow,style:l(i({},o),{minHeight:r}),children:[(0,t.jsxs)("div",{className:a.browserWindowHeader,children:[(0,t.jsxs)("div",{className:a.buttons,children:[(0,t.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar})]})})]}),(0,t.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},3818:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=n(27378);function a({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:n}){const[a,o]=(0,s.useState)(!1);if(a)throw new Error(r,{cause:n?new Error(n):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}},57688:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg"},49621:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg"},81736:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},38260:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>u,metadata:()=>h,toc:()=>g});var t=n(24246),s=n(71670),a=n(97555),o=n(61132),i=n(6698),l=n(13381),c=n(3818);const u={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},d=void 0,h={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},p={image:n(90632).Z,authorsImageUrls:[void 0]},g=[{value:"Highlights",id:"highlights",level:2},{value:"Sidebar item description",id:"sidebar-item-description",level:3},{value:"Theme Query String",id:"theme-query-string",level:3},{value:"Remark plugin npm2yarn upgrade",id:"remark-plugin-npm2yarn-upgrade",level:3},{value:"gtag support for multiple tracking IDs",id:"gtag-support-for-multiple-tracking-ids",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function b(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.p,{children:["We are happy to announce ",(0,t.jsx)(r.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus blog post social card",src:n(81736).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,t.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(r.h3,{id:"sidebar-item-description",children:"Sidebar item description"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8236",children:"#8236"}),", we made it possible to provide a new ",(0,t.jsx)(r.code,{children:"description"})," attribute for docs sidebar items of type ",(0,t.jsx)(r.code,{children:"link"})," and ",(0,t.jsx)(r.code,{children:"category"}),"."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-tsx",metastring:'title="sidebars.js"',children:"[\n {\n type: 'link',\n label: 'Link with description',\n href: 'https://docusaurus.io',\n // highlight-next-line\n description: 'Some link description',\n },\n {\n type: 'category',\n label: 'Category with description',\n // highlight-next-line\n description: 'Some category description',\n items: [],\n },\n];\n"})}),"\n",(0,t.jsx)(r.p,{children:"These descriptions will be used in category generated index pages."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Show sidebar category generated index with custom descriptions",src:n(49621).Z+"",width:"1400",height:"691"})}),"\n",(0,t.jsx)(r.h3,{id:"theme-query-string",children:"Theme Query String"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8708",children:"#8708"}),", we added the possibility to force Docusaurus to initialize itself in ",(0,t.jsx)(r.code,{children:"light"})," or ",(0,t.jsx)(r.code,{children:"dark"})," mode through a new ",(0,t.jsx)(r.code,{children:"docusaurus-theme"})," query-string parameter."]}),"\n",(0,t.jsx)(r.p,{children:"This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView."}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=light"}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=dark"}),"\n",(0,t.jsx)(r.h3,{id:"remark-plugin-npm2yarn-upgrade",children:"Remark plugin npm2yarn upgrade"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8690",children:"#8690"}),", we upgraded our Remark plugin ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn",children:"@docusaurus/remark-plugin-npm2yarn"})," with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-markdown",children:"Run these commands!\n\n```bash npm2yarn\nnpm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n```\n"})}),"\n",(0,t.jsx)(i.Z,{children:(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn install\nyarn build\nyarn myCustomScript --some-arg\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm install\npnpm run build\npnpm run myCustomScript --some-arg\n"})})})]})}),"\n",(0,t.jsx)(r.h3,{id:"gtag-support-for-multiple-tracking-ids",children:"gtag support for multiple tracking IDs"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8620",children:"#8620"})," we added support for the ",(0,t.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"@docusaurus/plugin-google-gtag"})," plugin to declare multiple tracking IDs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n gtag: {\n trackingID: [\n // highlight-next-line\n 'G-<YOUR-NEW-GA4-ID>',\n // highlight-next-line\n 'UA-<YOUR-OLD-UA-ID>',\n ],\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(r.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})})," on ",(0,t.jsx)(r.strong,{children:"July 1, 2023"}),"."]}),(0,t.jsxs)(r.p,{children:["Docusaurus users should migrate to Google Analytics 4. Google ",(0,t.jsx)(r.strong,{children:"does not permit to migrate your existing Universal Analytics data"})," to your new Google Analytics 4 property."]}),(0,t.jsxs)(r.p,{children:["To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (",(0,t.jsx)(r.code,{children:"UA-*"}),") and new one (",(0,t.jsx)(r.code,{children:"G-*"}),"). Refer to the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated issue"})})," for details."]})]}),"\n",(0,t.jsx)(r.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8736",children:"#8736"}),", we improved how we render error messages and added initial support to render the full causal chain of an error (see ",(0,t.jsx)(r.a,{href:"https://h3manth.com/ES2022/#error-cause",children:"ES2022 Error Cause"}),")."]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["To see it in action, click here: ",(0,t.jsx)(c.Z,{cause:"Probably undefined is not a function \ud83d\ude04"})]})}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8735",children:"#8735"})," we also made navbar-related error messages clearer to help users understand what they did wrong."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus navbar error message screenshot",src:n(57688).Z+"",width:"1676",height:"1614"})}),"\n",(0,t.jsx)(r.h3,{id:"translations",children:"Translations"}),"\n",(0,t.jsx)(r.p,{children:"We made it possible to translate some new elements:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8677",children:"#8677"})," introduces a new ",(0,t.jsx)(r.code,{children:"process.env.DOCUSAURUS_CURRENT_LOCALE"})," (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl..."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8616",children:"#8616"})," allows to translate the navbar and footer logo alt text"]}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"We added default theme translation support for multiple languages:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["\ud83c\udded\ud83c\uddfa ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8668",children:"#8668"}),": Hungarian"]}),"\n",(0,t.jsxs)(r.li,{children:["\ud83c\uddf3\ud83c\uddf4 ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8631",children:"#8631"}),": Norwegian (Bokm\xe5l)"]}),"\n"]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["Completing theme translations is an ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,t.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8674",children:"#8674"}),": respect ",(0,t.jsx)(r.code,{children:"prefers-reduced-motion: reduce"})," media query"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8712",children:"#8712"}),": use a navbar item of type ",(0,t.jsx)(r.code,{children:"docSidebar"})," in template"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8801",children:"#8801"}),": allow tabs children to be falsy"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8757",children:"#8757"}),": make search page react to external query-string changes"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8803",children:"#8803"}),": fix code block buttons position in RTL"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8615",children:"#8615"}),": fix color mode toggle when using dark navbar"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8699",children:"#8699"}),": fix navbar dropdown tab focus bug"]}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Check the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"/changelog/2.4.0",children:"2.4.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function m(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(b,{...e})}):b(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var t=n(27378);const s={},a=t.createContext(s);function o(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0bc851e0.f68c4114.js b/assets/js/0bc851e0.e64ebecc.js similarity index 50% rename from assets/js/0bc851e0.f68c4114.js rename to assets/js/0bc851e0.e64ebecc.js index 380a25949d51..647692cf5d2f 100644 --- a/assets/js/0bc851e0.f68c4114.js +++ b/assets/js/0bc851e0.e64ebecc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33009],{47817:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},8300:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},48653:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(24246),n=t(71670);const a={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:t(47817).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["We are happy to announce ",(0,r.jsx)(s.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,r.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Docusaurus 2.1 social card",src:t(8300).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(27378);const n={},a=r.createContext(n);function o(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33009],{47817:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},8300:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},48653:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var r=t(24246),a=t(71670);const n={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:t(47817).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["We are happy to announce ",(0,r.jsx)(s.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,r.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Docusaurus 2.1 social card",src:t(8300).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(27378);const a={},n=r.createContext(a);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c7845dd.47b3cdba.js b/assets/js/0c7845dd.47b3cdba.js new file mode 100644 index 000000000000..65a71d6d7735 --- /dev/null +++ b/assets/js/0c7845dd.47b3cdba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43473],{62711:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_max_heading_level:5},l=void 0,d={id:"toc/toc-_-5",title:"toc-_-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx",sourceDirName:"toc",slug:"/toc/toc-_-5",permalink:"/tests/docs/toc/toc-_-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"},next:{title:"toc-_-_",permalink:"/tests/docs/toc/toc-_-_"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-_-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c7845dd.585f79ef.js b/assets/js/0c7845dd.585f79ef.js deleted file mode 100644 index 495f927942bc..000000000000 --- a/assets/js/0c7845dd.585f79ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43473],{62711:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_max_heading_level:5},l=void 0,d={id:"toc/toc-_-5",title:"toc-_-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx",sourceDirName:"toc",slug:"/toc/toc-_-5",permalink:"/tests/docs/toc/toc-_-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"},next:{title:"toc-_-_",permalink:"/tests/docs/toc/toc-_-_"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-_-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e4d8110.3a61cab3.js b/assets/js/0e4d8110.d11ec50d.js similarity index 79% rename from assets/js/0e4d8110.3a61cab3.js rename to assets/js/0e4d8110.d11ec50d.js index 34ba82797c1c..746233f6eb4b 100644 --- a/assets/js/0e4d8110.3a61cab3.js +++ b/assets/js/0e4d8110.d11ec50d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84733],{61132:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),s=n(40624),i=n(75527),c=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function g({queryString:e=!1,groupId:t}){const n=(0,c.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,a._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,i]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=h(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[a,u]=g({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return m({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{f&&c(f)}),[f]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),s=c[r].value;s!==n&&(a(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:c.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},t,e)),(0,r.jsx)(k,v({},t,e))]})}function E(e){const t=(0,y.Z)();return(0,r.jsx)(S,w(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),s=n(80474),i=n(3620);const c={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const c=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${c}`:c,a=`#${l}`,u=(0,i.k6)();return(0,s.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,s]=o.Children.toArray(e.props.children),i=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=i.current)||void 0===e||e.focus()}),[i]);const l=o.Children.map(s.props.children,(e=>(0,r.jsx)(a,{name:t,ref:i,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),s=n(92053),i=n(36712),c=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,s.zu)(u).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,i.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(i.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,i.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),s=n(27378),i=n(40624),c=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(g.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:g.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const C=e=>`${e};`;function D(e){var t,{children:n,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=h();var d;const p=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:a},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function N(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){N(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:s},s,r);var A,_,V=n(89583),$=n(6324),R=n.n($);function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),q=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(U=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){F(e,t,n[t])}))}return e}({},H),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(H);function G(e,t){const n=e.map((e=>{const{start:n,end:r}=W[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&q.test(s)){const e=s.match(q).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(r,o),c=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<c.length;){const e=c[b].match(i);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),c.splice(b,1)}n=c.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,i.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},c),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=h(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:i}}(),g=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:y}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:b,code:y,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,i.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function De(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ne(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ie(e,t,n[t])}))}return e}const Te=(Le=function(e){var{children:t}=e,n=Ne(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof i?Ee:re;return(0,o.jsx)(l,De(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}({},n),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(D,Be({scope:Z},e)):(0,o.jsx)(Le,Be({},e))});var Le;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},56726:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),s=n(97555),i=n(61132),c=n(52605),l=n(82064);const a={sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},u="\ud83d\udce6 plugin-sitemap",d={id:"api/plugins/plugin-sitemap",title:"\ud83d\udce6 plugin-sitemap",description:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.",source:"@site/docs/api/plugins/plugin-sitemap.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-sitemap",permalink:"/docs/api/plugins/@docusaurus/plugin-sitemap",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"},next:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>CreateSitemapItemsFn</code>",id:"CreateSitemapItemsFn",level:4},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-sitemap",children:"\ud83d\udce6 plugin-sitemap"})}),"\n","\n",(0,r.jsx)(t.p,{children:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-sitemap\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"lastmod"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'date' | 'datetime' | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"null"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"date"})," is YYYY-MM-DD. ",(0,r.jsx)(t.code,{children:"datetime"})," is a ISO 8601 datetime. ",(0,r.jsx)(t.code,{children:"null"})," is disabled. See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"changefreq"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'weekly'"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"priority"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"number | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0.5"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"ignorePatterns"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"A list of glob patterns; matching route paths will be filtered from the sitemap. Note that you may need to include the base URL in here."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"filename"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"sitemap.xml"})}),(0,r.jsx)(t.td,{children:"The path to the created sitemap file, relative to the output directory. Useful if you have two plugin instances outputting two files."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"createSitemapItems"})}),(0,r.jsx)(t.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(t.a,{href:"#CreateSitemapItemsFn",children:"CreateSitemapItemsFn"})," | undefined"]})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"undefined"})}),(0,r.jsx)(t.td,{children:"An optional function which can be used to transform and / or filter the items in the sitemap."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(t.h4,{id:"CreateSitemapItemsFn",children:(0,r.jsx)(t.code,{children:"CreateSitemapItemsFn"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"type CreateSitemapItemsFn = (params: {\n siteConfig: DocusaurusConfig;\n routes: RouteConfig[];\n defaultCreateSitemapItems: CreateSitemapItemsFn;\n}) => Promise<SitemapItem[]>;\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"info",children:[(0,r.jsx)(t.p,{children:"This plugin also respects some site config:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#noIndex",children:(0,r.jsx)(t.code,{children:"noIndex"})}),": results in no sitemap generated"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:(0,r.jsx)(t.code,{children:"trailingSlash"})}),": determines if the URLs in the sitemap have trailing slashes"]}),"\n"]})]}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["About ",(0,r.jsx)(t.code,{children:"lastmod"})]}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"lastmod"})," option will only output a sitemap ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag if plugins provide ",(0,r.jsx)(t.a,{href:"/docs/api/plugin-methods/lifecycle-apis#addRoute",children:"route metadata"})," attributes ",(0,r.jsx)(t.code,{children:"sourceFilePath"})," and/or ",(0,r.jsx)(t.code,{children:"lastUpdatedAt"}),"."]}),(0,r.jsxs)(t.p,{children:["All the official content plugins provide the metadata for routes backed by a content file (Markdown, MDX or React page components), but it is possible third-party plugin authors do not provide this information, and the plugin will not be able to output a ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag for their routes."]})]}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-sitemap",presetOptionName:"sitemap",code:"{\n lastmod: 'date',\n changefreq: 'weekly',\n priority: 0.5,\n ignorePatterns: ['/tags/**'],\n filename: 'sitemap.xml',\n createSitemapItems: async (params) => {\n const {defaultCreateSitemapItems, ...rest} = params;\n const items = await defaultCreateSitemapItems(rest);\n return items.filter((item) => !item.url.includes('/page/'));\n },\n}"}),"\n",(0,r.jsxs)(t.p,{children:["You can find your sitemap at ",(0,r.jsx)(t.code,{children:"/sitemap.xml"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84733],{61132:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),s=n(40624),i=n(75527),c=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function g({queryString:e=!1,groupId:t}){const n=(0,c.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,a._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,i]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=h(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[a,u]=g({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return m({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{f&&c(f)}),[f]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),s=c[r].value;s!==n&&(a(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:c.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},t,e)),(0,r.jsx)(k,v({},t,e))]})}function E(e){const t=(0,y.Z)();return(0,r.jsx)(S,w(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),s=n(80474),i=n(3620);const c={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const c=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${c}`:c,a=`#${l}`,u=(0,i.k6)();return(0,s.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,s]=o.Children.toArray(e.props.children),i=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=i.current)||void 0===e||e.focus()}),[i]);const l=o.Children.map(s.props.children,(e=>(0,r.jsx)(a,{name:t,ref:i,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),s=n(92053),i=n(36712),c=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,s.zu)(u).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,i.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(i.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,i.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),s=n(27378),i=n(40624),c=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(g.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:g.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const C=e=>`${e};`;function D(e){var t,{children:n,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=h();var d;const p=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:a},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function N(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){N(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:s},s,r);var A,_,V=n(89583),$=n(6324),R=n.n($);function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),q=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(U=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},H),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(H);function G(e,t){const n=e.map((e=>{const{start:n,end:r}=W[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&q.test(s)){const e=s.match(q).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(r,o),c=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<c.length;){const e=c[b].match(i);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),c.splice(b,1)}n=c.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,i.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},c),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=h(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:i}}(),g=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(F))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:y}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:b,code:y,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,i.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function De(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ne(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ie(e,t,n[t])}))}return e}const Te=(Le=function(e){var{children:t}=e,n=Ne(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof i?Ee:re;return(0,o.jsx)(l,De(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}({},n),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(D,Be({scope:Z},e)):(0,o.jsx)(Le,Be({},e))});var Le;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},56726:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),s=n(97555),i=n(61132),c=n(52605),l=n(82064);const a={sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},u="\ud83d\udce6 plugin-sitemap",d={id:"api/plugins/plugin-sitemap",title:"\ud83d\udce6 plugin-sitemap",description:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.",source:"@site/docs/api/plugins/plugin-sitemap.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-sitemap",permalink:"/docs/api/plugins/@docusaurus/plugin-sitemap",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"},next:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>CreateSitemapItemsFn</code>",id:"CreateSitemapItemsFn",level:4},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-sitemap",children:"\ud83d\udce6 plugin-sitemap"})}),"\n","\n",(0,r.jsx)(t.p,{children:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-sitemap\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"lastmod"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'date' | 'datetime' | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"null"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"date"})," is YYYY-MM-DD. ",(0,r.jsx)(t.code,{children:"datetime"})," is a ISO 8601 datetime. ",(0,r.jsx)(t.code,{children:"null"})," is disabled. See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"changefreq"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'weekly'"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"priority"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"number | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0.5"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"ignorePatterns"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"A list of glob patterns; matching route paths will be filtered from the sitemap. Note that you may need to include the base URL in here."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"filename"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"sitemap.xml"})}),(0,r.jsx)(t.td,{children:"The path to the created sitemap file, relative to the output directory. Useful if you have two plugin instances outputting two files."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"createSitemapItems"})}),(0,r.jsx)(t.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(t.a,{href:"#CreateSitemapItemsFn",children:"CreateSitemapItemsFn"})," | undefined"]})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"undefined"})}),(0,r.jsx)(t.td,{children:"An optional function which can be used to transform and / or filter the items in the sitemap."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(t.h4,{id:"CreateSitemapItemsFn",children:(0,r.jsx)(t.code,{children:"CreateSitemapItemsFn"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"type CreateSitemapItemsFn = (params: {\n siteConfig: DocusaurusConfig;\n routes: RouteConfig[];\n defaultCreateSitemapItems: CreateSitemapItemsFn;\n}) => Promise<SitemapItem[]>;\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"info",children:[(0,r.jsx)(t.p,{children:"This plugin also respects some site config:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#noIndex",children:(0,r.jsx)(t.code,{children:"noIndex"})}),": results in no sitemap generated"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:(0,r.jsx)(t.code,{children:"trailingSlash"})}),": determines if the URLs in the sitemap have trailing slashes"]}),"\n"]})]}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["About ",(0,r.jsx)(t.code,{children:"lastmod"})]}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"lastmod"})," option will only output a sitemap ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag if plugins provide ",(0,r.jsx)(t.a,{href:"/docs/api/plugin-methods/lifecycle-apis#addRoute",children:"route metadata"})," attributes ",(0,r.jsx)(t.code,{children:"sourceFilePath"})," and/or ",(0,r.jsx)(t.code,{children:"lastUpdatedAt"}),"."]}),(0,r.jsxs)(t.p,{children:["All the official content plugins provide the metadata for routes backed by a content file (Markdown, MDX or React page components), but it is possible third-party plugin authors do not provide this information, and the plugin will not be able to output a ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag for their routes."]})]}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-sitemap",presetOptionName:"sitemap",code:"{\n lastmod: 'date',\n changefreq: 'weekly',\n priority: 0.5,\n ignorePatterns: ['/tags/**'],\n filename: 'sitemap.xml',\n createSitemapItems: async (params) => {\n const {defaultCreateSitemapItems, ...rest} = params;\n const items = await defaultCreateSitemapItems(rest);\n return items.filter((item) => !item.url.includes('/page/'));\n },\n}"}),"\n",(0,r.jsxs)(t.p,{children:["You can find your sitemap at ",(0,r.jsx)(t.code,{children:"/sitemap.xml"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/0e9c6edc.4a173775.js b/assets/js/0e9c6edc.4a173775.js deleted file mode 100644 index fd24b294f10b..000000000000 --- a/assets/js/0e9c6edc.4a173775.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40639],{47817:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},29724:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png"},8300:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},16506:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=s(24246),i=s(71670);const o={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},r=void 0,a={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:s(47817).Z,authorsImageUrls:[void 0]},l=[{value:"Highlights",id:"highlights",level:2},{value:"DocCardList improvements",id:"doccardlist-improvements",level:3},{value:"<code>noindex</code> improvements",id:"noindex-improvements",level:3},{value:"Overriding default meta tags",id:"overriding-default-meta-tags",level:3},{value:"Ukrainian translations",id:"ukrainian-translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["We are happy to announce ",(0,t.jsx)(n.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,t.jsxs)(n.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(n.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Docusaurus 2.1 social card",src:s(8300).Z+"",width:"1200",height:"600"})}),"\n",(0,t.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(n.h3,{id:"doccardlist-improvements",children:"DocCardList improvements"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8008",children:"#8008"}),", we simplified the usage of the",(0,t.jsx)(n.code,{children:"<DocCardList>"})," component, that is notably used on sidebar category generated index pages."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"items"})," prop is now optional, and will be automatically inferred from the content of the parent sidebar category:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:"import DocCardList from '@theme/DocCardList';\n- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';\n\n- <DocCardList items={useCurrentSidebarCategory().items}/>\n+ <DocCardList/>\n"})}),"\n",(0,t.jsx)(n.p,{children:"Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"simplified DocCardList component",src:s(29724).Z+"",width:"1062",height:"489"})}),"\n",(0,t.jsxs)(n.h3,{id:"noindex-improvements",children:[(0,t.jsx)(n.code,{children:"noindex"})," improvements"]}),"\n",(0,t.jsxs)(n.p,{children:["We improved the support of the ",(0,t.jsxs)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/block-indexing",children:[(0,t.jsx)(n.code,{children:"noindex"})," meta ",(0,t.jsx)(n.code,{children:"robots"})," directive"]}),", a way to signal search engines you don't want a specific page to be indexed."]}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7963",children:"#7963"}),", we allow ",(0,t.jsx)(n.code,{children:"noindex"})," to be configured on a per-docs-version basis."]}),"\n",(0,t.jsxs)(n.p,{children:["Use the following plugin options to tell crawlers you don't want the ",(0,t.jsx)(n.code,{children:"1.0.0"})," version to be indexed:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"const options = {\n versions: {\n '1.0.0': {\n noIndex: true,\n },\n },\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"In practice, Docusaurus will add the following meta to each page of that version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'<meta name="robots" content="noindex, nofollow" />\n'})}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7964",children:"#7964"}),", we also fixed a bug where the sitemap plugin would still contain pages that have a ",(0,t.jsx)(n.code,{children:"noindex"})," directive. Now the sitemap plugin will reliably filter out all the pages containing ",(0,t.jsx)(n.code,{children:"noindex"})," directives."]}),"\n",(0,t.jsx)(n.h3,{id:"overriding-default-meta-tags",children:"Overriding default meta tags"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7952",children:"#7952"}),", it becomes possible to override default html meta tags you couldn't before:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'<>\n {siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n</>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["It is now possible to use ",(0,t.jsx)(n.code,{children:"<Head>"})," or ",(0,t.jsx)(n.code,{children:"themeConfig.metadata"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"viewport"})," meta"]}),"\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"robots"})," meta: you could mark your site as ",(0,t.jsx)(n.code,{children:"noIndex"}),", but except for specific pages that should be indexed"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"ukrainian-translations",children:"Ukrainian translations"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7953",children:"#7953"}),", we added default classic theme translations for the Ukrainian language."]}),"\n",(0,t.jsx)(n.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsxs)(n.p,{children:["Check the ",(0,t.jsx)(n.a,{href:"/changelog/2.1.0",children:"2.1.0 changelog entry"})," for an exhaustive list of changes."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(27378);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e9c6edc.9a5526a6.js b/assets/js/0e9c6edc.9a5526a6.js new file mode 100644 index 000000000000..b0fa92c691f3 --- /dev/null +++ b/assets/js/0e9c6edc.9a5526a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40639],{47817:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},29724:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png"},8300:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},16506:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=s(24246),i=s(71670);const o={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},a=void 0,r={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:s(47817).Z,authorsImageUrls:[void 0]},l=[{value:"Highlights",id:"highlights",level:2},{value:"DocCardList improvements",id:"doccardlist-improvements",level:3},{value:"<code>noindex</code> improvements",id:"noindex-improvements",level:3},{value:"Overriding default meta tags",id:"overriding-default-meta-tags",level:3},{value:"Ukrainian translations",id:"ukrainian-translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["We are happy to announce ",(0,t.jsx)(n.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,t.jsxs)(n.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(n.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Docusaurus 2.1 social card",src:s(8300).Z+"",width:"1200",height:"600"})}),"\n",(0,t.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(n.h3,{id:"doccardlist-improvements",children:"DocCardList improvements"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8008",children:"#8008"}),", we simplified the usage of the",(0,t.jsx)(n.code,{children:"<DocCardList>"})," component, that is notably used on sidebar category generated index pages."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"items"})," prop is now optional, and will be automatically inferred from the content of the parent sidebar category:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:"import DocCardList from '@theme/DocCardList';\n- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';\n\n- <DocCardList items={useCurrentSidebarCategory().items}/>\n+ <DocCardList/>\n"})}),"\n",(0,t.jsx)(n.p,{children:"Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"simplified DocCardList component",src:s(29724).Z+"",width:"1062",height:"489"})}),"\n",(0,t.jsxs)(n.h3,{id:"noindex-improvements",children:[(0,t.jsx)(n.code,{children:"noindex"})," improvements"]}),"\n",(0,t.jsxs)(n.p,{children:["We improved the support of the ",(0,t.jsxs)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/block-indexing",children:[(0,t.jsx)(n.code,{children:"noindex"})," meta ",(0,t.jsx)(n.code,{children:"robots"})," directive"]}),", a way to signal search engines you don't want a specific page to be indexed."]}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7963",children:"#7963"}),", we allow ",(0,t.jsx)(n.code,{children:"noindex"})," to be configured on a per-docs-version basis."]}),"\n",(0,t.jsxs)(n.p,{children:["Use the following plugin options to tell crawlers you don't want the ",(0,t.jsx)(n.code,{children:"1.0.0"})," version to be indexed:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"const options = {\n versions: {\n '1.0.0': {\n noIndex: true,\n },\n },\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"In practice, Docusaurus will add the following meta to each page of that version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'<meta name="robots" content="noindex, nofollow" />\n'})}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7964",children:"#7964"}),", we also fixed a bug where the sitemap plugin would still contain pages that have a ",(0,t.jsx)(n.code,{children:"noindex"})," directive. Now the sitemap plugin will reliably filter out all the pages containing ",(0,t.jsx)(n.code,{children:"noindex"})," directives."]}),"\n",(0,t.jsx)(n.h3,{id:"overriding-default-meta-tags",children:"Overriding default meta tags"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7952",children:"#7952"}),", it becomes possible to override default html meta tags you couldn't before:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'<>\n {siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n</>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["It is now possible to use ",(0,t.jsx)(n.code,{children:"<Head>"})," or ",(0,t.jsx)(n.code,{children:"themeConfig.metadata"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"viewport"})," meta"]}),"\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"robots"})," meta: you could mark your site as ",(0,t.jsx)(n.code,{children:"noIndex"}),", but except for specific pages that should be indexed"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"ukrainian-translations",children:"Ukrainian translations"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7953",children:"#7953"}),", we added default classic theme translations for the Ukrainian language."]}),"\n",(0,t.jsx)(n.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsxs)(n.p,{children:["Check the ",(0,t.jsx)(n.a,{href:"/changelog/2.1.0",children:"2.1.0 changelog entry"})," for an exhaustive list of changes."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>a});var t=s(27378);const i={},o=t.createContext(i);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1267474e.afae71c6.js b/assets/js/1267474e.afae71c6.js deleted file mode 100644 index 4985d278ca03..000000000000 --- a/assets/js/1267474e.afae71c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61221],{61132:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(24246),i=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>T});var r=n(24246),i=n(27378),a=n(40624),o=n(75527),s=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function m(e){var t,n;return null!==(n=null===(t=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=null!=t?t:function(e){return m(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function g({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const n=(0,s.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(r),o=(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[a,o]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,a=b(e),[o,s]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,u]=f({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),m=(()=>{const e=null!=c?c:h;return g({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{m&&s(m)}),[m]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){y(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:i,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),a=s[r].value;a!==n&&(c(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},i),{className:(0,a.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function I({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(I,w({},t,e))]})}function T(e){const t=(0,x.Z)();return(0,r.jsx)(P,O(w({},e),{children:m(e.children)}),String(t))}},29510:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(24246),i=n(71670),a=n(97555),o=n(61132);const s={slug:"/migration/v2/automated"},l="Automated migration",c={id:"migration/v2/migration-automated",title:"Automated migration",description:"The migration CLI automatically migrates your v1 website to a v2 website.",source:"@site/docs/migration/v2/migration-automated.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/automated",permalink:"/docs/migration/v2/automated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/migration/v2/automated"},sidebar:"docs",previous:{title:"Overview",permalink:"/docs/migration/v2"},next:{title:"Manual migration",permalink:"/docs/migration/v2/manual"}},u={},d=[{value:"Options",id:"options",level:4}];function h(e){const t={admonition:"admonition",code:"code",h1:"h1",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"automated-migration",children:"Automated migration"})}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI automatically migrates your v1 website to a v2 website."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Manual work is still required after using the migration CLI, as we can't automate a full migration"})}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI migrates:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Site configurations (from ",(0,r.jsx)(t.code,{children:"siteConfig.js"})," to ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"}),")"]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"package.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"sidebars.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/docs"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/blog"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/static"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"versioned_sidebar.json"})," and ",(0,r.jsx)(t.code,{children:"/versioned_docs"})," if your site uses versioning"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"To use the migration CLI, follow these steps:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Before using the migration CLI, ensure that ",(0,r.jsx)(t.code,{children:"/docs"}),", ",(0,r.jsx)(t.code,{children:"/blog"}),", ",(0,r.jsx)(t.code,{children:"/static"}),", ",(0,r.jsx)(t.code,{children:"sidebars.json"}),", ",(0,r.jsx)(t.code,{children:"siteConfig.js"}),", ",(0,r.jsx)(t.code,{children:"package.json"})," follow the expected structure."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"To migrate your v1 website, run the migration CLI with the appropriate filesystem paths:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# migration command format\nnpx @docusaurus/migrate migrate <v1 website directory> <desired v2 website directory>\n\n# example\nnpx @docusaurus/migrate migrate ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"To view your new website locally, go into your v2 website's directory and start your development server."}),"\n"]}),"\n",(0,r.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nnpm install\nnpm start\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nyarn install\nyarn start\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\npnpm install\npnpm start\n"})})})]}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"The migration CLI updates existing files. Be sure to have committed them first!"})}),"\n",(0,r.jsx)(t.h4,{id:"options",children:"Options"}),"\n",(0,r.jsx)(t.p,{children:"You can add option flags to the migration CLI to automatically migrate Markdown content and pages to v2. It is likely that you will still need to make some manual changes to achieve your desired result."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--mdx"})}),(0,r.jsx)(t.td,{children:"Add this flag to convert Markdown to MDX automatically"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--page"})}),(0,r.jsx)(t.td,{children:"Add this flag to migrate pages automatically"})]})]})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# example using options\nnpx @docusaurus/migrate migrate --mdx --page ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"danger",children:[(0,r.jsx)(t.p,{children:"The migration of pages and MDX is still a work in progress."}),(0,r.jsxs)(t.p,{children:["We recommend you to try to run the pages without these options, commit, and then try to run the migration again with the ",(0,r.jsx)(t.code,{children:"--page"})," and ",(0,r.jsx)(t.code,{children:"--mdx"})," options."]}),(0,r.jsx)(t.p,{children:"This way, you'd be able to easily inspect and fix the diff."})]})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var r=n(27378);const i={},a=r.createContext(i);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1267474e.e1aa074c.js b/assets/js/1267474e.e1aa074c.js new file mode 100644 index 000000000000..567cdca36f26 --- /dev/null +++ b/assets/js/1267474e.e1aa074c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61221],{61132:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(24246),a=(n(27378),n(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>T});var r=n(24246),a=n(27378),i=n(40624),o=n(75527),s=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function m(e){var t,n;return null!==(n=null===(t=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=null!=t?t:function(e){return m(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function g({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const n=(0,s.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),i=(0,c._X)(r),o=(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[i,o]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=b(e),[o,s]=(0,a.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[c,u]=f({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,a.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),m=(()=>{const e=null!=c?c:h;return g({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{m&&s(m)}),[m]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),p(e)}),[u,p,i]),tabValues:i}}var x=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){y(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:a,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),i=s[r].value;i!==n&&(c(t),a(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:a})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},a),{className:(0,i.Z)("tabs__item",v.tabItem,null==a?void 0:a.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function I({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(I,w({},t,e))]})}function T(e){const t=(0,x.Z)();return(0,r.jsx)(P,O(w({},e),{children:m(e.children)}),String(t))}},29510:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(24246),a=n(71670),i=n(97555),o=n(61132);const s={slug:"/migration/v2/automated"},l="Automated migration",c={id:"migration/v2/migration-automated",title:"Automated migration",description:"The migration CLI automatically migrates your v1 website to a v2 website.",source:"@site/docs/migration/v2/migration-automated.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/automated",permalink:"/docs/migration/v2/automated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/migration/v2/automated"},sidebar:"docs",previous:{title:"Overview",permalink:"/docs/migration/v2"},next:{title:"Manual migration",permalink:"/docs/migration/v2/manual"}},u={},d=[{value:"Options",id:"options",level:4}];function h(e){const t={admonition:"admonition",code:"code",h1:"h1",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"automated-migration",children:"Automated migration"})}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI automatically migrates your v1 website to a v2 website."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Manual work is still required after using the migration CLI, as we can't automate a full migration"})}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI migrates:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Site configurations (from ",(0,r.jsx)(t.code,{children:"siteConfig.js"})," to ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"}),")"]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"package.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"sidebars.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/docs"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/blog"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/static"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"versioned_sidebar.json"})," and ",(0,r.jsx)(t.code,{children:"/versioned_docs"})," if your site uses versioning"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"To use the migration CLI, follow these steps:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Before using the migration CLI, ensure that ",(0,r.jsx)(t.code,{children:"/docs"}),", ",(0,r.jsx)(t.code,{children:"/blog"}),", ",(0,r.jsx)(t.code,{children:"/static"}),", ",(0,r.jsx)(t.code,{children:"sidebars.json"}),", ",(0,r.jsx)(t.code,{children:"siteConfig.js"}),", ",(0,r.jsx)(t.code,{children:"package.json"})," follow the expected structure."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"To migrate your v1 website, run the migration CLI with the appropriate filesystem paths:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# migration command format\nnpx @docusaurus/migrate migrate <v1 website directory> <desired v2 website directory>\n\n# example\nnpx @docusaurus/migrate migrate ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"To view your new website locally, go into your v2 website's directory and start your development server."}),"\n"]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nnpm install\nnpm start\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nyarn install\nyarn start\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\npnpm install\npnpm start\n"})})})]}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"The migration CLI updates existing files. Be sure to have committed them first!"})}),"\n",(0,r.jsx)(t.h4,{id:"options",children:"Options"}),"\n",(0,r.jsx)(t.p,{children:"You can add option flags to the migration CLI to automatically migrate Markdown content and pages to v2. It is likely that you will still need to make some manual changes to achieve your desired result."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--mdx"})}),(0,r.jsx)(t.td,{children:"Add this flag to convert Markdown to MDX automatically"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--page"})}),(0,r.jsx)(t.td,{children:"Add this flag to migrate pages automatically"})]})]})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# example using options\nnpx @docusaurus/migrate migrate --mdx --page ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"danger",children:[(0,r.jsx)(t.p,{children:"The migration of pages and MDX is still a work in progress."}),(0,r.jsxs)(t.p,{children:["We recommend you to try to run the pages without these options, commit, and then try to run the migration again with the ",(0,r.jsx)(t.code,{children:"--page"})," and ",(0,r.jsx)(t.code,{children:"--mdx"})," options."]}),(0,r.jsx)(t.p,{children:"This way, you'd be able to easily inspect and fix the diff."})]})]})}function p(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var r=n(27378);const a={},i=r.createContext(a);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/138ea42e.e47f9065.js b/assets/js/138ea42e.e47f9065.js deleted file mode 100644 index ab063bafbdb5..000000000000 --- a/assets/js/138ea42e.e47f9065.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29987],{86949:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>r,toc:()=>c});var a=s(24246),o=s(71670);const n={title:"Towards Docusaurus 2",authors:"endiliey",tags:["new","adoption"]},i=void 0,r={permalink:"/blog/2018/09/11/Towards-Docusaurus-2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx",source:"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx",title:"Towards Docusaurus 2",description:"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.",date:"2018-09-11T00:00:00.000Z",tags:[{inline:!1,label:"New",permalink:"/blog/tags/new"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:9.25,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey",page:null}],frontMatter:{title:"Towards Docusaurus 2",authors:"endiliey",tags:["new","adoption"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"},nextItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},u={authorsImageUrls:[void 0]},c=[];function l(e){const t={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t.p,{children:["Docusaurus was ",(0,a.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"officially announced"})," over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as ",(0,a.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"}),", ",(0,a.jsx)(t.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,a.jsx)(t.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,a.jsx)(t.a,{href:"https://reasonml.github.io/",children:"Reason"})," and ",(0,a.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89."})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>i});var a=s(27378);const o={},n=a.createContext(o);function i(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/138ea42e.fcc3a7ed.js b/assets/js/138ea42e.fcc3a7ed.js new file mode 100644 index 000000000000..67e8a52d2902 --- /dev/null +++ b/assets/js/138ea42e.fcc3a7ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29987],{86949:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>r,toc:()=>c});var s=a(24246),o=a(71670);const n={title:"Towards Docusaurus 2",authors:"endiliey",tags:["new","adoption"]},i=void 0,r={permalink:"/blog/2018/09/11/Towards-Docusaurus-2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx",source:"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx",title:"Towards Docusaurus 2",description:"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.",date:"2018-09-11T00:00:00.000Z",tags:[{inline:!1,label:"New",permalink:"/blog/tags/new"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:9.25,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey",page:null}],frontMatter:{title:"Towards Docusaurus 2",authors:"endiliey",tags:["new","adoption"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"},nextItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},u={authorsImageUrls:[void 0]},c=[];function l(e){const t={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Docusaurus was ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"officially announced"})," over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as ",(0,s.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"}),", ",(0,s.jsx)(t.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,s.jsx)(t.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,s.jsx)(t.a,{href:"https://reasonml.github.io/",children:"Reason"})," and ",(0,s.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89."})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>i});var s=a(27378);const o={},n=s.createContext(o);function i(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/141512d1.08f4755e.js b/assets/js/141512d1.08f4755e.js new file mode 100644 index 000000000000..103f8d10d911 --- /dev/null +++ b/assets/js/141512d1.08f4755e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44788],{36367:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},49357:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},5444:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},97865:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},72807:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=s(24246),o=s(71670);const i={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},t=void 0,a={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.",date:"2023-09-29T00:00:00.000Z",tags:[{inline:!1,label:"Maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.975,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:s(36367).Z,authorsImageUrls:[void 0]},d=[{value:"Preparatory work",id:"preparatory-work",level:2},{value:"Preparing content for MDX v3",id:"preparing-content-for-mdx-v3",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Other breaking changes",id:"other-breaking-changes",level:2},{value:"Node.js 18.0",id:"nodejs-180",level:3},{value:"React 18.0",id:"react-180",level:3},{value:"TypeScript 5.0",id:"typescript-50",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"Admonition warning",id:"admonition-warning",level:3},{value:"Versioned sidebars",id:"versioned-sidebars",level:3},{value:"Try Docusaurus v3 today",id:"try-docusaurus-v3-today",level:2},{value:"Ask for help",id:"ask-for-help",level:2},{value:"Conclusion",id:"conclusion",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/docs/next/migration/v3",children:"upgrade guide"})," for the most up-to-date migration steps."]})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Docusaurus v3"})," is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,r.jsx)(n.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,r.jsx)(n.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 comes with a few ",(0,r.jsx)(n.strong,{children:"breaking changes"}),", many of which can be ",(0,r.jsx)(n.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,r.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,r.jsx)(n.strong,{children:"more strictly"})," and with ",(0,r.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:s(97865).Z+"",width:"1040",height:"546"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"v3.0.0-beta.0 release notes"})," for an exhaustive list."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"Don't be afraid",type:"tip",children:[(0,r.jsx)(n.p,{children:"There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes."}),(0,r.jsxs)(n.p,{children:["If your site is relatively small, with only a few customizations, you can probably ",(0,r.jsx)(n.a,{href:"#try-docusaurus-v3-today",children:"upgrade to Docusaurus v3"})," immediately."]})]}),"\n",(0,r.jsx)(n.h2,{id:"preparatory-work",children:"Preparatory work"}),"\n",(0,r.jsxs)(n.p,{children:["Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest ",(0,r.jsx)(n.a,{href:"/versions",children:"Docusaurus v2 version"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Depending on the complexity of your site, it may be a good idea to adopt the ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression testing workflow"})," that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade."]}),"\n",(0,r.jsxs)(n.p,{children:["We also recommend using the ",(0,r.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,r.jsx)(n.code,{children:"import"}),", or ",(0,r.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, ",(0,r.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,r.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"preparing-content-for-mdx-v3",children:"Preparing content for MDX v3"}),"\n",(0,r.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,r.jsx)(n.code,{children:".md"})," and ",(0,r.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,r.jsxs)(n.p,{children:["MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters."]}),"\n",(0,r.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,r.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,r.jsx)(n.admonition,{title:"Ask for help",type:"tip",children:(0,r.jsxs)(n.p,{children:["We have a dedicated ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})," discussion."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,r.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,r.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,r.jsx)(n.p,{children:"Each MDX version comes with its own playground:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,r.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"MDX"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(5444).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,r.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3."}),"\n",(0,r.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,r.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,r.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,r.jsxs)(n.p,{children:["We provide a ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,r.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(49357).Z+"",width:"1161",height:"417"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"This CLI is a best effort, and will only report compilation errors."}),(0,r.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"Docusaurus PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/react-native-website/pull/3780",children:"React-Native PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jestjs/jest/pull/14463",children:"Jest PR"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"These upgrades permitted us to aggregate the most common content problems, and document how to best handle them."}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"{"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,r.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"<"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"<"})," or ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\<"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus supports ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,r.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,r.jsx)(n.code,{children:"<"})," and ",(0,r.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,r.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,r.jsxs)(n.p,{children:["For users providing a ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,r.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,r.jsx)(n.code,{children:"h1"})," only gets used for ",(0,r.jsx)(n.code,{children:"# hi"})," but not for ",(0,r.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,r.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,r.jsxs)(n.p,{children:["Your ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,r.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,r.jsx)(n.strong,{children:"lower-case"}),": ",(0,r.jsx)(n.code,{children:"p"}),", ",(0,r.jsx)(n.code,{children:"h1"}),", ",(0,r.jsx)(n.code,{children:"img"}),", ",(0,r.jsx)(n.code,{children:"a"}),"..."]}),(0,r.jsxs)(n.p,{children:["For any other element, ",(0,r.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,r.jsxs)(n.p,{children:["In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,r.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,r.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,r.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you don't want an extra ",(0,r.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})}),(0,r.jsxs)(n.p,{children:['If your content contains "Markdown inlines" (',(0,r.jsx)(n.code,{children:"**"}),", ",(0,r.jsx)(n.code,{children:"*"}),", ",(0,r.jsx)(n.code,{children:"_"}),", ",(0,r.jsx)(n.code,{children:"[link](/path)"}),"), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade."]})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,r.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,r.jsxs)(n.p,{children:["Due to ",(0,r.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:":"})]}),"\n",(0,r.jsxs)(n.li,{children:["Add a space after ",(0,r.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,r.jsx)(n.code,{children:": text"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\:"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})}),"\n",(0,r.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,r.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,r.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,r.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,r.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,r.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,r.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,r.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,r.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,r.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,r.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,r.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,r.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,r.jsx)(n.h2,{id:"other-breaking-changes",children:"Other breaking changes"}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"nodejs-180",children:"Node.js 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Node.js 16 ",(0,r.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"react-180",children:"React 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site."}),"\n",(0,r.jsx)(n.p,{children:"Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Read the official ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your first-party React code to figure out which components might be affected this React 18 upgrade."]}),(0,r.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,r.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript-50",children:"TypeScript 5.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"TypeScript >= 5.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,r.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,r.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,r.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "^3.0.0-beta.0",\n }\n }\n'})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,r.jsx)(n.h3,{id:"admonition-warning",children:"Admonition warning"}),"\n",(0,r.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,r.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,r.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.p,{children:["However, the color and icon is historically wrong. Docusaurus v3 re-introduces ",(0,r.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,r.jsx)(n.code,{children:":::danger"})," instead."]}),(0,r.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,r.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,r.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,r.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,r.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,r.jsx)(n.code,{children:":::danger"})," (red)."]})]}),"\n",(0,r.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned sidebars"}),"\n",(0,r.jsxs)(n.p,{children:["This breaking change will only affect ",(0,r.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating version ",(0,r.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,r.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly."}),(0,r.jsx)(n.p,{children:"You can remove the useless versioned prefix from your versioned sidebars."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,r.jsx)(n.h2,{id:"try-docusaurus-v3-today",children:"Try Docusaurus v3 today"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"in beta"}),", and already used in production by ",(0,r.jsx)(n.a,{href:"https://reactnative.dev",children:"React-Native"}),", ",(0,r.jsx)(n.a,{href:"https://jestjs.io",children:"Jest"}),", and ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"our own website"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We think this new Docusaurus version is ",(0,r.jsx)(n.strong,{children:"robust and ready to be deployed in production"}),". It should be released officially soon, after receiving a positive feedback from early adopters of our community."]}),"\n",(0,r.jsxs)(n.p,{children:["We would really appreciate it if you try upgrading and report issues on the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"3.0.0-beta.0 release discussion thread"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n- "@mdx-js/react": "^1.6.22",\n+ "@docusaurus/core": "3.0.0-beta.0",\n+ "@docusaurus/preset-classic": "3.0.0-beta.0",\n+ "@mdx-js/react": "^3.0.0",\n "clsx": "^2.0.0",\n "prism-react-renderer": "^1.3.5",\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n- "@docusaurus/module-type-aliases": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.h2,{id:"ask-for-help",children:"Ask for help"}),"\n",(0,r.jsx)(n.p,{children:"We will be there to help you upgrade through the following support channels:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade."}),"\n",(0,r.jsx)(n.p,{children:"The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var r=s(27378);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/141512d1.30f79dfe.js b/assets/js/141512d1.30f79dfe.js deleted file mode 100644 index afea84bd64d9..000000000000 --- a/assets/js/141512d1.30f79dfe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44788],{36367:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},49357:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},5444:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},97865:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},72807:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=s(24246),o=s(71670);const i={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},t=void 0,a={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.",date:"2023-09-29T00:00:00.000Z",tags:[{inline:!1,label:"Maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.975,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:s(36367).Z,authorsImageUrls:[void 0]},d=[{value:"Preparatory work",id:"preparatory-work",level:2},{value:"Preparing content for MDX v3",id:"preparing-content-for-mdx-v3",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Other breaking changes",id:"other-breaking-changes",level:2},{value:"Node.js 18.0",id:"nodejs-180",level:3},{value:"React 18.0",id:"react-180",level:3},{value:"TypeScript 5.0",id:"typescript-50",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"Admonition warning",id:"admonition-warning",level:3},{value:"Versioned sidebars",id:"versioned-sidebars",level:3},{value:"Try Docusaurus v3 today",id:"try-docusaurus-v3-today",level:2},{value:"Ask for help",id:"ask-for-help",level:2},{value:"Conclusion",id:"conclusion",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/docs/next/migration/v3",children:"upgrade guide"})," for the most up-to-date migration steps."]})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Docusaurus v3"})," is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,r.jsx)(n.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,r.jsx)(n.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 comes with a few ",(0,r.jsx)(n.strong,{children:"breaking changes"}),", many of which can be ",(0,r.jsx)(n.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,r.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,r.jsx)(n.strong,{children:"more strictly"})," and with ",(0,r.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:s(97865).Z+"",width:"1040",height:"546"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"v3.0.0-beta.0 release notes"})," for an exhaustive list."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"Don't be afraid",type:"tip",children:[(0,r.jsx)(n.p,{children:"There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes."}),(0,r.jsxs)(n.p,{children:["If your site is relatively small, with only a few customizations, you can probably ",(0,r.jsx)(n.a,{href:"#try-docusaurus-v3-today",children:"upgrade to Docusaurus v3"})," immediately."]})]}),"\n",(0,r.jsx)(n.h2,{id:"preparatory-work",children:"Preparatory work"}),"\n",(0,r.jsxs)(n.p,{children:["Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest ",(0,r.jsx)(n.a,{href:"/versions",children:"Docusaurus v2 version"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Depending on the complexity of your site, it may be a good idea to adopt the ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression testing workflow"})," that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade."]}),"\n",(0,r.jsxs)(n.p,{children:["We also recommend using the ",(0,r.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,r.jsx)(n.code,{children:"import"}),", or ",(0,r.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, ",(0,r.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,r.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"preparing-content-for-mdx-v3",children:"Preparing content for MDX v3"}),"\n",(0,r.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,r.jsx)(n.code,{children:".md"})," and ",(0,r.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,r.jsxs)(n.p,{children:["MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters."]}),"\n",(0,r.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,r.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,r.jsx)(n.admonition,{title:"Ask for help",type:"tip",children:(0,r.jsxs)(n.p,{children:["We have a dedicated ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})," discussion."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,r.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,r.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,r.jsx)(n.p,{children:"Each MDX version comes with its own playground:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,r.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"MDX"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(5444).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,r.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3."}),"\n",(0,r.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,r.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,r.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,r.jsxs)(n.p,{children:["We provide a ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,r.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(49357).Z+"",width:"1161",height:"417"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"This CLI is a best effort, and will only report compilation errors."}),(0,r.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"Docusaurus PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/react-native-website/pull/3780",children:"React-Native PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jestjs/jest/pull/14463",children:"Jest PR"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"These upgrades permitted us to aggregate the most common content problems, and document how to best handle them."}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"{"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,r.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"<"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"<"})," or ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\<"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus supports ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,r.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,r.jsx)(n.code,{children:"<"})," and ",(0,r.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,r.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,r.jsxs)(n.p,{children:["For users providing a ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,r.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,r.jsx)(n.code,{children:"h1"})," only gets used for ",(0,r.jsx)(n.code,{children:"# hi"})," but not for ",(0,r.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,r.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,r.jsxs)(n.p,{children:["Your ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,r.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,r.jsx)(n.strong,{children:"lower-case"}),": ",(0,r.jsx)(n.code,{children:"p"}),", ",(0,r.jsx)(n.code,{children:"h1"}),", ",(0,r.jsx)(n.code,{children:"img"}),", ",(0,r.jsx)(n.code,{children:"a"}),"..."]}),(0,r.jsxs)(n.p,{children:["For any other element, ",(0,r.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,r.jsxs)(n.p,{children:["In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,r.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,r.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,r.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you don't want an extra ",(0,r.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})}),(0,r.jsxs)(n.p,{children:['If your content contains "Markdown inlines" (',(0,r.jsx)(n.code,{children:"**"}),", ",(0,r.jsx)(n.code,{children:"*"}),", ",(0,r.jsx)(n.code,{children:"_"}),", ",(0,r.jsx)(n.code,{children:"[link](/path)"}),"), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade."]})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,r.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,r.jsxs)(n.p,{children:["Due to ",(0,r.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:":"})]}),"\n",(0,r.jsxs)(n.li,{children:["Add a space after ",(0,r.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,r.jsx)(n.code,{children:": text"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\:"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})}),"\n",(0,r.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,r.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,r.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,r.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,r.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,r.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,r.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,r.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,r.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,r.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,r.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,r.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,r.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,r.jsx)(n.h2,{id:"other-breaking-changes",children:"Other breaking changes"}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"nodejs-180",children:"Node.js 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Node.js 16 ",(0,r.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"react-180",children:"React 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site."}),"\n",(0,r.jsx)(n.p,{children:"Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Read the official ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your first-party React code to figure out which components might be affected this React 18 upgrade."]}),(0,r.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,r.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript-50",children:"TypeScript 5.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"TypeScript >= 5.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,r.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,r.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,r.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "^3.0.0-beta.0",\n }\n }\n'})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,r.jsx)(n.h3,{id:"admonition-warning",children:"Admonition warning"}),"\n",(0,r.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,r.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,r.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.p,{children:["However, the color and icon is historically wrong. Docusaurus v3 re-introduces ",(0,r.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,r.jsx)(n.code,{children:":::danger"})," instead."]}),(0,r.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,r.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,r.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,r.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,r.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,r.jsx)(n.code,{children:":::danger"})," (red)."]})]}),"\n",(0,r.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned sidebars"}),"\n",(0,r.jsxs)(n.p,{children:["This breaking change will only affect ",(0,r.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating version ",(0,r.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,r.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly."}),(0,r.jsx)(n.p,{children:"You can remove the useless versioned prefix from your versioned sidebars."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,r.jsx)(n.h2,{id:"try-docusaurus-v3-today",children:"Try Docusaurus v3 today"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"in beta"}),", and already used in production by ",(0,r.jsx)(n.a,{href:"https://reactnative.dev",children:"React-Native"}),", ",(0,r.jsx)(n.a,{href:"https://jestjs.io",children:"Jest"}),", and ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"our own website"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We think this new Docusaurus version is ",(0,r.jsx)(n.strong,{children:"robust and ready to be deployed in production"}),". It should be released officially soon, after receiving a positive feedback from early adopters of our community."]}),"\n",(0,r.jsxs)(n.p,{children:["We would really appreciate it if you try upgrading and report issues on the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"3.0.0-beta.0 release discussion thread"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n- "@mdx-js/react": "^1.6.22",\n+ "@docusaurus/core": "3.0.0-beta.0",\n+ "@docusaurus/preset-classic": "3.0.0-beta.0",\n+ "@mdx-js/react": "^3.0.0",\n "clsx": "^2.0.0",\n "prism-react-renderer": "^1.3.5",\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n- "@docusaurus/module-type-aliases": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.h2,{id:"ask-for-help",children:"Ask for help"}),"\n",(0,r.jsx)(n.p,{children:"We will be there to help you upgrade through the following support channels:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade."}),"\n",(0,r.jsx)(n.p,{children:"The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var r=s(27378);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1582a4a4.8015230d.js b/assets/js/1582a4a4.8015230d.js deleted file mode 100644 index 6134c0a09a58..000000000000 --- a/assets/js/1582a4a4.8015230d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82082],{96899:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},74962:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/hash-96c9ef1044dc1febfe3eefdc9350e2a0.png"},59506:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},68935:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=t(24246),i=t(71670);const r={title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-05-31T00:00:00.000Z")},o=void 0,a={permalink:"/blog/releases/3.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx",source:"@site/blog/releases/3.4/index.mdx",title:"Docusaurus 3.4",description:"We are happy to announce Docusaurus 3.4.",date:"2024-05-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.045,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-05-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",nextItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"}},l={image:t(96899).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Tags files",id:"tags-files",level:3},{value:"Hash Router - Experimental",id:"hash-router---experimental",level:3},{value:"Site Storage - Experimental",id:"site-storage---experimental",level:3},{value:"Other changes",id:"other-changes",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 3.4"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Upgrading should be easy. Our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process"})," respects ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),". Minor versions do not include any breaking changes."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(59506).Z+"",width:"1200",height:"600"})}),"\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"tags-files",children:"Tags files"}),"\n",(0,n.jsxs)(s.p,{children:["The docs and blog plugins both already supported a ",(0,n.jsx)(s.code,{children:"tags"})," front matter attribute, enabling you to group related content. But tags declared inline in the front matter are not always ideal."]}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10137",children:"#10137"}),", you can now declare a list of pre-defined tags in a ",(0,n.jsx)(s.code,{children:"tags.yml"})," file:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yml",metastring:'title="blog/tags.yml"',children:"tag1:\n label: 'Tag 1'\n description: 'Tag 1 description'\n permalink: /tag-1-permalink\n\ntag2:\n label: 'Tag 2'\n description: 'Tag 2 description'\n permalink: /tag-2-permalink\n"})}),"\n",(0,n.jsx)(s.p,{children:"These predefined tags can be used in the front matter of your blog or docs files:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="blog/2024-05-31-my-blog-post.md"',children:"---\ntags: [tag1, tag2]\n---\n\n# Title\n\nContent\n"})}),"\n",(0,n.jsx)(s.admonition,{title:"Keeping tags usage consistent",type:"tip",children:(0,n.jsxs)(s.p,{children:["Use the new ",(0,n.jsx)(s.code,{children:"onInlineTags: 'throw'"})," plugin option to enforce the usage of predefined tags and prevent contributors from creating new unwanted tags."]})}),"\n",(0,n.jsx)(s.h3,{id:"hash-router---experimental",children:"Hash Router - Experimental"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9859",children:"9859"}),", we added a new ",(0,n.jsx)(s.strong,{children:"experimental"})," hash router config option, useful for ",(0,n.jsx)(s.strong,{children:"offline browsing"})," by opening your site locally through the ",(0,n.jsx)(s.code,{children:"file://"})," protocol."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-tsx",metastring:'title="docusaurus.config.js"',children:"export default {\n future: {\n experimental_router: 'hash',\n },\n};\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["This mode is ",(0,n.jsx)(s.strong,{children:"not recommended for sites deployed through a web server"}),"."]})}),"\n",(0,n.jsxs)(s.p,{children:["When this mode is turned on, Docusaurus will opt out of static site rendering, and build a client-side single page application where all routes are prefixed with ",(0,n.jsx)(s.code,{children:"/#/"}),". A single ",(0,n.jsx)(s.code,{children:"index.html"})," file is generated. This file can be opened locally in your browser by simply clicking it, using the browser ",(0,n.jsx)(s.code,{children:"file://"})," protocol. This makes it possible to distribute a Docusaurus site as a ",(0,n.jsx)(s.code,{children:".zip"})," file so that readers can browse it offline, without having to install anything complex on their computer apart a web browser."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus hash router - local browsing using the file:// protocol",src:t(74962).Z+"",width:"1203",height:"601"})}),"\n",(0,n.jsx)(s.p,{children:"Try browsing our own Docusaurus site built with the hash router:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://facebook.github.io/docusaurus/#/",children:"Docusaurus website - Hash Router web deployment"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/actions/workflows/build-hash-router.yml",children:"Docusaurus website - Hash Router downloadable GitHub artifacts"})}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"Experimental",type:"caution",children:(0,n.jsxs)(s.p,{children:["This feature is ",(0,n.jsx)(s.strong,{children:"experimental"}),". If you try it out, please let us know how it works for you ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3825",children:"here"}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"site-storage---experimental",children:"Site Storage - Experimental"}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus uses the browser ",(0,n.jsx)(s.code,{children:"localStorage"})," API to persist UI state."]}),"\n",(0,n.jsxs)(s.p,{children:['But sometimes the storage space is "shared" between multiple sites using the same domain, leading to ',(0,n.jsx)(s.strong,{children:"storage key conflicts"}),". This generally happens in two cases"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["when working on multiple ",(0,n.jsx)(s.code,{children:"http://localhost:3000"})," sites"]}),"\n",(0,n.jsxs)(s.li,{children:["when hosting multiple sites under the same domain: ",(0,n.jsx)(s.code,{children:"https://example.com/site1/"})," and ",(0,n.jsx)(s.code,{children:"https://example.com/site2/"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For this reason, we introduced a new ",(0,n.jsx)(s.strong,{children:"experimental"})," ",(0,n.jsx)(s.code,{children:"siteStorage"})," configuration option:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-tsx",children:"export default {\n future: {\n experimental_storage: {\n type: 'localStorage',\n namespace: true,\n },\n },\n};\n"})}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.code,{children:"namespace: true"})," is set, we apply a hash suffix to all the storage keys, making them unique to the current site (based on ",(0,n.jsx)(s.code,{children:"config.url"})," and ",(0,n.jsx)(s.code,{children:"config.baseUrl"}),". For example, the ",(0,n.jsx)(s.code,{children:"theme"})," storage key becomes ",(0,n.jsx)(s.code,{children:"theme-x6f"}),". It is also possible to provide your own custom suffix ",(0,n.jsx)(s.code,{children:"namespace: 'suffix'"}),". We also made it possible to use ",(0,n.jsx)(s.code,{children:"type: 'sessionStorage'"})," instead of the default ",(0,n.jsx)(s.code,{children:"localStorage"}),"."]}),"\n",(0,n.jsx)(s.admonition,{title:"Experimental",type:"caution",children:(0,n.jsxs)(s.p,{children:["This feature is ",(0,n.jsx)(s.strong,{children:"experimental"}),". If you try it out, please let us know how it works for you ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10121",children:"here"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(s.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10151",children:"#10151"}),": add Turkmen (tk) theme translations"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10111",children:"#10111"}),": add Bulgarian (bg) theme translations"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10168",children:"#10168"}),": fix many long overdue Markdown link resolution bugs"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10178",children:"#10178"}),": the ",(0,n.jsx)(s.code,{children:"/search"})," page now respects the ",(0,n.jsx)(s.code,{children:"contextualSearch: false"})," setting"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10118",children:"#10118"}),": fix bad pluralization on docs generated index category card description"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10130",children:"#10130"}),": fix false positives reported by the broken anchor checker due to trailing slashes"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/3.4.0",children:"3.4.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function d(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>a,a:()=>o});var n=t(27378);const i={},r=n.createContext(i);function o(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1582a4a4.e330cf6e.js b/assets/js/1582a4a4.e330cf6e.js new file mode 100644 index 000000000000..03d1de8d7d73 --- /dev/null +++ b/assets/js/1582a4a4.e330cf6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82082],{96899:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},74962:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/hash-96c9ef1044dc1febfe3eefdc9350e2a0.png"},59506:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},68935:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var n=t(24246),i=t(71670);const r={title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-05-31T00:00:00.000Z")},a=void 0,o={permalink:"/blog/releases/3.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx",source:"@site/blog/releases/3.4/index.mdx",title:"Docusaurus 3.4",description:"We are happy to announce Docusaurus 3.4.",date:"2024-05-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.045,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-05-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",nextItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"}},l={image:t(96899).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Tags files",id:"tags-files",level:3},{value:"Hash Router - Experimental",id:"hash-router---experimental",level:3},{value:"Site Storage - Experimental",id:"site-storage---experimental",level:3},{value:"Other changes",id:"other-changes",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 3.4"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Upgrading should be easy. Our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process"})," respects ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),". Minor versions do not include any breaking changes."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(59506).Z+"",width:"1200",height:"600"})}),"\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"tags-files",children:"Tags files"}),"\n",(0,n.jsxs)(s.p,{children:["The docs and blog plugins both already supported a ",(0,n.jsx)(s.code,{children:"tags"})," front matter attribute, enabling you to group related content. But tags declared inline in the front matter are not always ideal."]}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10137",children:"#10137"}),", you can now declare a list of pre-defined tags in a ",(0,n.jsx)(s.code,{children:"tags.yml"})," file:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yml",metastring:'title="blog/tags.yml"',children:"tag1:\n label: 'Tag 1'\n description: 'Tag 1 description'\n permalink: /tag-1-permalink\n\ntag2:\n label: 'Tag 2'\n description: 'Tag 2 description'\n permalink: /tag-2-permalink\n"})}),"\n",(0,n.jsx)(s.p,{children:"These predefined tags can be used in the front matter of your blog or docs files:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="blog/2024-05-31-my-blog-post.md"',children:"---\ntags: [tag1, tag2]\n---\n\n# Title\n\nContent\n"})}),"\n",(0,n.jsx)(s.admonition,{title:"Keeping tags usage consistent",type:"tip",children:(0,n.jsxs)(s.p,{children:["Use the new ",(0,n.jsx)(s.code,{children:"onInlineTags: 'throw'"})," plugin option to enforce the usage of predefined tags and prevent contributors from creating new unwanted tags."]})}),"\n",(0,n.jsx)(s.h3,{id:"hash-router---experimental",children:"Hash Router - Experimental"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9859",children:"9859"}),", we added a new ",(0,n.jsx)(s.strong,{children:"experimental"})," hash router config option, useful for ",(0,n.jsx)(s.strong,{children:"offline browsing"})," by opening your site locally through the ",(0,n.jsx)(s.code,{children:"file://"})," protocol."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-tsx",metastring:'title="docusaurus.config.js"',children:"export default {\n future: {\n experimental_router: 'hash',\n },\n};\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["This mode is ",(0,n.jsx)(s.strong,{children:"not recommended for sites deployed through a web server"}),"."]})}),"\n",(0,n.jsxs)(s.p,{children:["When this mode is turned on, Docusaurus will opt out of static site rendering, and build a client-side single page application where all routes are prefixed with ",(0,n.jsx)(s.code,{children:"/#/"}),". A single ",(0,n.jsx)(s.code,{children:"index.html"})," file is generated. This file can be opened locally in your browser by simply clicking it, using the browser ",(0,n.jsx)(s.code,{children:"file://"})," protocol. This makes it possible to distribute a Docusaurus site as a ",(0,n.jsx)(s.code,{children:".zip"})," file so that readers can browse it offline, without having to install anything complex on their computer apart a web browser."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus hash router - local browsing using the file:// protocol",src:t(74962).Z+"",width:"1203",height:"601"})}),"\n",(0,n.jsx)(s.p,{children:"Try browsing our own Docusaurus site built with the hash router:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://facebook.github.io/docusaurus/#/",children:"Docusaurus website - Hash Router web deployment"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/actions/workflows/build-hash-router.yml",children:"Docusaurus website - Hash Router downloadable GitHub artifacts"})}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"Experimental",type:"caution",children:(0,n.jsxs)(s.p,{children:["This feature is ",(0,n.jsx)(s.strong,{children:"experimental"}),". If you try it out, please let us know how it works for you ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3825",children:"here"}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"site-storage---experimental",children:"Site Storage - Experimental"}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus uses the browser ",(0,n.jsx)(s.code,{children:"localStorage"})," API to persist UI state."]}),"\n",(0,n.jsxs)(s.p,{children:['But sometimes the storage space is "shared" between multiple sites using the same domain, leading to ',(0,n.jsx)(s.strong,{children:"storage key conflicts"}),". This generally happens in two cases"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["when working on multiple ",(0,n.jsx)(s.code,{children:"http://localhost:3000"})," sites"]}),"\n",(0,n.jsxs)(s.li,{children:["when hosting multiple sites under the same domain: ",(0,n.jsx)(s.code,{children:"https://example.com/site1/"})," and ",(0,n.jsx)(s.code,{children:"https://example.com/site2/"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For this reason, we introduced a new ",(0,n.jsx)(s.strong,{children:"experimental"})," ",(0,n.jsx)(s.code,{children:"siteStorage"})," configuration option:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-tsx",children:"export default {\n future: {\n experimental_storage: {\n type: 'localStorage',\n namespace: true,\n },\n },\n};\n"})}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.code,{children:"namespace: true"})," is set, we apply a hash suffix to all the storage keys, making them unique to the current site (based on ",(0,n.jsx)(s.code,{children:"config.url"})," and ",(0,n.jsx)(s.code,{children:"config.baseUrl"}),". For example, the ",(0,n.jsx)(s.code,{children:"theme"})," storage key becomes ",(0,n.jsx)(s.code,{children:"theme-x6f"}),". It is also possible to provide your own custom suffix ",(0,n.jsx)(s.code,{children:"namespace: 'suffix'"}),". We also made it possible to use ",(0,n.jsx)(s.code,{children:"type: 'sessionStorage'"})," instead of the default ",(0,n.jsx)(s.code,{children:"localStorage"}),"."]}),"\n",(0,n.jsx)(s.admonition,{title:"Experimental",type:"caution",children:(0,n.jsxs)(s.p,{children:["This feature is ",(0,n.jsx)(s.strong,{children:"experimental"}),". If you try it out, please let us know how it works for you ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10121",children:"here"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(s.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10151",children:"#10151"}),": add Turkmen (tk) theme translations"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10111",children:"#10111"}),": add Bulgarian (bg) theme translations"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10168",children:"#10168"}),": fix many long overdue Markdown link resolution bugs"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10178",children:"#10178"}),": the ",(0,n.jsx)(s.code,{children:"/search"})," page now respects the ",(0,n.jsx)(s.code,{children:"contextualSearch: false"})," setting"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10118",children:"#10118"}),": fix bad pluralization on docs generated index category card description"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/10130",children:"#10130"}),": fix false positives reported by the broken anchor checker due to trailing slashes"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/3.4.0",children:"3.4.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function d(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>a});var n=t(27378);const i={},r=n.createContext(i);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f6cad8.40251c44.js b/assets/js/16f6cad8.40251c44.js deleted file mode 100644 index 0c4add347330..000000000000 --- a/assets/js/16f6cad8.40251c44.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84694],{41124:(e,n,i)=>{i.d(n,{Z:()=>a});var s=i(24246),t=(i(27378),i(4646));const l={tableOfContentsInline:"tableOfContentsInline_2sru"};function a({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,s.jsx)("div",{className:l.tableOfContentsInline,children:(0,s.jsx)(t.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:i,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,i)=>{i.d(n,{Z:()=>I});var s=i(24246),t=i(27378),l=i(73919);function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function d(e){const n=e.map((e=>c(o({},e),{parentIndex:-1,children:[]}))),i=Array(7).fill(-1);n.forEach(((e,n)=>{const s=i.slice(2,e.level);e.parentIndex=Math.max(...s),i[e.level]=n}));const s=[];return n.forEach((e=>{const{parentIndex:i}=e,t=r(e,["parentIndex"]);i>=0?n[i].children.push(t):s.push(t)})),s}function u({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return e.flatMap((e=>{const s=u({toc:e.children,minHeadingLevel:n,maxHeadingLevel:i});return function(e){return e.level>=n&&e.level<=i}(e)?[c(o({},e),{children:s})]:s}))}function b(e){const n=e.getBoundingClientRect();return n.top===n.bottom?b(e.parentNode):n}function m(e,{anchorTopOffset:n}){const i=e.find((e=>b(e).top>=n));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(i))?i:null!==(s=e[e.indexOf(i)-1])&&void 0!==s?s:null;var s}var t;return null!==(t=e[e.length-1])&&void 0!==t?t:null}function h(){const e=(0,t.useRef)(0),{navbar:{hideOnScroll:n}}=(0,l.L)();return(0,t.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function p(e){const n=(0,t.useRef)(void 0),i=h();(0,t.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:t,minHeadingLevel:l,maxHeadingLevel:a}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function({minHeadingLevel:e,maxHeadingLevel:n}){const i=[];for(let s=e;s<=n;s+=1)i.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:l,maxHeadingLevel:a}),c=m(o,{anchorTopOffset:i.current}),r=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,i){i?(n.current&&n.current!==e&&n.current.classList.remove(t),e.classList.add(t),n.current=e):e.classList.remove(t)}(e,e===r)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,i])}var x=i(41428);function g({toc:e,className:n,linkClassName:i,isChild:t}){return e.length?(0,s.jsx)("ul",{className:t?void 0:n,children:e.map((e=>(0,s.jsxs)("li",{children:[(0,s.jsx)(x.Z,{to:`#${e.id}`,className:null!=i?i:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,s.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:i})]},e.id)))}):null}const f=t.memo(g);function v(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function j(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function I(e){var{toc:n,className:i="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:r}=e,b=j(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const m=(0,l.L)(),h=null!=c?c:m.tableOfContents.minHeadingLevel,x=null!=r?r:m.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,t.useMemo)((()=>u({toc:d(e),minHeadingLevel:n,maxHeadingLevel:i})),[e,n,i])}({toc:n,minHeadingLevel:h,maxHeadingLevel:x});return p((0,t.useMemo)((()=>{if(a&&o)return{linkClassName:a,linkActiveClassName:o,minHeadingLevel:h,maxHeadingLevel:x}}),[a,o,h,x])),(0,s.jsx)(f,function(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){v(e,n,i[n])}))}return e}({toc:g,className:i,linkClassName:a},b))}},6698:(e,n,i)=>{i.d(n,{Z:()=>r});var s=i(24246),t=(i(27378),i(40624));const l={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r({children:e,minHeight:n,url:i="http://localhost:3000",style:a,bodyStyle:r}){return(0,s.jsxs)("div",{className:l.browserWindow,style:c(o({},a),{minHeight:n}),children:[(0,s.jsxs)("div",{className:l.browserWindowHeader,children:[(0,s.jsxs)("div",{className:l.buttons,children:[(0,s.jsx)("span",{className:l.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(l.browserWindowAddressBar,"text--truncate"),children:i}),(0,s.jsx)("div",{className:l.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar})]})})]}),(0,s.jsx)("div",{className:l.browserWindowBody,style:r,children:e})]})}},57378:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(24246),t=i(71670),l=i(6698),a=i(41124);const o={id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},c="Headings and Table of contents",r={id:"guides/markdown-features/toc",title:"Headings and Table of contents",description:"Customizing headings and table-of-contents in Markdown",source:"@site/docs/guides/markdown-features/markdown-features-toc.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/toc",permalink:"/docs/markdown-features/toc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},sidebar:"docs",previous:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"},next:{title:"Assets",permalink:"/docs/markdown-features/assets"}},d={},u=[{value:"Markdown headings",id:"markdown-headings",level:2},{value:"Heading IDs",id:"heading-ids",level:3},{value:"Table of contents heading level",id:"table-of-contents-heading-level",level:2},{value:"Inline table of contents",id:"inline-table-of-contents",level:2},{value:"Customizing table of contents generation",id:"customizing-table-of-contents-generation",level:2},{value:"Example Section 1",id:"example-section-1",level:2},{value:"Example Subsection 1 a",id:"example-subsection-1-a",level:3},{value:"Example subsubsection 1 a I",id:"example-subsubsection-1-a-i",level:4},{value:"Example subsubsection 1 a II",id:"example-subsubsection-1-a-ii",level:4},{value:"Example subsubsection 1 a III",id:"example-subsubsection-1-a-iii",level:4},{value:"Example Subsection 1 b",id:"example-subsection-1-b",level:3},{value:"Example subsubsection 1 b I",id:"example-subsubsection-1-b-i",level:4},{value:"Example subsubsection 1 b II",id:"example-subsubsection-1-b-ii",level:4},{value:"Example subsubsection 1 b III",id:"example-subsubsection-1-b-iii",level:4},{value:"Example Subsection 1 c",id:"example-subsection-1-c",level:3},{value:"Example subsubsection 1 c I",id:"example-subsubsection-1-c-i",level:4},{value:"Example subsubsection 1 c II",id:"example-subsubsection-1-c-ii",level:4},{value:"Example subsubsection 1 c III",id:"example-subsubsection-1-c-iii",level:4},{value:"Example Section 2",id:"example-section-2",level:2},{value:"Example Subsection 2 a",id:"example-subsection-2-a",level:3},{value:"Example subsubsection 2 a I",id:"example-subsubsection-2-a-i",level:4},{value:"Example subsubsection 2 a II",id:"example-subsubsection-2-a-ii",level:4},{value:"Example subsubsection 2 a III",id:"example-subsubsection-2-a-iii",level:4},{value:"Example Subsection 2 b",id:"example-subsection-2-b",level:3},{value:"Example subsubsection 2 b I",id:"example-subsubsection-2-b-i",level:4},{value:"Example subsubsection 2 b II",id:"example-subsubsection-2-b-ii",level:4},{value:"Example subsubsection 2 b III",id:"example-subsubsection-2-b-iii",level:4},{value:"Example Subsection 2 c",id:"example-subsection-2-c",level:3},{value:"Example subsubsection 2 c I",id:"example-subsubsection-2-c-i",level:4},{value:"Example subsubsection 2 c II",id:"example-subsubsection-2-c-ii",level:4},{value:"Example subsubsection 2 c III",id:"example-subsubsection-2-c-iii",level:4},{value:"Example Section 3",id:"example-section-3",level:2},{value:"Example Subsection 3 a",id:"example-subsection-3-a",level:3},{value:"Example subsubsection 3 a I",id:"example-subsubsection-3-a-i",level:4},{value:"Example subsubsection 3 a II",id:"example-subsubsection-3-a-ii",level:4},{value:"Example subsubsection 3 a III",id:"example-subsubsection-3-a-iii",level:4},{value:"Example Subsection 3 b",id:"example-subsection-3-b",level:3},{value:"Example subsubsection 3 b I",id:"example-subsubsection-3-b-i",level:4},{value:"Example subsubsection 3 b II",id:"example-subsubsection-3-b-ii",level:4},{value:"Example subsubsection 3 b III",id:"example-subsubsection-3-b-iii",level:4},{value:"Example Subsection 3 c",id:"example-subsection-3-c",level:3},{value:"Example subsubsection 3 c I",id:"example-subsubsection-3-c-i",level:4},{value:"Example subsubsection 3 c II",id:"example-subsubsection-3-c-ii",level:4},{value:"Example subsubsection 3 c III",id:"example-subsubsection-3-c-iii",level:4}];function b(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Code:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"headings-and-table-of-contents",children:"Headings and Table of contents"})}),"\n",(0,s.jsx)(n.h2,{id:"markdown-headings",children:"Markdown headings"}),"\n",(0,s.jsx)(n.p,{children:"You can use regular Markdown headings."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"## Level 2 title\n\n### Level 3 title\n\n#### Level 4 title\n"})}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown heading will appear as a table of contents entry."}),"\n",(0,s.jsx)(n.h3,{id:"heading-ids",children:"Heading IDs"}),"\n",(0,s.jsx)(n.p,{children:"Each heading has an ID that can be automatically generated or explicitly specified. Heading IDs allow you to link to a specific document heading in Markdown or JSX:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"[link](#heading-id)\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:'<Link to="#heading-id">link</Link>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["By default, Docusaurus will generate heading IDs for you, based on the heading text. For example, ",(0,s.jsx)(n.code,{children:"### Hello World"})," will have ID ",(0,s.jsx)(n.code,{children:"hello-world"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Generated IDs have ",(0,s.jsx)(n.strong,{children:"some limitations"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The ID might not look good"}),"\n",(0,s.jsxs)(n.li,{children:["You might want to ",(0,s.jsx)(n.strong,{children:"change or translate"})," the text without updating the existing ID"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["A special Markdown syntax lets you set an ",(0,s.jsx)(n.strong,{children:"explicit heading id"}),":"]}),"\n",(0,s.jsx)(i,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"/docs/cli#docusaurus-write-heading-ids-sitedir",children:(0,s.jsx)(n.code,{children:"write-heading-ids"})})})," CLI command to add explicit IDs to all your Markdown documents."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Avoid colliding IDs",type:"warning",children:(0,s.jsx)(n.p,{children:"Generated heading IDs will be guaranteed to be unique on each page, but if you use custom IDs, make sure each one appears exactly once on each page, or there will be two DOM elements with the same ID, which is invalid HTML semantics, and will lead to one heading being unlinkable."})}),"\n",(0,s.jsx)(n.h2,{id:"table-of-contents-heading-level",children:"Table of contents heading level"}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown document displays a table of contents on the top-right corner. By default, this table only shows h2 and h3 headings, which should be sufficient for an overview of the page structure. In case you need to change the range of headings displayed, you can customize the minimum and maximum heading level \u2014 either per page or globally."}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for a particular page, use the ",(0,s.jsx)(n.code,{children:"toc_min_heading_level"})," and ",(0,s.jsx)(n.code,{children:"toc_max_heading_level"})," front matter."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",metastring:'title="myDoc.md"',children:"---\n# Display h2 to h5 headings\ntoc_min_heading_level: 2\ntoc_max_heading_level: 5\n---\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for ",(0,s.jsx)(n.em,{children:"all"})," pages, use the ",(0,s.jsx)(n.a,{href:"/docs/api/themes/configuration#table-of-contents",children:(0,s.jsx)(n.code,{children:"themeConfig.tableOfContents"})})," option."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n tableOfContents: {\n // highlight-start\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you've set the options globally, you can still override them locally via front matter."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"themeConfig"})," option would apply to all TOC on the site, including ",(0,s.jsx)(n.a,{href:"#inline-table-of-contents",children:"inline TOC"}),", but front matter options only affect the top-right TOC. You need to use the ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," and ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," props to customize each ",(0,s.jsx)(n.code,{children:"<TOCInline />"})," component."]})}),"\n",(0,s.jsx)(n.h2,{id:"inline-table-of-contents",children:"Inline table of contents"}),"\n",(0,s.jsx)(n.p,{children:"It is also possible to display an inline table of contents directly inside a Markdown document, thanks to MDX."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," variable is available in any MDX document and contains all the headings of an MDX document. By default, only ",(0,s.jsx)(n.code,{children:"h2"})," and ",(0,s.jsx)(n.code,{children:"h3"})," headings are displayed in the TOC. You can change which heading levels are visible by setting ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," or ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," for individual ",(0,s.jsx)(n.code,{children:"TOCInline"})," components."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline toc={toc} />\n"})}),"\n","\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," global is just a list of heading items:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"declare const toc: {\n value: string;\n id: string;\n level: number;\n}[];\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that the ",(0,s.jsx)(n.code,{children:"toc"})," global is a flat array, so you can easily cut out unwanted nodes or insert extra nodes, and create a new TOC tree."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline\n // Only show h2 and h4 headings\n toc={toc.filter((node) => node.level === 2 || node.level === 4)}\n minHeadingLevel={2}\n // Show h4 headings in addition to the default h2 and h3 headings\n maxHeadingLevel={4}\n/>\n"})}),"\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u.filter((e=>2===e.level||4===e.level)),minHeadingLevel:2,maxHeadingLevel:4})}),"\n",(0,s.jsx)(n.h2,{id:"customizing-table-of-contents-generation",children:"Customizing table of contents generation"}),"\n",(0,s.jsxs)(n.p,{children:["The table-of-contents is generated by parsing the Markdown source with a ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"Remark plugin"}),". There are known edge-cases where it generates false-positives and false-negatives."]}),"\n",(0,s.jsxs)(n.p,{children:["Markdown headings within hideable areas will still show up in the TOC. For example, headings within ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,s.jsx)(n.code,{children:"Tabs"})})," and ",(0,s.jsx)(n.a,{href:"/docs/markdown-features#details",children:(0,s.jsx)(n.code,{children:"details"})})," will not be excluded."]}),"\n",(0,s.jsx)(n.p,{children:"Non-Markdown headings will not show up in the TOC. This can be used to your advantage to tackle the aforementioned issue."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'<details>\n<summary>Some details containing headings</summary>\n<h2 id="#heading-id">I\'m a heading that will not show up in the TOC</h2>\n\nSome content...\n\n</details>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ability to ergonomically insert extra headings or ignore certain headings is a work-in-progress. If this feature is important to you, please report your use-case in ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/6201",children:"this issue"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Below is just some dummy content to have more table of contents items available on the current page."})}),"\n",(0,s.jsx)(n.h2,{id:"example-section-1",children:"Example Section 1"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-a",children:"Example Subsection 1 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-i",children:"Example subsubsection 1 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-ii",children:"Example subsubsection 1 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-iii",children:"Example subsubsection 1 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-b",children:"Example Subsection 1 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-i",children:"Example subsubsection 1 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-ii",children:"Example subsubsection 1 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-iii",children:"Example subsubsection 1 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-c",children:"Example Subsection 1 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-i",children:"Example subsubsection 1 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-ii",children:"Example subsubsection 1 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-iii",children:"Example subsubsection 1 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-2",children:"Example Section 2"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-a",children:"Example Subsection 2 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-i",children:"Example subsubsection 2 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-ii",children:"Example subsubsection 2 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-iii",children:"Example subsubsection 2 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-b",children:"Example Subsection 2 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-i",children:"Example subsubsection 2 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-ii",children:"Example subsubsection 2 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-iii",children:"Example subsubsection 2 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-c",children:"Example Subsection 2 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-i",children:"Example subsubsection 2 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-ii",children:"Example subsubsection 2 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-iii",children:"Example subsubsection 2 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-3",children:"Example Section 3"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-a",children:"Example Subsection 3 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-i",children:"Example subsubsection 3 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-ii",children:"Example subsubsection 3 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-iii",children:"Example subsubsection 3 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-b",children:"Example Subsection 3 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-i",children:"Example subsubsection 3 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-ii",children:"Example subsubsection 3 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-iii",children:"Example subsubsection 3 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-c",children:"Example Subsection 3 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-i",children:"Example subsubsection 3 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-ii",children:"Example subsubsection 3 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-iii",children:"Example subsubsection 3 c III"})]})}function m(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>o,a:()=>a});var s=i(27378);const t={},l=s.createContext(t);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f6cad8.e9cb8ea0.js b/assets/js/16f6cad8.e9cb8ea0.js new file mode 100644 index 000000000000..4e7757bf35d8 --- /dev/null +++ b/assets/js/16f6cad8.e9cb8ea0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84694],{41124:(e,n,i)=>{i.d(n,{Z:()=>a});var s=i(24246),t=(i(27378),i(4646));const l={tableOfContentsInline:"tableOfContentsInline_2sru"};function a({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,s.jsx)("div",{className:l.tableOfContentsInline,children:(0,s.jsx)(t.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:i,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,i)=>{i.d(n,{Z:()=>I});var s=i(24246),t=i(27378),l=i(73919);function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function d(e){const n=e.map((e=>c(o({},e),{parentIndex:-1,children:[]}))),i=Array(7).fill(-1);n.forEach(((e,n)=>{const s=i.slice(2,e.level);e.parentIndex=Math.max(...s),i[e.level]=n}));const s=[];return n.forEach((e=>{const{parentIndex:i}=e,t=r(e,["parentIndex"]);i>=0?n[i].children.push(t):s.push(t)})),s}function u({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return e.flatMap((e=>{const s=u({toc:e.children,minHeadingLevel:n,maxHeadingLevel:i});return function(e){return e.level>=n&&e.level<=i}(e)?[c(o({},e),{children:s})]:s}))}function b(e){const n=e.getBoundingClientRect();return n.top===n.bottom?b(e.parentNode):n}function m(e,{anchorTopOffset:n}){const i=e.find((e=>b(e).top>=n));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(i))?i:null!==(s=e[e.indexOf(i)-1])&&void 0!==s?s:null;var s}var t;return null!==(t=e[e.length-1])&&void 0!==t?t:null}function h(){const e=(0,t.useRef)(0),{navbar:{hideOnScroll:n}}=(0,l.L)();return(0,t.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function p(e){const n=(0,t.useRef)(void 0),i=h();(0,t.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:t,minHeadingLevel:l,maxHeadingLevel:a}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function({minHeadingLevel:e,maxHeadingLevel:n}){const i=[];for(let s=e;s<=n;s+=1)i.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:l,maxHeadingLevel:a}),c=m(o,{anchorTopOffset:i.current}),r=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,i){i?(n.current&&n.current!==e&&n.current.classList.remove(t),e.classList.add(t),n.current=e):e.classList.remove(t)}(e,e===r)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,i])}var x=i(41428);function g({toc:e,className:n,linkClassName:i,isChild:t}){return e.length?(0,s.jsx)("ul",{className:t?void 0:n,children:e.map((e=>(0,s.jsxs)("li",{children:[(0,s.jsx)(x.Z,{to:`#${e.id}`,className:null!=i?i:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,s.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:i})]},e.id)))}):null}const f=t.memo(g);function v(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function j(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function I(e){var{toc:n,className:i="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:r}=e,b=j(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const m=(0,l.L)(),h=null!=c?c:m.tableOfContents.minHeadingLevel,x=null!=r?r:m.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,t.useMemo)((()=>u({toc:d(e),minHeadingLevel:n,maxHeadingLevel:i})),[e,n,i])}({toc:n,minHeadingLevel:h,maxHeadingLevel:x});return p((0,t.useMemo)((()=>{if(a&&o)return{linkClassName:a,linkActiveClassName:o,minHeadingLevel:h,maxHeadingLevel:x}}),[a,o,h,x])),(0,s.jsx)(f,function(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){v(e,n,i[n])}))}return e}({toc:g,className:i,linkClassName:a},b))}},6698:(e,n,i)=>{i.d(n,{Z:()=>r});var s=i(24246),t=(i(27378),i(40624));const l={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r({children:e,minHeight:n,url:i="http://localhost:3000",style:a,bodyStyle:r}){return(0,s.jsxs)("div",{className:l.browserWindow,style:c(o({},a),{minHeight:n}),children:[(0,s.jsxs)("div",{className:l.browserWindowHeader,children:[(0,s.jsxs)("div",{className:l.buttons,children:[(0,s.jsx)("span",{className:l.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(l.browserWindowAddressBar,"text--truncate"),children:i}),(0,s.jsx)("div",{className:l.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar})]})})]}),(0,s.jsx)("div",{className:l.browserWindowBody,style:r,children:e})]})}},57378:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(24246),t=i(71670),l=i(6698),a=i(41124);const o={id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},c="Headings and Table of contents",r={id:"guides/markdown-features/toc",title:"Headings and Table of contents",description:"Customizing headings and table-of-contents in Markdown",source:"@site/docs/guides/markdown-features/markdown-features-toc.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/toc",permalink:"/docs/markdown-features/toc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},sidebar:"docs",previous:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"},next:{title:"Assets",permalink:"/docs/markdown-features/assets"}},d={},u=[{value:"Markdown headings",id:"markdown-headings",level:2},{value:"Heading IDs",id:"heading-ids",level:3},{value:"Table of contents heading level",id:"table-of-contents-heading-level",level:2},{value:"Inline table of contents",id:"inline-table-of-contents",level:2},{value:"Customizing table of contents generation",id:"customizing-table-of-contents-generation",level:2},{value:"Example Section 1",id:"example-section-1",level:2},{value:"Example Subsection 1 a",id:"example-subsection-1-a",level:3},{value:"Example subsubsection 1 a I",id:"example-subsubsection-1-a-i",level:4},{value:"Example subsubsection 1 a II",id:"example-subsubsection-1-a-ii",level:4},{value:"Example subsubsection 1 a III",id:"example-subsubsection-1-a-iii",level:4},{value:"Example Subsection 1 b",id:"example-subsection-1-b",level:3},{value:"Example subsubsection 1 b I",id:"example-subsubsection-1-b-i",level:4},{value:"Example subsubsection 1 b II",id:"example-subsubsection-1-b-ii",level:4},{value:"Example subsubsection 1 b III",id:"example-subsubsection-1-b-iii",level:4},{value:"Example Subsection 1 c",id:"example-subsection-1-c",level:3},{value:"Example subsubsection 1 c I",id:"example-subsubsection-1-c-i",level:4},{value:"Example subsubsection 1 c II",id:"example-subsubsection-1-c-ii",level:4},{value:"Example subsubsection 1 c III",id:"example-subsubsection-1-c-iii",level:4},{value:"Example Section 2",id:"example-section-2",level:2},{value:"Example Subsection 2 a",id:"example-subsection-2-a",level:3},{value:"Example subsubsection 2 a I",id:"example-subsubsection-2-a-i",level:4},{value:"Example subsubsection 2 a II",id:"example-subsubsection-2-a-ii",level:4},{value:"Example subsubsection 2 a III",id:"example-subsubsection-2-a-iii",level:4},{value:"Example Subsection 2 b",id:"example-subsection-2-b",level:3},{value:"Example subsubsection 2 b I",id:"example-subsubsection-2-b-i",level:4},{value:"Example subsubsection 2 b II",id:"example-subsubsection-2-b-ii",level:4},{value:"Example subsubsection 2 b III",id:"example-subsubsection-2-b-iii",level:4},{value:"Example Subsection 2 c",id:"example-subsection-2-c",level:3},{value:"Example subsubsection 2 c I",id:"example-subsubsection-2-c-i",level:4},{value:"Example subsubsection 2 c II",id:"example-subsubsection-2-c-ii",level:4},{value:"Example subsubsection 2 c III",id:"example-subsubsection-2-c-iii",level:4},{value:"Example Section 3",id:"example-section-3",level:2},{value:"Example Subsection 3 a",id:"example-subsection-3-a",level:3},{value:"Example subsubsection 3 a I",id:"example-subsubsection-3-a-i",level:4},{value:"Example subsubsection 3 a II",id:"example-subsubsection-3-a-ii",level:4},{value:"Example subsubsection 3 a III",id:"example-subsubsection-3-a-iii",level:4},{value:"Example Subsection 3 b",id:"example-subsection-3-b",level:3},{value:"Example subsubsection 3 b I",id:"example-subsubsection-3-b-i",level:4},{value:"Example subsubsection 3 b II",id:"example-subsubsection-3-b-ii",level:4},{value:"Example subsubsection 3 b III",id:"example-subsubsection-3-b-iii",level:4},{value:"Example Subsection 3 c",id:"example-subsection-3-c",level:3},{value:"Example subsubsection 3 c I",id:"example-subsubsection-3-c-i",level:4},{value:"Example subsubsection 3 c II",id:"example-subsubsection-3-c-ii",level:4},{value:"Example subsubsection 3 c III",id:"example-subsubsection-3-c-iii",level:4}];function b(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Code:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"headings-and-table-of-contents",children:"Headings and Table of contents"})}),"\n",(0,s.jsx)(n.h2,{id:"markdown-headings",children:"Markdown headings"}),"\n",(0,s.jsx)(n.p,{children:"You can use regular Markdown headings."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"## Level 2 title\n\n### Level 3 title\n\n#### Level 4 title\n"})}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown heading will appear as a table of contents entry."}),"\n",(0,s.jsx)(n.h3,{id:"heading-ids",children:"Heading IDs"}),"\n",(0,s.jsx)(n.p,{children:"Each heading has an ID that can be automatically generated or explicitly specified. Heading IDs allow you to link to a specific document heading in Markdown or JSX:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"[link](#heading-id)\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:'<Link to="#heading-id">link</Link>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["By default, Docusaurus will generate heading IDs for you, based on the heading text. For example, ",(0,s.jsx)(n.code,{children:"### Hello World"})," will have ID ",(0,s.jsx)(n.code,{children:"hello-world"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Generated IDs have ",(0,s.jsx)(n.strong,{children:"some limitations"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The ID might not look good"}),"\n",(0,s.jsxs)(n.li,{children:["You might want to ",(0,s.jsx)(n.strong,{children:"change or translate"})," the text without updating the existing ID"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["A special Markdown syntax lets you set an ",(0,s.jsx)(n.strong,{children:"explicit heading id"}),":"]}),"\n",(0,s.jsx)(i,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"/docs/cli#docusaurus-write-heading-ids-sitedir",children:(0,s.jsx)(n.code,{children:"write-heading-ids"})})})," CLI command to add explicit IDs to all your Markdown documents."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Avoid colliding IDs",type:"warning",children:(0,s.jsx)(n.p,{children:"Generated heading IDs will be guaranteed to be unique on each page, but if you use custom IDs, make sure each one appears exactly once on each page, or there will be two DOM elements with the same ID, which is invalid HTML semantics, and will lead to one heading being unlinkable."})}),"\n",(0,s.jsx)(n.h2,{id:"table-of-contents-heading-level",children:"Table of contents heading level"}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown document displays a table of contents on the top-right corner. By default, this table only shows h2 and h3 headings, which should be sufficient for an overview of the page structure. In case you need to change the range of headings displayed, you can customize the minimum and maximum heading level \u2014 either per page or globally."}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for a particular page, use the ",(0,s.jsx)(n.code,{children:"toc_min_heading_level"})," and ",(0,s.jsx)(n.code,{children:"toc_max_heading_level"})," front matter."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",metastring:'title="myDoc.md"',children:"---\n# Display h2 to h5 headings\ntoc_min_heading_level: 2\ntoc_max_heading_level: 5\n---\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for ",(0,s.jsx)(n.em,{children:"all"})," pages, use the ",(0,s.jsx)(n.a,{href:"/docs/api/themes/configuration#table-of-contents",children:(0,s.jsx)(n.code,{children:"themeConfig.tableOfContents"})})," option."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n tableOfContents: {\n // highlight-start\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you've set the options globally, you can still override them locally via front matter."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"themeConfig"})," option would apply to all TOC on the site, including ",(0,s.jsx)(n.a,{href:"#inline-table-of-contents",children:"inline TOC"}),", but front matter options only affect the top-right TOC. You need to use the ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," and ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," props to customize each ",(0,s.jsx)(n.code,{children:"<TOCInline />"})," component."]})}),"\n",(0,s.jsx)(n.h2,{id:"inline-table-of-contents",children:"Inline table of contents"}),"\n",(0,s.jsx)(n.p,{children:"It is also possible to display an inline table of contents directly inside a Markdown document, thanks to MDX."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," variable is available in any MDX document and contains all the headings of an MDX document. By default, only ",(0,s.jsx)(n.code,{children:"h2"})," and ",(0,s.jsx)(n.code,{children:"h3"})," headings are displayed in the TOC. You can change which heading levels are visible by setting ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," or ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," for individual ",(0,s.jsx)(n.code,{children:"TOCInline"})," components."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline toc={toc} />\n"})}),"\n","\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," global is just a list of heading items:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"declare const toc: {\n value: string;\n id: string;\n level: number;\n}[];\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that the ",(0,s.jsx)(n.code,{children:"toc"})," global is a flat array, so you can easily cut out unwanted nodes or insert extra nodes, and create a new TOC tree."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline\n // Only show h2 and h4 headings\n toc={toc.filter((node) => node.level === 2 || node.level === 4)}\n minHeadingLevel={2}\n // Show h4 headings in addition to the default h2 and h3 headings\n maxHeadingLevel={4}\n/>\n"})}),"\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u.filter((e=>2===e.level||4===e.level)),minHeadingLevel:2,maxHeadingLevel:4})}),"\n",(0,s.jsx)(n.h2,{id:"customizing-table-of-contents-generation",children:"Customizing table of contents generation"}),"\n",(0,s.jsxs)(n.p,{children:["The table-of-contents is generated by parsing the Markdown source with a ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"Remark plugin"}),". There are known edge-cases where it generates false-positives and false-negatives."]}),"\n",(0,s.jsxs)(n.p,{children:["Markdown headings within hideable areas will still show up in the TOC. For example, headings within ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,s.jsx)(n.code,{children:"Tabs"})})," and ",(0,s.jsx)(n.a,{href:"/docs/markdown-features#details",children:(0,s.jsx)(n.code,{children:"details"})})," will not be excluded."]}),"\n",(0,s.jsx)(n.p,{children:"Non-Markdown headings will not show up in the TOC. This can be used to your advantage to tackle the aforementioned issue."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'<details>\n<summary>Some details containing headings</summary>\n<h2 id="#heading-id">I\'m a heading that will not show up in the TOC</h2>\n\nSome content...\n\n</details>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ability to ergonomically insert extra headings or ignore certain headings is a work-in-progress. If this feature is important to you, please report your use-case in ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/6201",children:"this issue"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Below is just some dummy content to have more table of contents items available on the current page."})}),"\n",(0,s.jsx)(n.h2,{id:"example-section-1",children:"Example Section 1"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-a",children:"Example Subsection 1 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-i",children:"Example subsubsection 1 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-ii",children:"Example subsubsection 1 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-iii",children:"Example subsubsection 1 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-b",children:"Example Subsection 1 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-i",children:"Example subsubsection 1 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-ii",children:"Example subsubsection 1 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-iii",children:"Example subsubsection 1 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-c",children:"Example Subsection 1 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-i",children:"Example subsubsection 1 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-ii",children:"Example subsubsection 1 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-iii",children:"Example subsubsection 1 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-2",children:"Example Section 2"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-a",children:"Example Subsection 2 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-i",children:"Example subsubsection 2 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-ii",children:"Example subsubsection 2 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-iii",children:"Example subsubsection 2 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-b",children:"Example Subsection 2 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-i",children:"Example subsubsection 2 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-ii",children:"Example subsubsection 2 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-iii",children:"Example subsubsection 2 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-c",children:"Example Subsection 2 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-i",children:"Example subsubsection 2 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-ii",children:"Example subsubsection 2 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-iii",children:"Example subsubsection 2 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-3",children:"Example Section 3"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-a",children:"Example Subsection 3 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-i",children:"Example subsubsection 3 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-ii",children:"Example subsubsection 3 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-iii",children:"Example subsubsection 3 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-b",children:"Example Subsection 3 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-i",children:"Example subsubsection 3 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-ii",children:"Example subsubsection 3 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-iii",children:"Example subsubsection 3 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-c",children:"Example Subsection 3 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-i",children:"Example subsubsection 3 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-ii",children:"Example subsubsection 3 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-iii",children:"Example subsubsection 3 c III"})]})}function m(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>o,a:()=>a});var s=i(27378);const t={},l=s.createContext(t);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f8f4fb.27257cb6.js b/assets/js/16f8f4fb.27257cb6.js deleted file mode 100644 index fa37203bed04..000000000000 --- a/assets/js/16f8f4fb.27257cb6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46481],{75490:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},13381:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=(t(27378),t(6698));function o({url:e}){return(0,n.jsx)("div",{style:{padding:10},children:(0,n.jsx)(r.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,n.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),r=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function i(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){a(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,n.jsxs)("div",{className:o.browserWindow,style:l(i({},a),{minHeight:s}),children:[(0,n.jsxs)("div",{className:o.browserWindowHeader,children:[(0,n.jsxs)("div",{className:o.buttons,children:[(0,n.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,r.Z)(o.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar})]})})]}),(0,n.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},3818:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=t(27378);function o({children:e="Boom!",message:s="Boom!\nSomething bad happened, but you can try again!",cause:t}){const[o,a]=(0,r.useState)(!1);if(o)throw new Error(s,{cause:t?new Error(t):void 0});return(0,n.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},50510:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},69476:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=t(24246),r=t(71670);t(6698),t(13381),t(3818);const o={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"},nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},l={image:t(75490).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Faster builds",id:"faster-builds",level:3},{value:"Faster Dev Server",id:"faster-dev-server",level:3},{value:"MDX partials table-of-contents",id:"mdx-partials-table-of-contents",level:3},{value:"Blog improvements",id:"blog-improvements",level:3},{value:"Sitemap lastmod",id:"sitemap-lastmod",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Details:o}=s;return o||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(50510).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"faster-builds",children:"Faster builds"}),"\n",(0,n.jsx)(s.p,{children:"We worked hard to reduce the time it takes to build a Docusaurus site in production mode."}),"\n",(0,n.jsx)(s.p,{children:"Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites."}),"\n",(0,n.jsxs)(s.p,{children:["Let's take an example. Our benchmark on the ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/react-native-website/pull/4072",children:"React Native website upgrading to v3.2"})," reports the following results:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)"}),"\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements."}),"\n",(0,n.jsxs)(s.p,{children:["Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"performance issue"})," for upcoming improvements."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"What is the difference between a cold build and an incremental build?"}),(0,n.jsxs)(s.p,{children:["A cold build is when the Docusaurus caches are empty, generally after running ",(0,n.jsx)(s.code,{children:"docusaurus clear"}),"."]}),(0,n.jsxs)(s.p,{children:["An incremental build happens when you run another time the ",(0,n.jsx)(s.code,{children:"docusaurus build"}),' command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it\'s based on ',(0,n.jsx)(s.a,{href:"https://webpack.js.org/guides/build-performance/#persistent-cache",children:"Webpack persistent caching"}),". To enable incremental builds on your CI server, you can persist the ",(0,n.jsx)(s.code,{children:"node_modules/.cache"})," folder across builds."]})]}),"\n",(0,n.jsx)(s.h3,{id:"faster-dev-server",children:"Faster Dev Server"}),"\n",(0,n.jsx)(s.p,{children:"We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files."}),"\n",(0,n.jsx)(s.p,{children:"The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25."}),"\n",(0,n.jsx)(s.p,{children:"We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result."}),"\n",(0,n.jsx)(s.h3,{id:"mdx-partials-table-of-contents",children:"MDX partials table-of-contents"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"#9684"}),", Docusaurus is now able to render headings coming from an imported partial into the table-of-contents."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus and MDX allows you to ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/react#importing-markdown",children:"import one Markdown file into another"}),'. We usually call the imported Markdown file a "partial", and use the ',(0,n.jsx)(s.code,{children:"_"})," prefix so that this file does not lead to the creation of a new page."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="myDoc.mdx"',children:"# My Doc\n\n## Doc heading\n\nContent is imported from another MDX file:\n\nimport ImportedDoc from './\\_importedDoc.mdx';\n\n<ImportedDoc />\n"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="_myPartial.mdx"',children:"## Partial heading\n\nSome paragraph\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Previously, the heading ",(0,n.jsx)(s.code,{children:"Partial heading"})," did not appear in the table-of-contents, but now it will!"]}),"\n",(0,n.jsx)(s.h3,{id:"blog-improvements",children:"Blog improvements"}),"\n",(0,n.jsx)(s.p,{children:"We improved the blog plugin with several new options to make it even more powerful and flexible:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9912",children:"#9912"}),": you can now display the last update time and author of a blog post, a feature the docs plugin already had."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9886",children:"#9886"}),": a new ",(0,n.jsx)(s.code,{children:"processBlogPosts"})," option allow you to filter/transform/sort blog posts."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9838",children:"#9838"}),": a new ",(0,n.jsx)(s.code,{children:"pageBasePath"})," option allows you to customize the blog pagination URL segment (",(0,n.jsx)(s.code,{children:"/blog/page/2"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"sitemap-lastmod",children:"Sitemap lastmod"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9954",children:"#9954"}),", the sitemap plugin has a new ",(0,n.jsx)(s.code,{children:"lastmod"})," option that can now emit a ",(0,n.jsx)(s.code,{children:"<lastmod>"})," tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog ",(0,n.jsx)(s.code,{children:"last_update"})," front matter."]}),"\n",(0,n.jsxs)(s.p,{children:["We also made it possible to opt-out of emitting ",(0,n.jsx)(s.code,{children:"<priority>"})," and ",(0,n.jsx)(s.code,{children:"<frequency>"})," tags, which are generally ignored by crawlers (notably ",(0,n.jsx)(s.a,{href:"https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping",children:"Google"}),")."]}),"\n",(0,n.jsx)(s.p,{children:"We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"{\n lastmod: 'date',\n priority: null,\n changefreq: null,\n}\n"})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9687",children:"#9687"}),": new Vercel Analytics plugin"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9681",children:"#9681"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9442",children:"#9442"}),": ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," and ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," CLIs now ask users if they prefer to use TypeScript"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9928",children:"#9928"}),": new Icelandic translation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9931",children:"#9928"}),": new ",(0,n.jsx)(s.code,{children:"allContentLoaded"})," plugin lifecycle (experimental)"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/3.2.0",children:"3.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>a});var n=t(27378);const r={},o=n.createContext(r);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f8f4fb.a0c63b77.js b/assets/js/16f8f4fb.a0c63b77.js new file mode 100644 index 000000000000..4cbd9ffba9e3 --- /dev/null +++ b/assets/js/16f8f4fb.a0c63b77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46481],{75490:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},13381:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=(t(27378),t(6698));function o({url:e}){return(0,n.jsx)("div",{style:{padding:10},children:(0,n.jsx)(r.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,n.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),r=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function i(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){a(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,n.jsxs)("div",{className:o.browserWindow,style:l(i({},a),{minHeight:s}),children:[(0,n.jsxs)("div",{className:o.browserWindowHeader,children:[(0,n.jsxs)("div",{className:o.buttons,children:[(0,n.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,r.Z)(o.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar})]})})]}),(0,n.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},3818:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=t(27378);function o({children:e="Boom!",message:s="Boom!\nSomething bad happened, but you can try again!",cause:t}){const[o,a]=(0,r.useState)(!1);if(o)throw new Error(s,{cause:t?new Error(t):void 0});return(0,n.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},50510:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},69476:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=t(24246),r=t(71670);t(6698),t(13381),t(3818);const o={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"},nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},l={image:t(75490).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Faster builds",id:"faster-builds",level:3},{value:"Faster Dev Server",id:"faster-dev-server",level:3},{value:"MDX partials table-of-contents",id:"mdx-partials-table-of-contents",level:3},{value:"Blog improvements",id:"blog-improvements",level:3},{value:"Sitemap lastmod",id:"sitemap-lastmod",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Details:o}=s;return o||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(50510).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"faster-builds",children:"Faster builds"}),"\n",(0,n.jsx)(s.p,{children:"We worked hard to reduce the time it takes to build a Docusaurus site in production mode."}),"\n",(0,n.jsx)(s.p,{children:"Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites."}),"\n",(0,n.jsxs)(s.p,{children:["Let's take an example. Our benchmark on the ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/react-native-website/pull/4072",children:"React Native website upgrading to v3.2"})," reports the following results:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)"}),"\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements."}),"\n",(0,n.jsxs)(s.p,{children:["Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"performance issue"})," for upcoming improvements."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"What is the difference between a cold build and an incremental build?"}),(0,n.jsxs)(s.p,{children:["A cold build is when the Docusaurus caches are empty, generally after running ",(0,n.jsx)(s.code,{children:"docusaurus clear"}),"."]}),(0,n.jsxs)(s.p,{children:["An incremental build happens when you run another time the ",(0,n.jsx)(s.code,{children:"docusaurus build"}),' command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it\'s based on ',(0,n.jsx)(s.a,{href:"https://webpack.js.org/guides/build-performance/#persistent-cache",children:"Webpack persistent caching"}),". To enable incremental builds on your CI server, you can persist the ",(0,n.jsx)(s.code,{children:"node_modules/.cache"})," folder across builds."]})]}),"\n",(0,n.jsx)(s.h3,{id:"faster-dev-server",children:"Faster Dev Server"}),"\n",(0,n.jsx)(s.p,{children:"We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files."}),"\n",(0,n.jsx)(s.p,{children:"The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25."}),"\n",(0,n.jsx)(s.p,{children:"We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result."}),"\n",(0,n.jsx)(s.h3,{id:"mdx-partials-table-of-contents",children:"MDX partials table-of-contents"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"#9684"}),", Docusaurus is now able to render headings coming from an imported partial into the table-of-contents."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus and MDX allows you to ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/react#importing-markdown",children:"import one Markdown file into another"}),'. We usually call the imported Markdown file a "partial", and use the ',(0,n.jsx)(s.code,{children:"_"})," prefix so that this file does not lead to the creation of a new page."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="myDoc.mdx"',children:"# My Doc\n\n## Doc heading\n\nContent is imported from another MDX file:\n\nimport ImportedDoc from './\\_importedDoc.mdx';\n\n<ImportedDoc />\n"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="_myPartial.mdx"',children:"## Partial heading\n\nSome paragraph\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Previously, the heading ",(0,n.jsx)(s.code,{children:"Partial heading"})," did not appear in the table-of-contents, but now it will!"]}),"\n",(0,n.jsx)(s.h3,{id:"blog-improvements",children:"Blog improvements"}),"\n",(0,n.jsx)(s.p,{children:"We improved the blog plugin with several new options to make it even more powerful and flexible:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9912",children:"#9912"}),": you can now display the last update time and author of a blog post, a feature the docs plugin already had."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9886",children:"#9886"}),": a new ",(0,n.jsx)(s.code,{children:"processBlogPosts"})," option allow you to filter/transform/sort blog posts."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9838",children:"#9838"}),": a new ",(0,n.jsx)(s.code,{children:"pageBasePath"})," option allows you to customize the blog pagination URL segment (",(0,n.jsx)(s.code,{children:"/blog/page/2"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"sitemap-lastmod",children:"Sitemap lastmod"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9954",children:"#9954"}),", the sitemap plugin has a new ",(0,n.jsx)(s.code,{children:"lastmod"})," option that can now emit a ",(0,n.jsx)(s.code,{children:"<lastmod>"})," tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog ",(0,n.jsx)(s.code,{children:"last_update"})," front matter."]}),"\n",(0,n.jsxs)(s.p,{children:["We also made it possible to opt-out of emitting ",(0,n.jsx)(s.code,{children:"<priority>"})," and ",(0,n.jsx)(s.code,{children:"<frequency>"})," tags, which are generally ignored by crawlers (notably ",(0,n.jsx)(s.a,{href:"https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping",children:"Google"}),")."]}),"\n",(0,n.jsx)(s.p,{children:"We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"{\n lastmod: 'date',\n priority: null,\n changefreq: null,\n}\n"})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9687",children:"#9687"}),": new Vercel Analytics plugin"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9681",children:"#9681"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9442",children:"#9442"}),": ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," and ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," CLIs now ask users if they prefer to use TypeScript"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9928",children:"#9928"}),": new Icelandic translation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9931",children:"#9928"}),": new ",(0,n.jsx)(s.code,{children:"allContentLoaded"})," plugin lifecycle (experimental)"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/3.2.0",children:"3.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>a});var n=t(27378);const r={},o=n.createContext(r);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17e8a747.0db8cf49.js b/assets/js/17e8a747.5ddeda1c.js similarity index 71% rename from assets/js/17e8a747.0db8cf49.js rename to assets/js/17e8a747.5ddeda1c.js index 47e8e456dfc7..45371cb171dc 100644 --- a/assets/js/17e8a747.0db8cf49.js +++ b/assets/js/17e8a747.5ddeda1c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53704],{61132:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>T});var n=r(24246),o=r(27378),a=r(40624),l=r(75527),s=r(3620),i=r(44479),c=r(62821),u=r(52196),d=r(53589);function b(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function g(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return v(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function p({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const r=(0,s.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(n),l=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(y(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){b(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[a,l]}function f(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,a=g(e),[l,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!p({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[c,u]=h({queryString:r,groupId:n}),[b,y]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),v=(()=>{const e=null!=c?c:b;return p({value:e,tabValues:a})?e:null})();(0,i.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),y(e)}),[u,y,a]),tabValues:a}}var x=r(29088);const m={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){w(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=s[n].value;a!==r&&(c(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",O(j({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",m.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=f(e);return(0,n.jsxs)("div",{className:(0,a.Z)("tabs-container",m.tabList),children:[(0,n.jsx)(P,j({},t,e)),(0,n.jsx)(k,j({},t,e))]})}function T(e){const t=(0,x.Z)();return(0,n.jsx)(S,O(j({},e),{children:v(e.children)}),String(t))}},6698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){l(e,t,r[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function c({children:e,minHeight:t,url:r="http://localhost:3000",style:l,bodyStyle:c}){return(0,n.jsxs)("div",{className:a.browserWindow,style:i(s({},l),{minHeight:t}),children:[(0,n.jsxs)("div",{className:a.browserWindowHeader,children:[(0,n.jsxs)("div",{className:a.buttons,children:[(0,n.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,o.Z)(a.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:a.bar}),(0,n.jsx)("span",{className:a.bar}),(0,n.jsx)("span",{className:a.bar})]})})]}),(0,n.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},16021:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>i,isMacOS:()=>b,metadata:()=>u,toc:()=>y});var n=r(24246),o=r(71670),a=r(6698),l=r(97555),s=r(61132);const i={},c="Tabs tests",u={type:"mdx",permalink:"/tests/pages/tabs-tests",source:"@site/_dogfooding/_pages tests/tabs-tests.mdx",title:"Tabs tests",description:"Tabs with dynamic default value",frontMatter:{},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx",unlisted:!1},d={},b="undefined"!=typeof window&&navigator.platform.startsWith("Mac"),y=[{value:"Tabs with dynamic default value",id:"tabs-with-dynamic-default-value",level:2},{value:"Tabs sync with different heights",id:"tabs-sync-with-different-heights",level:2},{value:"Tabs with className and lazy loading",id:"tabs-with-classname-and-lazy-loading",level:2}];function v(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tabs-tests",children:"Tabs tests"})}),"\n","\n",(0,n.jsx)(t.h2,{id:"tabs-with-dynamic-default-value",children:"Tabs with dynamic default value"}),"\n",(0,n.jsxs)(t.p,{children:["This can cause ",(0,n.jsx)(t.a,{href:"https://github.com/facebook/react-native-website/issues/2771",children:"bugs"})," when default value is different between SSR and client:"]}),"\n","\n",(0,n.jsx)(a.Z,{children:(0,n.jsxs)(l.Z,{defaultValue:b?"ios":"android",children:[(0,n.jsx)(s.Z,{value:"android",label:"Android",children:"Android content"}),(0,n.jsx)(s.Z,{value:"ios",label:"iOS",children:"iOS content"})]})}),"\n",(0,n.jsx)(t.h2,{id:"tabs-sync-with-different-heights",children:"Tabs sync with different heights"}),"\n",(0,n.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,n.jsx)(s.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + C to copy."})}),(0,n.jsx)(s.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text"})})]}),"\n",(0,n.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,n.jsx)(s.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + V to paste."})}),(0,n.jsx)(s.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"Use Command + V to paste."})})]}),"\n",(0,n.jsx)(t.p,{children:"When clicking tabs above, they should stay under cursor and we should adjust the scroll position."}),"\n",(0,n.jsx)(t.h2,{id:"tabs-with-classname-and-lazy-loading",children:"Tabs with className and lazy loading"}),"\n",(0,n.jsxs)(l.Z,{lazy:!0,children:[(0,n.jsx)(s.Z,{value:"apple",label:"Apple",className:"alert alert--primary",default:!0,children:(0,n.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,n.jsx)(s.Z,{value:"orange",label:"Orange",className:"alert alert--secondary",children:(0,n.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})}),(0,n.jsx)(s.Z,{value:"banana",label:"Banana",className:"alert alert--success",children:(0,n.jsx)(t.p,{children:"This is a banana \ud83c\udf4c"})})]})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(v,{...e})}):v(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>l});var n=r(27378);const o={},a=n.createContext(o);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53704],{61132:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>T});var n=r(24246),o=r(27378),a=r(40624),l=r(75527),s=r(3620),i=r(44479),c=r(62821),u=r(52196),d=r(53589);function b(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function g(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function v(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function p({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const r=(0,s.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(n),l=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(y(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){b(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[a,l]}function f(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,a=v(e),[l,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!p({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[c,u]=h({queryString:r,groupId:n}),[b,y]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),g=(()=>{const e=null!=c?c:b;return p({value:e,tabValues:a})?e:null})();(0,i.Z)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),y(e)}),[u,y,a]),tabValues:a}}var x=r(29088);const m={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){w(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=s[n].value;a!==r&&(c(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",O(j({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",m.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=f(e);return(0,n.jsxs)("div",{className:(0,a.Z)("tabs-container",m.tabList),children:[(0,n.jsx)(P,j({},t,e)),(0,n.jsx)(k,j({},t,e))]})}function T(e){const t=(0,x.Z)();return(0,n.jsx)(S,O(j({},e),{children:g(e.children)}),String(t))}},6698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){l(e,t,r[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function c({children:e,minHeight:t,url:r="http://localhost:3000",style:l,bodyStyle:c}){return(0,n.jsxs)("div",{className:a.browserWindow,style:i(s({},l),{minHeight:t}),children:[(0,n.jsxs)("div",{className:a.browserWindowHeader,children:[(0,n.jsxs)("div",{className:a.buttons,children:[(0,n.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,o.Z)(a.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:a.bar}),(0,n.jsx)("span",{className:a.bar}),(0,n.jsx)("span",{className:a.bar})]})})]}),(0,n.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},16021:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>v,frontMatter:()=>i,isMacOS:()=>b,metadata:()=>u,toc:()=>y});var n=r(24246),o=r(71670),a=r(6698),l=r(97555),s=r(61132);const i={},c="Tabs tests",u={type:"mdx",permalink:"/tests/pages/tabs-tests",source:"@site/_dogfooding/_pages tests/tabs-tests.mdx",title:"Tabs tests",description:"Tabs with dynamic default value",frontMatter:{},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx",unlisted:!1},d={},b="undefined"!=typeof window&&navigator.platform.startsWith("Mac"),y=[{value:"Tabs with dynamic default value",id:"tabs-with-dynamic-default-value",level:2},{value:"Tabs sync with different heights",id:"tabs-sync-with-different-heights",level:2},{value:"Tabs with className and lazy loading",id:"tabs-with-classname-and-lazy-loading",level:2}];function g(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tabs-tests",children:"Tabs tests"})}),"\n","\n",(0,n.jsx)(t.h2,{id:"tabs-with-dynamic-default-value",children:"Tabs with dynamic default value"}),"\n",(0,n.jsxs)(t.p,{children:["This can cause ",(0,n.jsx)(t.a,{href:"https://github.com/facebook/react-native-website/issues/2771",children:"bugs"})," when default value is different between SSR and client:"]}),"\n","\n",(0,n.jsx)(a.Z,{children:(0,n.jsxs)(l.Z,{defaultValue:b?"ios":"android",children:[(0,n.jsx)(s.Z,{value:"android",label:"Android",children:"Android content"}),(0,n.jsx)(s.Z,{value:"ios",label:"iOS",children:"iOS content"})]})}),"\n",(0,n.jsx)(t.h2,{id:"tabs-sync-with-different-heights",children:"Tabs sync with different heights"}),"\n",(0,n.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,n.jsx)(s.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + C to copy."})}),(0,n.jsx)(s.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text"})})]}),"\n",(0,n.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,n.jsx)(s.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + V to paste."})}),(0,n.jsx)(s.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"Use Command + V to paste."})})]}),"\n",(0,n.jsx)(t.p,{children:"When clicking tabs above, they should stay under cursor and we should adjust the scroll position."}),"\n",(0,n.jsx)(t.h2,{id:"tabs-with-classname-and-lazy-loading",children:"Tabs with className and lazy loading"}),"\n",(0,n.jsxs)(l.Z,{lazy:!0,children:[(0,n.jsx)(s.Z,{value:"apple",label:"Apple",className:"alert alert--primary",default:!0,children:(0,n.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,n.jsx)(s.Z,{value:"orange",label:"Orange",className:"alert alert--secondary",children:(0,n.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})}),(0,n.jsx)(s.Z,{value:"banana",label:"Banana",className:"alert alert--success",children:(0,n.jsx)(t.p,{children:"This is a banana \ud83c\udf4c"})})]})]})}function v(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(g,{...e})}):g(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>l});var n=r(27378);const o={},a=n.createContext(o);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1864f992.048c87cc.js b/assets/js/1864f992.048c87cc.js new file mode 100644 index 000000000000..1de35992f440 --- /dev/null +++ b/assets/js/1864f992.048c87cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83918],{12111:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var i=n(24246),a=n(71670);const r={slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},t="prefer-docusaurus-heading",d={id:"api/misc/eslint-plugin/prefer-docusaurus-heading",title:"prefer-docusaurus-heading",description:"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.",source:"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},sidebar:"api",previous:{title:"no-untranslated-text",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},next:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},u={},c=[{value:"Rule Details",id:"details",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"prefer-docusaurus-heading",children:"prefer-docusaurus-heading"})}),"\n",(0,i.jsxs)(s.p,{children:["Ensures that the ",(0,i.jsx)(s.code,{children:"@theme/Heading"})," theme component provided by Docusaurus ",(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:(0,i.jsx)(s.code,{children:"theme-classic"})})," is used instead of ",(0,i.jsx)(s.code,{children:"<hn>"})," tags for headings."]}),"\n",(0,i.jsx)(s.h2,{id:"details",children:"Rule Details"}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"incorrect"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-html",children:"<h1>This is heading 1</h1>\n\n<h2>This is heading 2</h2>\n\n<h3>This is heading 3</h3>\n"})}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"correct"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-javascript",children:"import Heading from '@theme/Heading'\n\n<Heading as='h1'>This is heading 1</Heading>\n\n<Heading as='h2'>This is heading 2</Heading>\n\n<Heading as='h3'>This is heading 3</Heading>\n"})})]})}function h(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>t});var i=n(27378);const a={},r=i.createContext(a);function t(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1864f992.a26ff588.js b/assets/js/1864f992.a26ff588.js deleted file mode 100644 index 4631504d5833..000000000000 --- a/assets/js/1864f992.a26ff588.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83918],{12111:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>t,default:()=>l,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var i=n(24246),a=n(71670);const r={slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},t="prefer-docusaurus-heading",d={id:"api/misc/eslint-plugin/prefer-docusaurus-heading",title:"prefer-docusaurus-heading",description:"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.",source:"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},sidebar:"api",previous:{title:"no-untranslated-text",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},next:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},u={},c=[{value:"Rule Details",id:"details",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"prefer-docusaurus-heading",children:"prefer-docusaurus-heading"})}),"\n",(0,i.jsxs)(s.p,{children:["Ensures that the ",(0,i.jsx)(s.code,{children:"@theme/Heading"})," theme component provided by Docusaurus ",(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:(0,i.jsx)(s.code,{children:"theme-classic"})})," is used instead of ",(0,i.jsx)(s.code,{children:"<hn>"})," tags for headings."]}),"\n",(0,i.jsx)(s.h2,{id:"details",children:"Rule Details"}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"incorrect"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-html",children:"<h1>This is heading 1</h1>\n\n<h2>This is heading 2</h2>\n\n<h3>This is heading 3</h3>\n"})}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"correct"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-javascript",children:"import Heading from '@theme/Heading'\n\n<Heading as='h1'>This is heading 1</Heading>\n\n<Heading as='h2'>This is heading 2</Heading>\n\n<Heading as='h3'>This is heading 3</Heading>\n"})})]})}function l(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>t});var i=n(27378);const a={},r=i.createContext(a);function t(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d8d7b8d.4bf92fa5.js b/assets/js/1d8d7b8d.4bf92fa5.js deleted file mode 100644 index 811ee733352f..000000000000 --- a/assets/js/1d8d7b8d.4bf92fa5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67800],{61132:(e,r,n)=>{n.d(r,{Z:()=>t});var s=n(24246),a=(n(27378),n(40624));const o={tabItem:"tabItem_pnkT"};function t({children:e,hidden:r,className:n}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>A});var s=n(24246),a=n(27378),o=n(40624),t=n(75527),c=n(3620),i=n(44479),l=n(62821),h=n(52196),d=n(53589);function u(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:r,children:n}=e;return(0,a.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:s}})=>({value:e,label:r,attributes:n,default:s})))}(n);return function(e){const r=(0,h.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function x({queryString:e=!1,groupId:r}){const n=(0,c.k6)(),s=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),o=(0,l._X)(s),t=(0,a.useCallback)((e=>{if(!s)return;const r=new URLSearchParams(n.location.search);r.set(s,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){u(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[s,n]);return[o,t]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:s}=e,o=f(e),[t,c]=(0,a.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const s=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:o}))),[l,h]=x({queryString:n,groupId:s}),[u,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,d.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:s}),g=(()=>{const e=null!=l?l:u;return m({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:t,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),p(e)}),[h,p,o]),tabValues:o}}var y=n(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){w(e,r,n[r])}))}return e}function S(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function D({className:e,block:r,selectedValue:n,selectValue:a,tabValues:c}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,t.o5)(),h=e=>{const r=e.currentTarget,s=i.indexOf(r),o=c[s].value;o!==n&&(l(r),a(o))},d=e=>{let r=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const s=i.indexOf(e.currentTarget)+1;var n;r=null!==(n=i[s])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var s;r=null!==(s=i[n])&&void 0!==s?s:i[i.length-1];break}}null==r||r.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},e),children:c.map((({value:e,label:r,attributes:a})=>(0,s.jsx)("li",S(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:h},a),{className:(0,o.Z)("tabs__item",b.tabItem,null==a?void 0:a.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function k({lazy:e,children:r,selectedValue:n}){const t=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=t.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:t.map(((e,r)=>(0,a.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function O(e){const r=j(e);return(0,s.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,s.jsx)(D,v({},r,e)),(0,s.jsx)(k,v({},r,e))]})}function A(e){const r=(0,y.Z)();return(0,s.jsx)(O,S(v({},e),{children:g(e.children)}),String(r))}},12293:(e,r,n)=>{n.d(r,{Z:()=>s});const s=n.p+"assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg"},34248:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>h,contentTitle:()=>i,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var s=n(24246),a=n(71670),o=n(97555),t=n(61132);const c={keywords:["algolia","search"]},i="Search",l={id:"search",title:"Search",description:"There are a few options you can use to add search to your website:",source:"@site/docs/search.mdx",sourceDirName:".",slug:"/search",permalink:"/docs/search",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{keywords:["algolia","search"]},sidebar:"docs",previous:{title:"Static Assets",permalink:"/docs/static-assets"},next:{title:"Browser support",permalink:"/docs/browser-support"}},h={},d=[{value:"\ud83e\udd47 Using Algolia DocSearch",id:"using-algolia-docsearch",level:2},{value:"Index Configuration",id:"algolia-index-configuration",level:3},{value:"Connecting Algolia",id:"connecting-algolia",level:3},{value:"Contextual search",id:"contextual-search",level:3},{value:"Styling your Algolia search",id:"styling-your-algolia-search",level:3},{value:"Customizing the Algolia search behavior",id:"customizing-the-algolia-search-behavior",level:3},{value:"Editing the Algolia search component",id:"editing-the-algolia-search-component",level:3},{value:"Troubleshooting",id:"algolia-troubleshooting",level:3},{value:"No Search Results",id:"algolia-no-search-results",level:4},{value:"Support",id:"algolia-support",level:3},{value:"\ud83d\udc65 Using Typesense DocSearch",id:"using-typesense-docsearch",level:2},{value:"\ud83d\udc65 Using Local Search",id:"using-local-search",level:2},{value:"\ud83d\udc65 Using your own search",id:"using-your-own-search",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components},{Details:c}=r;return c||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"search",children:"Search"})}),"\n",(0,s.jsx)(r.p,{children:"There are a few options you can use to add search to your website:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\ud83e\udd47 ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"})," (",(0,s.jsx)(r.strong,{children:"official"}),")"]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-typesense-docsearch",children:"Typesense DocSearch"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-local-search",children:"Local Search"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsxs)(r.a,{href:"#using-your-own-search",children:["Your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component"]})]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["\ud83e\udd47 Docusaurus provides ",(0,s.jsx)(r.strong,{children:"first-class support"})," for ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"}),"."]}),(0,s.jsxs)(r.p,{children:["\ud83d\udc65 Other options are ",(0,s.jsx)(r.strong,{children:"maintained by the community"}),": please report bugs to their respective repositories."]})]}),"\n",(0,s.jsx)(r.h2,{id:"using-algolia-docsearch",children:"\ud83e\udd47 Using Algolia DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus has ",(0,s.jsx)(r.strong,{children:"official support"})," for ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com",children:"Algolia DocSearch"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["The service is ",(0,s.jsx)(r.strong,{children:"free"})," for any developer documentation or technical blog: just make sure to read the ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply/",children:"checklist"})," and ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply",children:"apply to the DocSearch program"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"DocSearch crawls your website once a week (the schedule is configurable from the web interface) and aggregates all the content in an Algolia index. This content is then queried directly from your front-end using the Algolia API."}),"\n",(0,s.jsxs)(r.p,{children:["If your website is ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply",children:"not eligible"})," for the free, hosted version of DocSearch, or if your website sits behind a firewall and is not public, then you can ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/run-your-own/",children:"run your own"})," DocSearch crawler."]}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:["By default, the Docusaurus preset generates a ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/sitemap.xml",children:"sitemap.xml"})," that the Algolia crawler can use."]})}),"\n",(0,s.jsx)(r.admonition,{title:"From the old docsearch?",type:"info",children:(0,s.jsxs)(r.p,{children:["You can read more about migration from the legacy DocSearch infra in ",(0,s.jsx)(r.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"our blog post"})," or ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/migrating-from-legacy",children:"the DocSearch migration docs"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"algolia-index-configuration",children:"Index Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via ",(0,s.jsx)(r.a,{href:"https://crawler.algolia.com/",children:"the web interface"}),". Indices are readily available after deployment, so manual configuration usually isn't necessary."]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended crawler config",type:"danger",children:(0,s.jsxs)(r.p,{children:["It is highly recommended to use our official ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/templates/#docusaurus-v3-template",children:(0,s.jsx)(r.strong,{children:"Docusaurus v3 crawler configuration"})}),". We cannot support you if you choose a different crawler configuration."]})}),"\n",(0,s.jsxs)(r.admonition,{title:"When updating your crawler config",type:"warning",children:[(0,s.jsxs)(r.p,{children:["The crawler configuration contains a ",(0,s.jsx)(r.code,{children:"initialIndexSettings"}),", which will only be used to initialize your Algolia index if it does not exist yet."]}),(0,s.jsxs)(r.p,{children:["If you update your ",(0,s.jsx)(r.code,{children:"initialIndexSettings"})," crawler setting, it is possible to update the index manually through the interface, but ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/9200#issuecomment-1667338492",children:"the Algolia team recommends to delete your index and then restart a crawl"})," to fully reinitialize it with the new settings."]})]}),"\n",(0,s.jsx)(r.h3,{id:"connecting-algolia",children:"Connecting Algolia"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus' own ",(0,s.jsx)(r.code,{children:"@docusaurus/preset-classic"})," supports Algolia DocSearch integration. If you use the classic preset, no additional installation is needed."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsxs)("summary",{children:["Installation steps when not using ",(0,s.jsx)("code",{children:"@docusaurus/preset-classic"})]}),(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"Install the package:"}),"\n"]}),(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn add @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-search-algolia\n"})})})]}),(0,s.jsxs)(r.ol,{start:"2",children:["\n",(0,s.jsxs)(r.li,{children:["Register the theme in ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"}),":"]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'My site',\n // ...\n themes: ['@docusaurus/theme-search-algolia'],\n themeConfig: {\n // ...\n },\n};\n"})})]}),"\n",(0,s.jsxs)(r.p,{children:["Then, add an ",(0,s.jsx)(r.code,{children:"algolia"})," field in your ",(0,s.jsx)(r.code,{children:"themeConfig"}),". ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply/",children:"Apply for DocSearch"})})," to get your Algolia index and API key."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n // The application ID provided by Algolia\n appId: 'YOUR_APP_ID',\n\n // Public API key: it is safe to commit it\n apiKey: 'YOUR_SEARCH_API_KEY',\n\n indexName: 'YOUR_INDEX_NAME',\n\n // Optional: see doc section below\n contextualSearch: true,\n\n // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.\n externalUrlRegex: 'external\\\\.com|domain\\\\.com',\n\n // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs\n replaceSearchResultPathname: {\n from: '/docs/', // or as RegExp: /\\/docs\\//\n to: '/',\n },\n\n // Optional: Algolia search parameters\n searchParameters: {},\n\n // Optional: path for search page that enabled by default (`false` to disable it)\n searchPagePath: 'search',\n\n // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default)\n insights: false,\n\n //... other Algolia params\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"searchParameters"})," option used to be named ",(0,s.jsx)(r.code,{children:"algoliaOptions"})," in Docusaurus v1."]}),(0,s.jsxs)(r.p,{children:["Refer to its ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/api#searchparameters",children:"official DocSearch documentation"})," for possible values."]})]}),"\n",(0,s.jsxs)(r.admonition,{type:"warning",children:[(0,s.jsx)(r.p,{children:"The search feature will not work reliably until Algolia crawls your site."}),(0,s.jsxs)(r.p,{children:["If search doesn't work after any significant change, please use the Algolia dashboard to ",(0,s.jsx)(r.strong,{children:"trigger a new crawl"}),"."]})]}),"\n",(0,s.jsx)(r.h3,{id:"contextual-search",children:"Contextual search"}),"\n",(0,s.jsxs)(r.p,{children:["Contextual search is ",(0,s.jsx)(r.strong,{children:"enabled by default"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["It ensures that search results are ",(0,s.jsx)(r.strong,{children:"relevant to the current language and version"}),"."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: true,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.p,{children:["Let's consider you have 2 docs versions (",(0,s.jsx)(r.strong,{children:"v1"})," and ",(0,s.jsx)(r.strong,{children:"v2"}),") and 2 languages (",(0,s.jsx)(r.code,{children:"en"})," and ",(0,s.jsx)(r.code,{children:"fr"}),")."]}),"\n",(0,s.jsx)(r.p,{children:"When browsing v2 docs, it would be odd to return search results for the v1 documentation. Sometimes v1 and v2 docs are quite similar, and you would end up with duplicate search results for the same query (one result per version)."}),"\n",(0,s.jsx)(r.p,{children:"Similarly, when browsing the French site, it would be odd to return search results for the English docs."}),"\n",(0,s.jsx)(r.p,{children:"To solve this problem, the contextual search feature understands that you are browsing a specific docs version and language, and will create the search query filters dynamically."}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/en/docs/v1/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"English"})," results for the ",(0,s.jsx)(r.strong,{children:"v1"})," docs (+ other unversioned pages)"]}),"\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/fr/docs/v2/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"French"})," results for the ",(0,s.jsx)(r.strong,{children:"v2"})," docs (+ other unversioned pages)"]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["When using ",(0,s.jsx)(r.code,{children:"contextualSearch: true"})," (default), the contextual facet filters will be merged with the ones provided with ",(0,s.jsx)(r.code,{children:"algolia.searchParameters.facetFilters"})," ."]}),(0,s.jsxs)(r.p,{children:["For specific needs, you can disable ",(0,s.jsx)(r.code,{children:"contextualSearch"})," and define your own ",(0,s.jsx)(r.code,{children:"facetFilters"}),":"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: false,\n searchParameters: {\n facetFilters: ['language:en', ['filter1', 'filter2'], 'filter3'],\n },\n },\n // highlight-end\n },\n};\n"})}),(0,s.jsxs)(r.p,{children:["Refer to the relevant ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting documentation"}),"."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Contextual search doesn't work?",type:"warning",children:(0,s.jsxs)(r.p,{children:["If you only get search results when Contextual Search is disabled, this is very likely because of an ",(0,s.jsx)(r.a,{href:"#algolia-no-search-results",children:"index configuration issue"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"styling-your-algolia-search",children:"Styling your Algolia search"}),"\n",(0,s.jsx)(r.p,{children:"By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards."}),"\n",(0,s.jsxs)(r.p,{children:["Still, you can reuse the ",(0,s.jsx)(r.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima CSS variables"})," from Docusaurus to style DocSearch by editing the ",(0,s.jsx)(r.code,{children:"/src/css/custom.css"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"[data-theme='light'] .DocSearch {\n /* --docsearch-primary-color: var(--ifm-color-primary); */\n /* --docsearch-text-color: var(--ifm-font-color-base); */\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(94, 100, 112, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-color-secondary-lighter);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-color-secondary);\n --docsearch-searchbox-focus-background: var(--ifm-color-white);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-white);\n /* Footer */\n --docsearch-footer-background: var(--ifm-color-white);\n}\n\n[data-theme='dark'] .DocSearch {\n --docsearch-text-color: var(--ifm-font-color-base);\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(47, 55, 69, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-background-color);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-background-color);\n --docsearch-searchbox-focus-background: var(--ifm-color-black);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-emphasis-100);\n /* Footer */\n --docsearch-footer-background: var(--ifm-background-surface-color);\n --docsearch-key-gradient: linear-gradient(\n -26.5deg,\n var(--ifm-color-emphasis-200) 0%,\n var(--ifm-color-emphasis-100) 100%\n );\n}\n"})}),"\n",(0,s.jsx)(r.h3,{id:"customizing-the-algolia-search-behavior",children:"Customizing the Algolia search behavior"}),"\n",(0,s.jsxs)(r.p,{children:["Algolia DocSearch supports a ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/api/",children:"list of options"})," that you can pass to the ",(0,s.jsx)(r.code,{children:"algolia"})," field in the ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // ...\n algolia: {\n apiKey: 'YOUR_API_KEY',\n indexName: 'YOUR_INDEX_NAME',\n // Options...\n },\n },\n};\n"})}),"\n",(0,s.jsx)(r.h3,{id:"editing-the-algolia-search-component",children:"Editing the Algolia search component"}),"\n",(0,s.jsxs)(r.p,{children:["If you prefer to edit the Algolia search React component, ",(0,s.jsx)(r.a,{href:"/docs/swizzling",children:"swizzle"})," the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-search-algolia"}),":"]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})})]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(r.p,{children:"Here are the most common issues Docusaurus users face when using Algolia DocSearch."}),"\n",(0,s.jsx)(r.h4,{id:"algolia-no-search-results",children:"No Search Results"}),"\n",(0,s.jsxs)(r.p,{children:["Seeing no search results is usually related to an ",(0,s.jsx)(r.strong,{children:"index configuration problem"}),"."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsx)("summary",{children:"How to check if I have an config problem?"}),(0,s.jsxs)(r.p,{children:["Docusaurus uses ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting"})," for its ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," feature, to create dynamic queries such as:"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-json",children:'[\n "language:en",\n [\n "docusaurus_tag:default",\n "docusaurus_tag:docs-default-3.2.1",\n "docusaurus_tag:docs-community-current",\n "docusaurus_tag:docs-docs-tests-current"\n ]\n]\n'})}),(0,s.jsxs)(r.p,{children:["On the Algolia UI, your index should allow to create facet queries on fields ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"}),", as shown in the screenshot below:"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"Algolia index showing appropriate faceting fields",src:n(12293).Z+"",width:"1072",height:"1761"})}),(0,s.jsxs)(r.p,{children:["Alternatively, if you disable ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," with ",(0,s.jsx)(r.code,{children:"{contextualSearch: false}"})," (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended configuration",type:"danger",children:(0,s.jsxs)(r.p,{children:["We ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend a specific crawler configuration"})," for a good reason. We cannot support you if you choose to use a different configuration."]})}),"\n",(0,s.jsx)(r.p,{children:"You can fix index configuration problems by following those steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["Use the ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend crawler configuration"})]}),"\n",(0,s.jsx)(r.li,{children:"Delete your index through the UI"}),"\n",(0,s.jsx)(r.li,{children:"Trigger a new crawl through the UI"}),"\n",(0,s.jsxs)(r.li,{children:["Check your index is recreated with the appropriate faceting fields: ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"})]}),"\n",(0,s.jsxs)(r.li,{children:["See that you now get search results, even with ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," enabled"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-support",children:"Support"}),"\n",(0,s.jsx)(r.p,{children:"The Algolia DocSearch team can help you figure out search problems on your site."}),"\n",(0,s.jsxs)(r.p,{children:["You can reach out to Algolia via ",(0,s.jsx)(r.a,{href:"https://algolia.com/support",children:"their support page"})," or on ",(0,s.jsx)(r.a,{href:"https://discord.gg/wr2m5j948P",children:"Discord"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus also has an ",(0,s.jsx)(r.code,{children:"#algolia"})," channel on ",(0,s.jsx)(r.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-typesense-docsearch",children:"\ud83d\udc65 Using Typesense DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org",children:"Typesense"})," DocSearch works similar to Algolia DocSearch, except that your website is indexed into a Typesense search cluster."]}),"\n",(0,s.jsxs)(r.p,{children:["Typesense is an ",(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense",children:"open source"})," instant-search engine that you can either:"]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/install-typesense.html#option-2-local-machine-self-hosting",children:"Self-Host"})," on your own servers or"]}),"\n",(0,s.jsxs)(r.li,{children:["Use the Managed ",(0,s.jsx)(r.a,{href:"https://cloud.typesense.org",children:"Typesense Cloud"})," service."]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Similar to Algolia DocSearch, there are two components:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense-docsearch-scraper",children:"typesense-docsearch-scraper"})," - which scrapes your website and indexes the data in your Typesense cluster."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - a search bar UI component to add to your website."]}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["Read a step-by-step walk-through of how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/docsearch.html#step-1-set-up-docsearch-scraper",children:"run typesense-docsearch-scraper here"})," and how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/docsearch.html#option-a-docusaurus-powered-sites",children:"install the Search Bar in your Docusaurus Site here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-local-search",children:"\ud83d\udc65 Using Local Search"}),"\n",(0,s.jsx)(r.p,{children:"You can use a local search plugin for websites where the search index is small and can be downloaded to your users' browsers when they visit your website."}),"\n",(0,s.jsxs)(r.p,{children:["You'll find a list of community-supported ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/community/resources#search",children:"local search plugins listed here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-your-own-search",children:"\ud83d\udc65 Using your own search"}),"\n",(0,s.jsxs)(r.p,{children:["To use your own search, swizzle the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-classic"})]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic SearchBar\n"})})})]}),"\n",(0,s.jsxs)(r.p,{children:["This will create an ",(0,s.jsx)(r.code,{children:"src/theme/SearchBar"})," file in your project folder. Restart your dev server and edit the component, you will see that Docusaurus uses your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component now."]}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Notes"}),": You can alternatively ",(0,s.jsx)(r.a,{href:"#editing-the-algolia-search-component",children:"swizzle from Algolia SearchBar"})," and create your own search component from there."]})]})}function p(e={}){const{wrapper:r}={...(0,a.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>c,a:()=>t});var s=n(27378);const a={},o=s.createContext(a);function t(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d8d7b8d.669adac3.js b/assets/js/1d8d7b8d.669adac3.js new file mode 100644 index 000000000000..2091c143df71 --- /dev/null +++ b/assets/js/1d8d7b8d.669adac3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67800],{61132:(e,r,n)=>{n.d(r,{Z:()=>t});var s=n(24246),a=(n(27378),n(40624));const o={tabItem:"tabItem_pnkT"};function t({children:e,hidden:r,className:n}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>A});var s=n(24246),a=n(27378),o=n(40624),t=n(75527),c=n(3620),i=n(44479),l=n(62821),h=n(52196),d=n(53589);function u(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:r,children:n}=e;return(0,a.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:s}})=>({value:e,label:r,attributes:n,default:s})))}(n);return function(e){const r=(0,h.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function x({queryString:e=!1,groupId:r}){const n=(0,c.k6)(),s=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),o=(0,l._X)(s),t=(0,a.useCallback)((e=>{if(!s)return;const r=new URLSearchParams(n.location.search);r.set(s,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){u(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[s,n]);return[o,t]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:s}=e,o=f(e),[t,c]=(0,a.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const s=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:o}))),[l,h]=x({queryString:n,groupId:s}),[u,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,d.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:s}),g=(()=>{const e=null!=l?l:u;return m({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:t,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),p(e)}),[h,p,o]),tabValues:o}}var y=n(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){w(e,r,n[r])}))}return e}function S(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function D({className:e,block:r,selectedValue:n,selectValue:a,tabValues:c}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,t.o5)(),h=e=>{const r=e.currentTarget,s=i.indexOf(r),o=c[s].value;o!==n&&(l(r),a(o))},d=e=>{let r=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const s=i.indexOf(e.currentTarget)+1;var n;r=null!==(n=i[s])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var s;r=null!==(s=i[n])&&void 0!==s?s:i[i.length-1];break}}null==r||r.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},e),children:c.map((({value:e,label:r,attributes:a})=>(0,s.jsx)("li",S(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:h},a),{className:(0,o.Z)("tabs__item",b.tabItem,null==a?void 0:a.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function k({lazy:e,children:r,selectedValue:n}){const t=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=t.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:t.map(((e,r)=>(0,a.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function O(e){const r=j(e);return(0,s.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,s.jsx)(D,v({},r,e)),(0,s.jsx)(k,v({},r,e))]})}function A(e){const r=(0,y.Z)();return(0,s.jsx)(O,S(v({},e),{children:g(e.children)}),String(r))}},12293:(e,r,n)=>{n.d(r,{Z:()=>s});const s=n.p+"assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg"},34248:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>h,contentTitle:()=>i,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var s=n(24246),a=n(71670),o=n(97555),t=n(61132);const c={keywords:["algolia","search"]},i="Search",l={id:"search",title:"Search",description:"There are a few options you can use to add search to your website:",source:"@site/docs/search.mdx",sourceDirName:".",slug:"/search",permalink:"/docs/search",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{keywords:["algolia","search"]},sidebar:"docs",previous:{title:"Static Assets",permalink:"/docs/static-assets"},next:{title:"Browser support",permalink:"/docs/browser-support"}},h={},d=[{value:"\ud83e\udd47 Using Algolia DocSearch",id:"using-algolia-docsearch",level:2},{value:"Index Configuration",id:"algolia-index-configuration",level:3},{value:"Connecting Algolia",id:"connecting-algolia",level:3},{value:"Contextual search",id:"contextual-search",level:3},{value:"Styling your Algolia search",id:"styling-your-algolia-search",level:3},{value:"Customizing the Algolia search behavior",id:"customizing-the-algolia-search-behavior",level:3},{value:"Editing the Algolia search component",id:"editing-the-algolia-search-component",level:3},{value:"Troubleshooting",id:"algolia-troubleshooting",level:3},{value:"No Search Results",id:"algolia-no-search-results",level:4},{value:"Support",id:"algolia-support",level:3},{value:"\ud83d\udc65 Using Typesense DocSearch",id:"using-typesense-docsearch",level:2},{value:"\ud83d\udc65 Using Local Search",id:"using-local-search",level:2},{value:"\ud83d\udc65 Using your own search",id:"using-your-own-search",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components},{Details:c}=r;return c||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"search",children:"Search"})}),"\n",(0,s.jsx)(r.p,{children:"There are a few options you can use to add search to your website:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\ud83e\udd47 ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"})," (",(0,s.jsx)(r.strong,{children:"official"}),")"]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-typesense-docsearch",children:"Typesense DocSearch"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-local-search",children:"Local Search"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsxs)(r.a,{href:"#using-your-own-search",children:["Your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component"]})]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["\ud83e\udd47 Docusaurus provides ",(0,s.jsx)(r.strong,{children:"first-class support"})," for ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"}),"."]}),(0,s.jsxs)(r.p,{children:["\ud83d\udc65 Other options are ",(0,s.jsx)(r.strong,{children:"maintained by the community"}),": please report bugs to their respective repositories."]})]}),"\n",(0,s.jsx)(r.h2,{id:"using-algolia-docsearch",children:"\ud83e\udd47 Using Algolia DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus has ",(0,s.jsx)(r.strong,{children:"official support"})," for ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com",children:"Algolia DocSearch"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["The service is ",(0,s.jsx)(r.strong,{children:"free"})," for any developer documentation or technical blog: just make sure to read the ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply/",children:"checklist"})," and ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply",children:"apply to the DocSearch program"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"DocSearch crawls your website once a week (the schedule is configurable from the web interface) and aggregates all the content in an Algolia index. This content is then queried directly from your front-end using the Algolia API."}),"\n",(0,s.jsxs)(r.p,{children:["If your website is ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply",children:"not eligible"})," for the free, hosted version of DocSearch, or if your website sits behind a firewall and is not public, then you can ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/run-your-own/",children:"run your own"})," DocSearch crawler."]}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:["By default, the Docusaurus preset generates a ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/sitemap.xml",children:"sitemap.xml"})," that the Algolia crawler can use."]})}),"\n",(0,s.jsx)(r.admonition,{title:"From the old docsearch?",type:"info",children:(0,s.jsxs)(r.p,{children:["You can read more about migration from the legacy DocSearch infra in ",(0,s.jsx)(r.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"our blog post"})," or ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/migrating-from-legacy",children:"the DocSearch migration docs"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"algolia-index-configuration",children:"Index Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via ",(0,s.jsx)(r.a,{href:"https://crawler.algolia.com/",children:"the web interface"}),". Indices are readily available after deployment, so manual configuration usually isn't necessary."]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended crawler config",type:"danger",children:(0,s.jsxs)(r.p,{children:["It is highly recommended to use our official ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/templates/#docusaurus-v3-template",children:(0,s.jsx)(r.strong,{children:"Docusaurus v3 crawler configuration"})}),". We cannot support you if you choose a different crawler configuration."]})}),"\n",(0,s.jsxs)(r.admonition,{title:"When updating your crawler config",type:"warning",children:[(0,s.jsxs)(r.p,{children:["The crawler configuration contains a ",(0,s.jsx)(r.code,{children:"initialIndexSettings"}),", which will only be used to initialize your Algolia index if it does not exist yet."]}),(0,s.jsxs)(r.p,{children:["If you update your ",(0,s.jsx)(r.code,{children:"initialIndexSettings"})," crawler setting, it is possible to update the index manually through the interface, but ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/9200#issuecomment-1667338492",children:"the Algolia team recommends to delete your index and then restart a crawl"})," to fully reinitialize it with the new settings."]})]}),"\n",(0,s.jsx)(r.h3,{id:"connecting-algolia",children:"Connecting Algolia"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus' own ",(0,s.jsx)(r.code,{children:"@docusaurus/preset-classic"})," supports Algolia DocSearch integration. If you use the classic preset, no additional installation is needed."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsxs)("summary",{children:["Installation steps when not using ",(0,s.jsx)("code",{children:"@docusaurus/preset-classic"})]}),(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"Install the package:"}),"\n"]}),(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn add @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-search-algolia\n"})})})]}),(0,s.jsxs)(r.ol,{start:"2",children:["\n",(0,s.jsxs)(r.li,{children:["Register the theme in ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"}),":"]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'My site',\n // ...\n themes: ['@docusaurus/theme-search-algolia'],\n themeConfig: {\n // ...\n },\n};\n"})})]}),"\n",(0,s.jsxs)(r.p,{children:["Then, add an ",(0,s.jsx)(r.code,{children:"algolia"})," field in your ",(0,s.jsx)(r.code,{children:"themeConfig"}),". ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply/",children:"Apply for DocSearch"})})," to get your Algolia index and API key."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n // The application ID provided by Algolia\n appId: 'YOUR_APP_ID',\n\n // Public API key: it is safe to commit it\n apiKey: 'YOUR_SEARCH_API_KEY',\n\n indexName: 'YOUR_INDEX_NAME',\n\n // Optional: see doc section below\n contextualSearch: true,\n\n // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.\n externalUrlRegex: 'external\\\\.com|domain\\\\.com',\n\n // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs\n replaceSearchResultPathname: {\n from: '/docs/', // or as RegExp: /\\/docs\\//\n to: '/',\n },\n\n // Optional: Algolia search parameters\n searchParameters: {},\n\n // Optional: path for search page that enabled by default (`false` to disable it)\n searchPagePath: 'search',\n\n // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default)\n insights: false,\n\n //... other Algolia params\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"searchParameters"})," option used to be named ",(0,s.jsx)(r.code,{children:"algoliaOptions"})," in Docusaurus v1."]}),(0,s.jsxs)(r.p,{children:["Refer to its ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/api#searchparameters",children:"official DocSearch documentation"})," for possible values."]})]}),"\n",(0,s.jsxs)(r.admonition,{type:"warning",children:[(0,s.jsx)(r.p,{children:"The search feature will not work reliably until Algolia crawls your site."}),(0,s.jsxs)(r.p,{children:["If search doesn't work after any significant change, please use the Algolia dashboard to ",(0,s.jsx)(r.strong,{children:"trigger a new crawl"}),"."]})]}),"\n",(0,s.jsx)(r.h3,{id:"contextual-search",children:"Contextual search"}),"\n",(0,s.jsxs)(r.p,{children:["Contextual search is ",(0,s.jsx)(r.strong,{children:"enabled by default"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["It ensures that search results are ",(0,s.jsx)(r.strong,{children:"relevant to the current language and version"}),"."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: true,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.p,{children:["Let's consider you have 2 docs versions (",(0,s.jsx)(r.strong,{children:"v1"})," and ",(0,s.jsx)(r.strong,{children:"v2"}),") and 2 languages (",(0,s.jsx)(r.code,{children:"en"})," and ",(0,s.jsx)(r.code,{children:"fr"}),")."]}),"\n",(0,s.jsx)(r.p,{children:"When browsing v2 docs, it would be odd to return search results for the v1 documentation. Sometimes v1 and v2 docs are quite similar, and you would end up with duplicate search results for the same query (one result per version)."}),"\n",(0,s.jsx)(r.p,{children:"Similarly, when browsing the French site, it would be odd to return search results for the English docs."}),"\n",(0,s.jsx)(r.p,{children:"To solve this problem, the contextual search feature understands that you are browsing a specific docs version and language, and will create the search query filters dynamically."}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/en/docs/v1/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"English"})," results for the ",(0,s.jsx)(r.strong,{children:"v1"})," docs (+ other unversioned pages)"]}),"\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/fr/docs/v2/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"French"})," results for the ",(0,s.jsx)(r.strong,{children:"v2"})," docs (+ other unversioned pages)"]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["When using ",(0,s.jsx)(r.code,{children:"contextualSearch: true"})," (default), the contextual facet filters will be merged with the ones provided with ",(0,s.jsx)(r.code,{children:"algolia.searchParameters.facetFilters"})," ."]}),(0,s.jsxs)(r.p,{children:["For specific needs, you can disable ",(0,s.jsx)(r.code,{children:"contextualSearch"})," and define your own ",(0,s.jsx)(r.code,{children:"facetFilters"}),":"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: false,\n searchParameters: {\n facetFilters: ['language:en', ['filter1', 'filter2'], 'filter3'],\n },\n },\n // highlight-end\n },\n};\n"})}),(0,s.jsxs)(r.p,{children:["Refer to the relevant ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting documentation"}),"."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Contextual search doesn't work?",type:"warning",children:(0,s.jsxs)(r.p,{children:["If you only get search results when Contextual Search is disabled, this is very likely because of an ",(0,s.jsx)(r.a,{href:"#algolia-no-search-results",children:"index configuration issue"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"styling-your-algolia-search",children:"Styling your Algolia search"}),"\n",(0,s.jsx)(r.p,{children:"By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards."}),"\n",(0,s.jsxs)(r.p,{children:["Still, you can reuse the ",(0,s.jsx)(r.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima CSS variables"})," from Docusaurus to style DocSearch by editing the ",(0,s.jsx)(r.code,{children:"/src/css/custom.css"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"[data-theme='light'] .DocSearch {\n /* --docsearch-primary-color: var(--ifm-color-primary); */\n /* --docsearch-text-color: var(--ifm-font-color-base); */\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(94, 100, 112, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-color-secondary-lighter);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-color-secondary);\n --docsearch-searchbox-focus-background: var(--ifm-color-white);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-white);\n /* Footer */\n --docsearch-footer-background: var(--ifm-color-white);\n}\n\n[data-theme='dark'] .DocSearch {\n --docsearch-text-color: var(--ifm-font-color-base);\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(47, 55, 69, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-background-color);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-background-color);\n --docsearch-searchbox-focus-background: var(--ifm-color-black);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-emphasis-100);\n /* Footer */\n --docsearch-footer-background: var(--ifm-background-surface-color);\n --docsearch-key-gradient: linear-gradient(\n -26.5deg,\n var(--ifm-color-emphasis-200) 0%,\n var(--ifm-color-emphasis-100) 100%\n );\n}\n"})}),"\n",(0,s.jsx)(r.h3,{id:"customizing-the-algolia-search-behavior",children:"Customizing the Algolia search behavior"}),"\n",(0,s.jsxs)(r.p,{children:["Algolia DocSearch supports a ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/api/",children:"list of options"})," that you can pass to the ",(0,s.jsx)(r.code,{children:"algolia"})," field in the ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // ...\n algolia: {\n apiKey: 'YOUR_API_KEY',\n indexName: 'YOUR_INDEX_NAME',\n // Options...\n },\n },\n};\n"})}),"\n",(0,s.jsx)(r.h3,{id:"editing-the-algolia-search-component",children:"Editing the Algolia search component"}),"\n",(0,s.jsxs)(r.p,{children:["If you prefer to edit the Algolia search React component, ",(0,s.jsx)(r.a,{href:"/docs/swizzling",children:"swizzle"})," the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-search-algolia"}),":"]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})})]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(r.p,{children:"Here are the most common issues Docusaurus users face when using Algolia DocSearch."}),"\n",(0,s.jsx)(r.h4,{id:"algolia-no-search-results",children:"No Search Results"}),"\n",(0,s.jsxs)(r.p,{children:["Seeing no search results is usually related to an ",(0,s.jsx)(r.strong,{children:"index configuration problem"}),"."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsx)("summary",{children:"How to check if I have an config problem?"}),(0,s.jsxs)(r.p,{children:["Docusaurus uses ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting"})," for its ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," feature, to create dynamic queries such as:"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-json",children:'[\n "language:en",\n [\n "docusaurus_tag:default",\n "docusaurus_tag:docs-default-3.2.1",\n "docusaurus_tag:docs-community-current",\n "docusaurus_tag:docs-docs-tests-current"\n ]\n]\n'})}),(0,s.jsxs)(r.p,{children:["On the Algolia UI, your index should allow to create facet queries on fields ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"}),", as shown in the screenshot below:"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"Algolia index showing appropriate faceting fields",src:n(12293).Z+"",width:"1072",height:"1761"})}),(0,s.jsxs)(r.p,{children:["Alternatively, if you disable ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," with ",(0,s.jsx)(r.code,{children:"{contextualSearch: false}"})," (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended configuration",type:"danger",children:(0,s.jsxs)(r.p,{children:["We ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend a specific crawler configuration"})," for a good reason. We cannot support you if you choose to use a different configuration."]})}),"\n",(0,s.jsx)(r.p,{children:"You can fix index configuration problems by following those steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["Use the ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend crawler configuration"})]}),"\n",(0,s.jsx)(r.li,{children:"Delete your index through the UI"}),"\n",(0,s.jsx)(r.li,{children:"Trigger a new crawl through the UI"}),"\n",(0,s.jsxs)(r.li,{children:["Check your index is recreated with the appropriate faceting fields: ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"})]}),"\n",(0,s.jsxs)(r.li,{children:["See that you now get search results, even with ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," enabled"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-support",children:"Support"}),"\n",(0,s.jsx)(r.p,{children:"The Algolia DocSearch team can help you figure out search problems on your site."}),"\n",(0,s.jsxs)(r.p,{children:["You can reach out to Algolia via ",(0,s.jsx)(r.a,{href:"https://algolia.com/support",children:"their support page"})," or on ",(0,s.jsx)(r.a,{href:"https://discord.gg/wr2m5j948P",children:"Discord"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus also has an ",(0,s.jsx)(r.code,{children:"#algolia"})," channel on ",(0,s.jsx)(r.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-typesense-docsearch",children:"\ud83d\udc65 Using Typesense DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org",children:"Typesense"})," DocSearch works similar to Algolia DocSearch, except that your website is indexed into a Typesense search cluster."]}),"\n",(0,s.jsxs)(r.p,{children:["Typesense is an ",(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense",children:"open source"})," instant-search engine that you can either:"]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/install-typesense.html#option-2-local-machine-self-hosting",children:"Self-Host"})," on your own servers or"]}),"\n",(0,s.jsxs)(r.li,{children:["Use the Managed ",(0,s.jsx)(r.a,{href:"https://cloud.typesense.org",children:"Typesense Cloud"})," service."]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Similar to Algolia DocSearch, there are two components:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense-docsearch-scraper",children:"typesense-docsearch-scraper"})," - which scrapes your website and indexes the data in your Typesense cluster."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - a search bar UI component to add to your website."]}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["Read a step-by-step walk-through of how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/docsearch.html#step-1-set-up-docsearch-scraper",children:"run typesense-docsearch-scraper here"})," and how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/guide/docsearch.html#option-a-docusaurus-powered-sites",children:"install the Search Bar in your Docusaurus Site here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-local-search",children:"\ud83d\udc65 Using Local Search"}),"\n",(0,s.jsx)(r.p,{children:"You can use a local search plugin for websites where the search index is small and can be downloaded to your users' browsers when they visit your website."}),"\n",(0,s.jsxs)(r.p,{children:["You'll find a list of community-supported ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/community/resources#search",children:"local search plugins listed here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-your-own-search",children:"\ud83d\udc65 Using your own search"}),"\n",(0,s.jsxs)(r.p,{children:["To use your own search, swizzle the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-classic"})]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic SearchBar\n"})})})]}),"\n",(0,s.jsxs)(r.p,{children:["This will create an ",(0,s.jsx)(r.code,{children:"src/theme/SearchBar"})," file in your project folder. Restart your dev server and edit the component, you will see that Docusaurus uses your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component now."]}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Notes"}),": You can alternatively ",(0,s.jsx)(r.a,{href:"#editing-the-algolia-search-component",children:"swizzle from Algolia SearchBar"})," and create your own search component from there."]})]})}function p(e={}){const{wrapper:r}={...(0,a.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>c,a:()=>t});var s=n(27378);const a={},o=s.createContext(a);function t(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f0f0e17.0e0db339.js b/assets/js/1f0f0e17.b01541a6.js similarity index 56% rename from assets/js/1f0f0e17.0e0db339.js rename to assets/js/1f0f0e17.b01541a6.js index 2cfedf4616f6..66fb7a1c719d 100644 --- a/assets/js/1f0f0e17.0e0db339.js +++ b/assets/js/1f0f0e17.b01541a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38809],{96899:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},59506:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},9155:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-05-31T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx",source:"@site/blog/releases/3.4/index.mdx",title:"Docusaurus 3.4",description:"We are happy to announce Docusaurus 3.4.",date:"2024-05-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.045,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-05-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",nextItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"}},c={image:t(96899).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.4"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["Upgrading should be easy. Our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process"})," respects ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),". Minor versions do not include any breaking changes."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(59506).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38809],{96899:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},59506:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-66116702bb73f0bf68a095ddaecc0fe4.png"},9155:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-05-31T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx",source:"@site/blog/releases/3.4/index.mdx",title:"Docusaurus 3.4",description:"We are happy to announce Docusaurus 3.4.",date:"2024-05-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.045,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-05-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",nextItem:{title:"Docusaurus 3.3",permalink:"/blog/releases/3.3"}},c={image:t(96899).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.4"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["Upgrading should be easy. Our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process"})," respects ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),". Minor versions do not include any breaking changes."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(59506).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20139c40.82ff7d15.js b/assets/js/20139c40.2ff10ca4.js similarity index 92% rename from assets/js/20139c40.82ff7d15.js rename to assets/js/20139c40.2ff10ca4.js index 25c306182819..87081c9ccb7f 100644 --- a/assets/js/20139c40.82ff7d15.js +++ b/assets/js/20139c40.2ff10ca4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36928],{65856:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var t=n(24246),o=n(71670);function i(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"contributing-to-docusaurus",children:"Contributing to Docusaurus"})}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://docusaurus.io",children:"Docusaurus"})," is our way to hopefully help make open source documentation easier. We currently have ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/showcase",children:"multiple open source projects using it"}),", with many more planned. If you're interested in contributing to Docusaurus, hopefully, this document makes the process for contributing clear."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.a,{href:"https://opensource.guide/",children:"Open Source Guides"})," website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/how-to-contribute/",children:"How to Contribute to Open Source"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/building-community/",children:"Building Welcoming Communities"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"code-of-conduct",children:"Code of Conduct"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read ",(0,t.jsx)(s.a,{href:"https://code.fb.com/codeofconduct",children:"the full text"})," so that you can understand what actions will and will not be tolerated."]}),"\n",(0,t.jsx)(s.h2,{id:"get-involved",children:"Get Involved"}),"\n",(0,t.jsx)(s.p,{children:"There are many ways to contribute to Docusaurus, and many of them do not involve writing any code. Here's a few ideas to get started:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Simply start using Docusaurus. Go through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Getting Started"})," guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by ",(0,t.jsx)(s.a,{href:"#issues",children:"opening an issue"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Look through the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"open issues"}),". Provide workarounds, ask for clarification, or suggest labels. Help ",(0,t.jsx)(s.a,{href:"#triaging-issues-and-pull-requests",children:"triage issues"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["If you find an issue you would like to fix, ",(0,t.jsx)(s.a,{href:"#pull-requests",children:"open a pull request"}),". Issues tagged as ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/Good%20first%20issue",children:(0,t.jsx)(s.em,{children:"Good first issue"})})," are a good place to get started."]}),"\n",(0,t.jsxs)(s.li,{children:["Read through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Docusaurus docs"}),'. If you find anything that is confusing or can be improved, you can click "Edit this page" at the bottom of most docs, which takes you to the GitHub interface to make and propose changes.']}),"\n",(0,t.jsxs)(s.li,{children:["Take a look at the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/feature",children:"features requested"})," by others in the community and consider opening a pull request if you see something you want to work on."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Contributions are very welcome. If you think you need help planning your contribution, please ping us on Twitter at ",(0,t.jsx)(s.a,{href:"https://twitter.com/docusaurus",children:"@docusaurus"})," and let us know you are looking for a bit of help."]}),"\n",(0,t.jsx)(s.h3,{id:"join-our-discord-channel",children:"Join our Discord Channel"}),"\n",(0,t.jsxs)(s.p,{children:["We have the ",(0,t.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:(0,t.jsx)(s.code,{children:"#contributors"})})," channel on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," to discuss all things about Docusaurus development. You can also be of great help by helping other users in the ",(0,t.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:(0,t.jsx)(s.code,{children:"#help-and-questions"})})," channel."]}),"\n",(0,t.jsx)(s.h3,{id:"triaging-issues-and-pull-requests",children:"Triaging Issues and Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"One great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Ask for more information if you believe the issue does not provide all the details required to solve it."}),"\n",(0,t.jsxs)(s.li,{children:["Suggest ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels",children:"labels"})," that can help categorize issues."]}),"\n",(0,t.jsx)(s.li,{children:"Flag issues that are stale or that should be closed."}),"\n",(0,t.jsx)(s.li,{children:"Ask for test plans and review code."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"our-development-process",children:"Our Development Process"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus uses ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," as its source of truth. The core team will be working directly there. All changes will be public from the beginning."]}),"\n",(0,t.jsx)(s.p,{children:"All pull requests will be checked by the continuous integration system, GitHub actions. There are unit tests, end-to-end tests, performance tests, style tests, and much more."}),"\n",(0,t.jsx)(s.h3,{id:"branch-organization",children:"Branch Organization"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus has one primary branch ",(0,t.jsx)(s.code,{children:"main"})," and we use feature branches with deploy previews to deliver new features with pull requests."]}),"\n",(0,t.jsx)(s.h2,{id:"issues",children:"Issues"}),"\n",(0,t.jsxs)(s.p,{children:["When ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new/choose",children:"opening a new issue"}),", always make sure to fill out the issue template. ",(0,t.jsx)(s.strong,{children:"This step is very important!"})," Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template."]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Please don't use the GitHub issue tracker for questions."})," If you have questions about using Docusaurus, use any of our ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/community/support",children:"support channels"}),", and we will do our best to answer your questions."]}),"\n",(0,t.jsx)(s.h3,{id:"bugs",children:"Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["We use ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"GitHub Issues"})," for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new, unreported bug, you can submit a ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=bug%2Cstatus%3A+needs+triage&template=bug.yml",children:"bug report"}),"."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"One issue, one bug:"})," Please report a single bug per issue."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Provide reproduction steps:"})," List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend filing an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue."}),"\n",(0,t.jsx)(s.h3,{id:"security-bugs",children:"Security Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has a ",(0,t.jsx)(s.a,{href:"https://www.facebook.com/whitehat/",children:"bounty program"})," for the safe disclosure of security bugs. With that in mind, please do not file public issues; go through the process outlined on that page."]}),"\n",(0,t.jsx)(s.h3,{id:"feature-requests",children:"Feature requests"}),"\n",(0,t.jsxs)(s.p,{children:["If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can file an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=feature%2Cstatus%3A+needs+triage&template=feature.yml",children:"feature template"})," in the form of an ",(0,t.jsx)(s.strong,{children:"elaborated RFC"}),". Alternatively, you can use the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/feature-requests",children:"Canny board"})," for more casual feature requests and gain enough traction before proposing an RFC."]}),"\n",(0,t.jsx)(s.h3,{id:"proposals",children:"Proposals"}),"\n",(0,t.jsxs)(s.p,{children:["If you intend to make any non-trivial changes to existing implementations, we recommend filing an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=proposal%2Cstatus%3A+needs+triage&template=proposal.yml",children:"proposal template"}),". This lets us reach an agreement on your proposal before you put significant effort into it. These types of issues should be rare."]}),"\n",(0,t.jsx)(s.h3,{id:"claiming-issues",children:"Claiming issues"}),"\n",(0,t.jsxs)(s.p,{children:["We have a list of ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/good%20first%20issue",children:"beginner-friendly issues"})," to help you get your feet wet in the Docusaurus codebase and familiar with our contribution process. This is a great place to get started."]}),"\n",(0,t.jsxs)(s.p,{children:["Apart from the ",(0,t.jsx)(s.code,{children:"good first issue"}),", the following labels are also worth looking at:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/help%20wanted",children:(0,t.jsx)(s.code,{children:"help wanted"})}),": if you have specific knowledge in one domain, working on these issues can make your expertise shine."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/status%3A%20accepting%20pr",children:(0,t.jsx)(s.code,{children:"status: accepting pr"})}),": community contributors can feel free to claim any of these."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:['If you want to work on any of these issues, just drop a message saying "I\'d like to work on this", and we will assign the issue to you and update the issue\'s status as "claimed". ',(0,t.jsx)(s.strong,{children:"You are expected to send a pull request within seven days"})," after that, so we can still delegate the issue to someone else if you are unavailable."]}),"\n",(0,t.jsx)(s.p,{children:'Alternatively, when opening an issue, you can also click the "self service" checkbox to indicate that you\'d like to work on the issue yourself, which will also make us see the issue as "claimed".'}),"\n",(0,t.jsx)(s.h2,{id:"development",children:"Development"}),"\n",(0,t.jsx)(s.h3,{id:"online-one-click-setup-for-contributing",children:"Online one-click setup for contributing"}),"\n",(0,t.jsx)(s.p,{children:"You can use Gitpod (a free, online, VS Code-like IDE) for contributing. With a single click, it will launch a workspace (for Docusaurus 2) and automatically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"clone the docusaurus repo."}),"\n",(0,t.jsx)(s.li,{children:"install the dependencies."}),"\n",(0,t.jsxs)(s.li,{children:["run ",(0,t.jsx)(s.code,{children:"yarn start"})]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So that you can start contributing straight away."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://gitpod.io/#https://github.com/facebook/docusaurus",children:(0,t.jsx)(s.img,{src:"https://gitpod.io/button/open-in-gitpod.svg",alt:"Open in Gitpod"})})}),"\n",(0,t.jsxs)(s.p,{children:["You can also try using the new ",(0,t.jsx)(s.a,{href:"https://github.dev/facebook/docusaurus",children:"github.dev"})," feature. While you are browsing any file, changing the domain name from ",(0,t.jsx)(s.code,{children:"github.com"})," to ",(0,t.jsx)(s.code,{children:"github.dev"})," will turn your browser into an online editor. You can start making changes and send pull requests right away."]}),"\n",(0,t.jsx)(s.h3,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure you have ",(0,t.jsx)(s.a,{href:"https://yarnpkg.com/",children:"Yarn"})," installed."]}),"\n",(0,t.jsxs)(s.li,{children:["After cloning the repository, run ",(0,t.jsx)(s.code,{children:"yarn install"})," in the root of the repository. This will install all dependencies as well as build all local packages."]}),"\n",(0,t.jsxs)(s.li,{children:["To start a development server, run ",(0,t.jsx)(s.code,{children:"yarn workspace website start"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"code-conventions",children:"Code Conventions"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Most important: Look around."})," Match the style you see used in the rest of the project. This includes formatting, naming files, naming things in code, naming things in documentation, etc."]}),"\n",(0,t.jsx)(s.li,{children:'"Attractive"'}),"\n",(0,t.jsx)(s.li,{children:"We do have Prettier (a formatter) and ESLint (a syntax linter) to catch most stylistic problems. If you are working locally, they should automatically fix some issues during every git commit."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"For documentation"}),": Do not wrap lines at 80 characters - configure your editor to soft-wrap when editing documentation."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Don't worry too much about styles in general\u2014the maintainers will help you fix them as they review your code."}),"\n",(0,t.jsx)(s.h2,{id:"pull-requests",children:"Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"So you have decided to contribute code back to upstream by opening a pull request. You've invested a good chunk of time, and we appreciate it. We will do our best to work with you and get the PR looked at."}),"\n",(0,t.jsx)(s.p,{children:"Working on your first Pull Request? You can learn how from this free video series:"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github",children:(0,t.jsx)(s.strong,{children:"How to Contribute to an Open Source Project on GitHub"})})}),"\n",(0,t.jsx)(s.p,{children:"Please make sure the following is done when submitting a pull request:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Keep your PR small."})," Small pull requests (~300 lines of diff) are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Use descriptive titles."})," It is recommended to follow this ",(0,t.jsx)(s.a,{href:"#semantic-commit-messages",children:"commit message style"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Test your changes."})," Describe your ",(0,t.jsx)(s.a,{href:"#test-plan",children:(0,t.jsx)(s.strong,{children:"test plan"})})," in your pull request description."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"CLA."})," If you haven't already, ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"sign the CLA"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["All pull requests should be opened against the ",(0,t.jsx)(s.code,{children:"main"})," branch."]}),"\n",(0,t.jsx)(s.p,{children:"We have a lot of integration systems that run automated tests to guard against mistakes. The maintainers will also review your code and fix obvious issues for you. These systems' duty is to make you worry as little about the chores as possible. Your code contributions are more important than sticking to any procedures, although completing the checklist will surely save everyone's time."}),"\n",(0,t.jsx)(s.h3,{id:"semantic-commit-messages",children:"Semantic Commit Messages"}),"\n",(0,t.jsx)(s.p,{children:"See how a minor change to your commit message style can make you a better programmer."}),"\n",(0,t.jsxs)(s.p,{children:["Format: ",(0,t.jsx)(s.code,{children:"<type>(<scope>): <subject>"})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"<scope>"})," is optional. If your change is specific to one/two packages, consider adding the scope. Scopes should be brief but recognizable, e.g. ",(0,t.jsx)(s.code,{children:"content-docs"}),", ",(0,t.jsx)(s.code,{children:"theme-classic"}),", ",(0,t.jsx)(s.code,{children:"core"})]}),"\n",(0,t.jsx)(s.p,{children:"The various types of commits:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"feat"}),": a new API or behavior ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"fix"}),": a bug fix ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docs"}),": a change to the website or other Markdown documents in our repo."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"refactor"}),": a change to production code that leads to no behavior difference, e.g. splitting files, renaming internal variables, improving code style..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"test"}),": adding missing tests, refactoring tests; no production code change."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"chore"}),": upgrading dependencies, releasing new versions... Chores that are ",(0,t.jsx)(s.strong,{children:"regularly done"})," for maintenance purposes."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"misc"}),": anything else that doesn't change production code, yet is not ",(0,t.jsx)(s.code,{children:"test"})," or ",(0,t.jsx)(s.code,{children:"chore"}),". e.g. updating GitHub actions workflow."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not get too stressed about PR titles, however. Your PR will be squash-merged and your commit to the ",(0,t.jsx)(s.code,{children:"main"})," branch will get the title of your PR, so commits within a branch don't need to be semantically named. The maintainers will help you get the PR title right, and we also have a PR label system that doesn't equate with the commit message types. Your code is more important than conventions!"]}),"\n",(0,t.jsx)(s.p,{children:"Example:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"feat(core): allow overriding of webpack config\n^--^^----^ ^------------^\n| | |\n| | +-> Summary in present tense. Use lower case not title case!\n| |\n| +-> The package(s) that this change affected.\n|\n+-------\x3e Type: see above for the list we use.\n"})}),"\n",(0,t.jsx)(s.h3,{id:"versioned-docs",children:"Versioned Docs"}),"\n",(0,t.jsx)(s.p,{children:"If you only want to make doc changes, you just need to be aware of versioned docs."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/docs"}),' - The files here are responsible for the "next" version at ',(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/next/installation",children:"https://docusaurus.io/docs/next/installation"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/versioned_docs/version-X.Y.Z"})," - These are the docs for the X.Y.Z version at ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/X.Y.Z/installation",children:"https://docusaurus.io/docs/X.Y.Z/installation"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not edit the auto-generated files within ",(0,t.jsx)(s.code,{children:"versioned_docs/"})," or ",(0,t.jsx)(s.code,{children:"versioned_sidebars/"})," unless you are sure it is necessary. For example, information about new features should not be documented in versioned docs. Edits made to older versions will not be propagated to newer versions of the docs."]}),"\n",(0,t.jsx)(s.h3,{id:"test-plan",children:"Test Plan"}),"\n",(0,t.jsx)(s.p,{children:"A good test plan has the exact commands you ran and their output and provides screenshots or videos if the pull request changes UI. If you've changed APIs, update the documentation."}),"\n",(0,t.jsx)(s.p,{children:"Tests are integrated into our continuous integration system, so you don't always need to run local tests. However, for significant code changes, it saves both your and the maintainers' time if you can do exhaustive tests locally first to make sure your PR is in good shape. There are many types of tests:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Build and typecheck."})," We use TypeScript in our codebase, which can make sure your code is consistent and catches some obvious mistakes early."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Unit tests."})," We use ",(0,t.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"})," for unit tests of API endpoints' behavior. You can run ",(0,t.jsx)(s.code,{children:"yarn test"})," in the root directory to run all tests, or ",(0,t.jsx)(s.code,{children:"yarn test path/to/your/file.test.ts"})," to run a specific test."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dogfooding."})," Our website itself covers all kinds of potential configuration cases and we even have a dedicated ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/tests",children:"tests area"}),". Don't be afraid to update our website's configuration in your PR\u2014it can help the maintainers preview the effects. We can decide if the website change should be kept when merging and deploying for production."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"E2E tests."})," You can simulate the distribution and installation of the code with your fresh changes. If you need help testing your changes locally, you can check out the doc on doing ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/blob/main/admin/local-third-party-project-testing.md",children:"local third-party testing"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"licensing",children:"Licensing"}),"\n",(0,t.jsx)(s.p,{children:"By contributing to Docusaurus, you agree that your contributions will be licensed under its MIT license. Copy and paste this to the top of your new file(s):"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-js",children:"/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n"})}),"\n",(0,t.jsxs)(s.p,{children:["This is also auto-fixable with the ",(0,t.jsx)(s.code,{children:"header/header"})," ESLint rule."]}),"\n",(0,t.jsx)(s.h3,{id:"contributor-license-agreement-cla",children:"Contributor License Agreement (CLA)"}),"\n",(0,t.jsxs)(s.p,{children:["In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another Facebook open source project, you're good to go. If you are submitting a pull request for the first time, the Facebook GitHub Bot will reply with a link to the CLA form. You may also ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"complete your CLA here"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"After you have signed the CLA, the CLA bot would automatically update the PR status. There's no need to open a new PR."}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"CLAs are required for us to merge your pull request."})," While we value your effort and are willing to wait for you to come back and address the reviews in case you are unavailable after sending the pull request, pull requests that are ready to merge but have CLA missing and no response from the author ",(0,t.jsx)(s.strong,{children:"will be closed within two weeks of opening"}),". If you have further questions about the CLA, please stay in touch with us."]}),"\n",(0,t.jsx)(s.p,{children:"If it happens that you were unavailable and your PR gets closed, feel free to reopen once it's ready! We are still happy to review it, help you complete it, and eventually merge it."}),"\n",(0,t.jsx)(s.h3,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,t.jsx)(s.p,{children:"When adding a new breaking change, follow this template in your pull request:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-md",children:"### New breaking change here\n\n- **Who does this affect**:\n- **How to migrate**:\n- **Why make this breaking change**:\n- **Severity (number of people affected x effort)**:\n"})}),"\n",(0,t.jsx)(s.h3,{id:"what-happens-next",children:"What Happens Next?"}),"\n",(0,t.jsx)(s.p,{children:"The core Docusaurus team will be monitoring pull requests. Do help us by keeping pull requests consistent by following the guidelines above."})]})}function r(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}const a={title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},l=void 0,c={id:"contributing",title:"Contributing",description:"",source:"@site/community/3-contributing.mdx",sourceDirName:".",slug:"/contributing",permalink:"/community/contributing",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:3,frontMatter:{title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},sidebar:"community",previous:{title:"Awesome Resources",permalink:"/community/resources"},next:{title:"Canary releases",permalink:"/community/canary"}},u={},d=[{value:"Code of Conduct",id:"code-of-conduct",level:2},{value:"Get Involved",id:"get-involved",level:2},{value:"Join our Discord Channel",id:"join-our-discord-channel",level:3},{value:"Triaging Issues and Pull Requests",id:"triaging-issues-and-pull-requests",level:3},{value:"Our Development Process",id:"our-development-process",level:2},{value:"Branch Organization",id:"branch-organization",level:3},{value:"Issues",id:"issues",level:2},{value:"Bugs",id:"bugs",level:3},{value:"Security Bugs",id:"security-bugs",level:3},{value:"Feature requests",id:"feature-requests",level:3},{value:"Proposals",id:"proposals",level:3},{value:"Claiming issues",id:"claiming-issues",level:3},{value:"Development",id:"development",level:2},{value:"Online one-click setup for contributing",id:"online-one-click-setup-for-contributing",level:3},{value:"Installation",id:"installation",level:3},{value:"Code Conventions",id:"code-conventions",level:3},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Semantic Commit Messages",id:"semantic-commit-messages",level:3},{value:"Versioned Docs",id:"versioned-docs",level:3},{value:"Test Plan",id:"test-plan",level:3},{value:"Licensing",id:"licensing",level:3},{value:"Contributor License Agreement (CLA)",id:"contributor-license-agreement-cla",level:3},{value:"Breaking Changes",id:"breaking-changes",level:3},{value:"What Happens Next?",id:"what-happens-next",level:3}];function h(e){return(0,t.jsx)(r,{})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h()}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const o={},i=t.createContext(o);function r(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36928],{65856:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var t=n(24246),o=n(71670);function i(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"contributing-to-docusaurus",children:"Contributing to Docusaurus"})}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://docusaurus.io",children:"Docusaurus"})," is our way to hopefully help make open source documentation easier. We currently have ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/showcase",children:"multiple open source projects using it"}),", with many more planned. If you're interested in contributing to Docusaurus, hopefully, this document makes the process for contributing clear."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.a,{href:"https://opensource.guide/",children:"Open Source Guides"})," website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/how-to-contribute/",children:"How to Contribute to Open Source"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/building-community/",children:"Building Welcoming Communities"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"code-of-conduct",children:"Code of Conduct"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read ",(0,t.jsx)(s.a,{href:"https://code.fb.com/codeofconduct",children:"the full text"})," so that you can understand what actions will and will not be tolerated."]}),"\n",(0,t.jsx)(s.h2,{id:"get-involved",children:"Get Involved"}),"\n",(0,t.jsx)(s.p,{children:"There are many ways to contribute to Docusaurus, and many of them do not involve writing any code. Here's a few ideas to get started:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Simply start using Docusaurus. Go through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Getting Started"})," guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by ",(0,t.jsx)(s.a,{href:"#issues",children:"opening an issue"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Look through the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"open issues"}),". Provide workarounds, ask for clarification, or suggest labels. Help ",(0,t.jsx)(s.a,{href:"#triaging-issues-and-pull-requests",children:"triage issues"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["If you find an issue you would like to fix, ",(0,t.jsx)(s.a,{href:"#pull-requests",children:"open a pull request"}),". Issues tagged as ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/Good%20first%20issue",children:(0,t.jsx)(s.em,{children:"Good first issue"})})," are a good place to get started."]}),"\n",(0,t.jsxs)(s.li,{children:["Read through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Docusaurus docs"}),'. If you find anything that is confusing or can be improved, you can click "Edit this page" at the bottom of most docs, which takes you to the GitHub interface to make and propose changes.']}),"\n",(0,t.jsxs)(s.li,{children:["Take a look at the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/feature",children:"features requested"})," by others in the community and consider opening a pull request if you see something you want to work on."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Contributions are very welcome. If you think you need help planning your contribution, please ping us on Twitter at ",(0,t.jsx)(s.a,{href:"https://twitter.com/docusaurus",children:"@docusaurus"})," and let us know you are looking for a bit of help."]}),"\n",(0,t.jsx)(s.h3,{id:"join-our-discord-channel",children:"Join our Discord Channel"}),"\n",(0,t.jsxs)(s.p,{children:["We have the ",(0,t.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:(0,t.jsx)(s.code,{children:"#contributors"})})," channel on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," to discuss all things about Docusaurus development. You can also be of great help by helping other users in the ",(0,t.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:(0,t.jsx)(s.code,{children:"#help-and-questions"})})," channel."]}),"\n",(0,t.jsx)(s.h3,{id:"triaging-issues-and-pull-requests",children:"Triaging Issues and Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"One great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Ask for more information if you believe the issue does not provide all the details required to solve it."}),"\n",(0,t.jsxs)(s.li,{children:["Suggest ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels",children:"labels"})," that can help categorize issues."]}),"\n",(0,t.jsx)(s.li,{children:"Flag issues that are stale or that should be closed."}),"\n",(0,t.jsx)(s.li,{children:"Ask for test plans and review code."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"our-development-process",children:"Our Development Process"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus uses ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," as its source of truth. The core team will be working directly there. All changes will be public from the beginning."]}),"\n",(0,t.jsx)(s.p,{children:"All pull requests will be checked by the continuous integration system, GitHub actions. There are unit tests, end-to-end tests, performance tests, style tests, and much more."}),"\n",(0,t.jsx)(s.h3,{id:"branch-organization",children:"Branch Organization"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus has one primary branch ",(0,t.jsx)(s.code,{children:"main"})," and we use feature branches with deploy previews to deliver new features with pull requests."]}),"\n",(0,t.jsx)(s.h2,{id:"issues",children:"Issues"}),"\n",(0,t.jsxs)(s.p,{children:["When ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new/choose",children:"opening a new issue"}),", always make sure to fill out the issue template. ",(0,t.jsx)(s.strong,{children:"This step is very important!"})," Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template."]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Please don't use the GitHub issue tracker for questions."})," If you have questions about using Docusaurus, use any of our ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/community/support",children:"support channels"}),", and we will do our best to answer your questions."]}),"\n",(0,t.jsx)(s.h3,{id:"bugs",children:"Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["We use ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"GitHub Issues"})," for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new, unreported bug, you can submit a ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=bug%2Cstatus%3A+needs+triage&template=bug.yml",children:"bug report"}),"."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"One issue, one bug:"})," Please report a single bug per issue."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Provide reproduction steps:"})," List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend filing an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue."}),"\n",(0,t.jsx)(s.h3,{id:"security-bugs",children:"Security Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has a ",(0,t.jsx)(s.a,{href:"https://www.facebook.com/whitehat/",children:"bounty program"})," for the safe disclosure of security bugs. With that in mind, please do not file public issues; go through the process outlined on that page."]}),"\n",(0,t.jsx)(s.h3,{id:"feature-requests",children:"Feature requests"}),"\n",(0,t.jsxs)(s.p,{children:["If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can file an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=feature%2Cstatus%3A+needs+triage&template=feature.yml",children:"feature template"})," in the form of an ",(0,t.jsx)(s.strong,{children:"elaborated RFC"}),". Alternatively, you can use the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/feature-requests",children:"Canny board"})," for more casual feature requests and gain enough traction before proposing an RFC."]}),"\n",(0,t.jsx)(s.h3,{id:"proposals",children:"Proposals"}),"\n",(0,t.jsxs)(s.p,{children:["If you intend to make any non-trivial changes to existing implementations, we recommend filing an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=proposal%2Cstatus%3A+needs+triage&template=proposal.yml",children:"proposal template"}),". This lets us reach an agreement on your proposal before you put significant effort into it. These types of issues should be rare."]}),"\n",(0,t.jsx)(s.h3,{id:"claiming-issues",children:"Claiming issues"}),"\n",(0,t.jsxs)(s.p,{children:["We have a list of ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/good%20first%20issue",children:"beginner-friendly issues"})," to help you get your feet wet in the Docusaurus codebase and familiar with our contribution process. This is a great place to get started."]}),"\n",(0,t.jsxs)(s.p,{children:["Apart from the ",(0,t.jsx)(s.code,{children:"good first issue"}),", the following labels are also worth looking at:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/help%20wanted",children:(0,t.jsx)(s.code,{children:"help wanted"})}),": if you have specific knowledge in one domain, working on these issues can make your expertise shine."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/status%3A%20accepting%20pr",children:(0,t.jsx)(s.code,{children:"status: accepting pr"})}),": community contributors can feel free to claim any of these."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:['If you want to work on any of these issues, just drop a message saying "I\'d like to work on this", and we will assign the issue to you and update the issue\'s status as "claimed". ',(0,t.jsx)(s.strong,{children:"You are expected to send a pull request within seven days"})," after that, so we can still delegate the issue to someone else if you are unavailable."]}),"\n",(0,t.jsx)(s.p,{children:'Alternatively, when opening an issue, you can also click the "self service" checkbox to indicate that you\'d like to work on the issue yourself, which will also make us see the issue as "claimed".'}),"\n",(0,t.jsx)(s.h2,{id:"development",children:"Development"}),"\n",(0,t.jsx)(s.h3,{id:"online-one-click-setup-for-contributing",children:"Online one-click setup for contributing"}),"\n",(0,t.jsx)(s.p,{children:"You can use Gitpod (a free, online, VS Code-like IDE) for contributing. With a single click, it will launch a workspace (for Docusaurus 2) and automatically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"clone the docusaurus repo."}),"\n",(0,t.jsx)(s.li,{children:"install the dependencies."}),"\n",(0,t.jsxs)(s.li,{children:["run ",(0,t.jsx)(s.code,{children:"yarn start"})]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So that you can start contributing straight away."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://gitpod.io/#https://github.com/facebook/docusaurus",children:(0,t.jsx)(s.img,{src:"https://gitpod.io/button/open-in-gitpod.svg",alt:"Open in Gitpod"})})}),"\n",(0,t.jsxs)(s.p,{children:["You can also try using the new ",(0,t.jsx)(s.a,{href:"https://github.dev/facebook/docusaurus",children:"github.dev"})," feature. While you are browsing any file, changing the domain name from ",(0,t.jsx)(s.code,{children:"github.com"})," to ",(0,t.jsx)(s.code,{children:"github.dev"})," will turn your browser into an online editor. You can start making changes and send pull requests right away."]}),"\n",(0,t.jsx)(s.h3,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure you have ",(0,t.jsx)(s.a,{href:"https://yarnpkg.com/",children:"Yarn"})," installed."]}),"\n",(0,t.jsxs)(s.li,{children:["After cloning the repository, run ",(0,t.jsx)(s.code,{children:"yarn install"})," in the root of the repository. This will install all dependencies as well as build all local packages."]}),"\n",(0,t.jsxs)(s.li,{children:["To start a development server, run ",(0,t.jsx)(s.code,{children:"yarn workspace website start"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"code-conventions",children:"Code Conventions"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Most important: Look around."})," Match the style you see used in the rest of the project. This includes formatting, naming files, naming things in code, naming things in documentation, etc."]}),"\n",(0,t.jsx)(s.li,{children:'"Attractive"'}),"\n",(0,t.jsx)(s.li,{children:"We do have Prettier (a formatter) and ESLint (a syntax linter) to catch most stylistic problems. If you are working locally, they should automatically fix some issues during every git commit."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"For documentation"}),": Do not wrap lines at 80 characters - configure your editor to soft-wrap when editing documentation."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Don't worry too much about styles in general\u2014the maintainers will help you fix them as they review your code."}),"\n",(0,t.jsx)(s.h2,{id:"pull-requests",children:"Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"So you have decided to contribute code back to upstream by opening a pull request. You've invested a good chunk of time, and we appreciate it. We will do our best to work with you and get the PR looked at."}),"\n",(0,t.jsx)(s.p,{children:"Working on your first Pull Request? You can learn how from this free video series:"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github",children:(0,t.jsx)(s.strong,{children:"How to Contribute to an Open Source Project on GitHub"})})}),"\n",(0,t.jsx)(s.p,{children:"Please make sure the following is done when submitting a pull request:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Keep your PR small."})," Small pull requests (~300 lines of diff) are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Use descriptive titles."})," It is recommended to follow this ",(0,t.jsx)(s.a,{href:"#semantic-commit-messages",children:"commit message style"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Test your changes."})," Describe your ",(0,t.jsx)(s.a,{href:"#test-plan",children:(0,t.jsx)(s.strong,{children:"test plan"})})," in your pull request description."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"CLA."})," If you haven't already, ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"sign the CLA"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["All pull requests should be opened against the ",(0,t.jsx)(s.code,{children:"main"})," branch."]}),"\n",(0,t.jsx)(s.p,{children:"We have a lot of integration systems that run automated tests to guard against mistakes. The maintainers will also review your code and fix obvious issues for you. These systems' duty is to make you worry as little about the chores as possible. Your code contributions are more important than sticking to any procedures, although completing the checklist will surely save everyone's time."}),"\n",(0,t.jsx)(s.h3,{id:"semantic-commit-messages",children:"Semantic Commit Messages"}),"\n",(0,t.jsx)(s.p,{children:"See how a minor change to your commit message style can make you a better programmer."}),"\n",(0,t.jsxs)(s.p,{children:["Format: ",(0,t.jsx)(s.code,{children:"<type>(<scope>): <subject>"})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"<scope>"})," is optional. If your change is specific to one/two packages, consider adding the scope. Scopes should be brief but recognizable, e.g. ",(0,t.jsx)(s.code,{children:"content-docs"}),", ",(0,t.jsx)(s.code,{children:"theme-classic"}),", ",(0,t.jsx)(s.code,{children:"core"})]}),"\n",(0,t.jsx)(s.p,{children:"The various types of commits:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"feat"}),": a new API or behavior ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"fix"}),": a bug fix ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docs"}),": a change to the website or other Markdown documents in our repo."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"refactor"}),": a change to production code that leads to no behavior difference, e.g. splitting files, renaming internal variables, improving code style..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"test"}),": adding missing tests, refactoring tests; no production code change."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"chore"}),": upgrading dependencies, releasing new versions... Chores that are ",(0,t.jsx)(s.strong,{children:"regularly done"})," for maintenance purposes."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"misc"}),": anything else that doesn't change production code, yet is not ",(0,t.jsx)(s.code,{children:"test"})," or ",(0,t.jsx)(s.code,{children:"chore"}),". e.g. updating GitHub actions workflow."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not get too stressed about PR titles, however. Your PR will be squash-merged and your commit to the ",(0,t.jsx)(s.code,{children:"main"})," branch will get the title of your PR, so commits within a branch don't need to be semantically named. The maintainers will help you get the PR title right, and we also have a PR label system that doesn't equate with the commit message types. Your code is more important than conventions!"]}),"\n",(0,t.jsx)(s.p,{children:"Example:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"feat(core): allow overriding of webpack config\n^--^^----^ ^------------^\n| | |\n| | +-> Summary in present tense. Use lower case not title case!\n| |\n| +-> The package(s) that this change affected.\n|\n+-------\x3e Type: see above for the list we use.\n"})}),"\n",(0,t.jsx)(s.h3,{id:"versioned-docs",children:"Versioned Docs"}),"\n",(0,t.jsx)(s.p,{children:"If you only want to make doc changes, you just need to be aware of versioned docs."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/docs"}),' - The files here are responsible for the "next" version at ',(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/next/installation",children:"https://docusaurus.io/docs/next/installation"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/versioned_docs/version-X.Y.Z"})," - These are the docs for the X.Y.Z version at ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/X.Y.Z/installation",children:"https://docusaurus.io/docs/X.Y.Z/installation"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not edit the auto-generated files within ",(0,t.jsx)(s.code,{children:"versioned_docs/"})," or ",(0,t.jsx)(s.code,{children:"versioned_sidebars/"})," unless you are sure it is necessary. For example, information about new features should not be documented in versioned docs. Edits made to older versions will not be propagated to newer versions of the docs."]}),"\n",(0,t.jsx)(s.h3,{id:"test-plan",children:"Test Plan"}),"\n",(0,t.jsx)(s.p,{children:"A good test plan has the exact commands you ran and their output and provides screenshots or videos if the pull request changes UI. If you've changed APIs, update the documentation."}),"\n",(0,t.jsx)(s.p,{children:"Tests are integrated into our continuous integration system, so you don't always need to run local tests. However, for significant code changes, it saves both your and the maintainers' time if you can do exhaustive tests locally first to make sure your PR is in good shape. There are many types of tests:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Build and typecheck."})," We use TypeScript in our codebase, which can make sure your code is consistent and catches some obvious mistakes early."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Unit tests."})," We use ",(0,t.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"})," for unit tests of API endpoints' behavior. You can run ",(0,t.jsx)(s.code,{children:"yarn test"})," in the root directory to run all tests, or ",(0,t.jsx)(s.code,{children:"yarn test path/to/your/file.test.ts"})," to run a specific test."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dogfooding."})," Our website itself covers all kinds of potential configuration cases and we even have a dedicated ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/tests",children:"tests area"}),". Don't be afraid to update our website's configuration in your PR\u2014it can help the maintainers preview the effects. We can decide if the website change should be kept when merging and deploying for production."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"E2E tests."})," You can simulate the distribution and installation of the code with your fresh changes. If you need help testing your changes locally, you can check out the doc on doing ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/blob/main/admin/local-third-party-project-testing.md",children:"local third-party testing"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"licensing",children:"Licensing"}),"\n",(0,t.jsx)(s.p,{children:"By contributing to Docusaurus, you agree that your contributions will be licensed under its MIT license. Copy and paste this to the top of your new file(s):"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-js",children:"/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n"})}),"\n",(0,t.jsxs)(s.p,{children:["This is also auto-fixable with the ",(0,t.jsx)(s.code,{children:"header/header"})," ESLint rule."]}),"\n",(0,t.jsx)(s.h3,{id:"contributor-license-agreement-cla",children:"Contributor License Agreement (CLA)"}),"\n",(0,t.jsxs)(s.p,{children:["In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another Facebook open source project, you're good to go. If you are submitting a pull request for the first time, the Facebook GitHub Bot will reply with a link to the CLA form. You may also ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"complete your CLA here"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"After you have signed the CLA, the CLA bot would automatically update the PR status. There's no need to open a new PR."}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"CLAs are required for us to merge your pull request."})," While we value your effort and are willing to wait for you to come back and address the reviews in case you are unavailable after sending the pull request, pull requests that are ready to merge but have CLA missing and no response from the author ",(0,t.jsx)(s.strong,{children:"will be closed within two weeks of opening"}),". If you have further questions about the CLA, please stay in touch with us."]}),"\n",(0,t.jsx)(s.p,{children:"If it happens that you were unavailable and your PR gets closed, feel free to reopen once it's ready! We are still happy to review it, help you complete it, and eventually merge it."}),"\n",(0,t.jsx)(s.h3,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,t.jsx)(s.p,{children:"When adding a new breaking change, follow this template in your pull request:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-md",children:"### New breaking change here\n\n- **Who does this affect**:\n- **How to migrate**:\n- **Why make this breaking change**:\n- **Severity (number of people affected x effort)**:\n"})}),"\n",(0,t.jsx)(s.h3,{id:"what-happens-next",children:"What Happens Next?"}),"\n",(0,t.jsx)(s.p,{children:"The core Docusaurus team will be monitoring pull requests. Do help us by keeping pull requests consistent by following the guidelines above."})]})}function r(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}const a={title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},l=void 0,c={id:"contributing",title:"Contributing",description:"",source:"@site/community/3-contributing.mdx",sourceDirName:".",slug:"/contributing",permalink:"/community/contributing",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:3,frontMatter:{title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},sidebar:"community",previous:{title:"Awesome Resources",permalink:"/community/resources"},next:{title:"Canary releases",permalink:"/community/canary"}},u={},d=[{value:"Code of Conduct",id:"code-of-conduct",level:2},{value:"Get Involved",id:"get-involved",level:2},{value:"Join our Discord Channel",id:"join-our-discord-channel",level:3},{value:"Triaging Issues and Pull Requests",id:"triaging-issues-and-pull-requests",level:3},{value:"Our Development Process",id:"our-development-process",level:2},{value:"Branch Organization",id:"branch-organization",level:3},{value:"Issues",id:"issues",level:2},{value:"Bugs",id:"bugs",level:3},{value:"Security Bugs",id:"security-bugs",level:3},{value:"Feature requests",id:"feature-requests",level:3},{value:"Proposals",id:"proposals",level:3},{value:"Claiming issues",id:"claiming-issues",level:3},{value:"Development",id:"development",level:2},{value:"Online one-click setup for contributing",id:"online-one-click-setup-for-contributing",level:3},{value:"Installation",id:"installation",level:3},{value:"Code Conventions",id:"code-conventions",level:3},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Semantic Commit Messages",id:"semantic-commit-messages",level:3},{value:"Versioned Docs",id:"versioned-docs",level:3},{value:"Test Plan",id:"test-plan",level:3},{value:"Licensing",id:"licensing",level:3},{value:"Contributor License Agreement (CLA)",id:"contributor-license-agreement-cla",level:3},{value:"Breaking Changes",id:"breaking-changes",level:3},{value:"What Happens Next?",id:"what-happens-next",level:3}];function h(e){return(0,t.jsx)(r,{})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h()}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const o={},i=t.createContext(o);function r(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/201d0633.247feb61.js b/assets/js/201d0633.247feb61.js deleted file mode 100644 index d41e2d7bb1d0..000000000000 --- a/assets/js/201d0633.247feb61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91510],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),l=t(3620),c=t(44479),d=t(62821),a=t(52196),h=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function x({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,l.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,d._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){u(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=g(e),[i,l]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[d,a]=f({queryString:t,groupId:r}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,h.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=d?d:u;return x({value:e,tabValues:o})?e:null})();(0,c.Z)((()=>{p&&l(p)}),[p]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),j(e)}),[a,j,o]),tabValues:o}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:l}){const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const n=e.currentTarget,r=c.indexOf(n),o=l[r].value;o!==t&&(d(n),s(o))},h=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[c.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>c.push(e),onKeyDown:h,onClick:a},s),{className:(0,o.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function T(e){const n=b(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,v({},n,e)),(0,r.jsx)(k,v({},n,e))]})}function S(e){const n=(0,m.Z)();return(0,r.jsx)(T,w(v({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),o=t(80474),i=t(3620);const l={apiTable:"apiTable_e8hp"};function c({name:e,children:n},t){const l=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),c=e?`${e}-${l}`:l,d=`#${c}`,a=(0,i.k6)();return(0,o.Z)().collectAnchor(c),(0,r.jsx)("tr",{id:c,tabIndex:0,ref:a.location.hash===d?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(d)},onKeyDown:e=>{"Enter"===e.key&&a.push(d)},children:n.props.children})}const d=s.forwardRef(c);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,o]=s.Children.toArray(e.props.children),i=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=i.current)||void 0===e||e.focus()}),[i]);const c=s.Children.map(o.props.children,(e=>(0,r.jsx)(d,{name:n,ref:i,children:e})));return(0,r.jsxs)("table",{className:l.apiTable,children:[t,(0,r.jsx)("tbody",{children:c})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>h});var r=t(24246),s=(t(27378),t(41428)),o=t(92053),i=t(36712),l=t(97555),c=t(61132),d=t(38112);const a=void 0;function h({code:e,pluginName:n,presetOptionName:t}){const h=(0,o.zu)(a).path;return(0,r.jsxs)(l.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(c.Z,{value:"preset",label:(0,i.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${h}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(i.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(c.Z,{value:"plugin",label:(0,i.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ae});var r={};t.r(r),t.d(r,{ButtonExample:()=>N});var s=t(24246),o=t(27378),i=t(40624),l=t(29088),c=t(32711),d=t(36712),a=t(4423),h=t(94544),u=t(30691),j=t(78844),p=t(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var x=t(88941);const f={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function b(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){b(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function v({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(f.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(h.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(x.Z,{fallback:e=>(0,s.jsx)(u.Ac,m({},e)),children:(0,s.jsx)(c.i5,{})}),(0,s.jsx)(c.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:f.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function T(){const e=(0,l.Z)();return(0,s.jsx)(c.uz,{className:f.playgroundEditor},String(e))}function S(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(T,{})]})}const B=e=>`${e};`;function C(e){var n,{children:t,transformCode:r}=e,o=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,d=g();var h;const u=null!==(h=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==h&&h;return(0,s.jsx)("div",{className:f.playgroundContainer,children:(0,s.jsx)(c.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:u,transformCode:null!=r?r:B,theme:d},o),{children:"top"===l?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(S,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(S,{}),(0,s.jsx)(k,{})]})}))})}function D(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){D(e,n,t[n])}))}return e}function L(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function N(e){return(0,s.jsx)("button",L(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function F(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const I=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){F(e,n,t[n])}))}return e}({React:o},o,r);var A,R,M=t(89583),_=t(6324),U=t.n(_);function Z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(X=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Z(e,n,t[n])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(X,Object.getOwnPropertyDescriptors(z)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(z)).forEach((function(e){Object.defineProperty(X,e,Object.getOwnPropertyDescriptor(z,e))})),X);var X,z;const H=Object.keys(W);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Y(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:o}=n;if(o&&V.test(o)){const e=o.match(V).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=U()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(H,n)}}(r,s),l=t.split("\n"),c=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),d=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),h=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<l.length;){const e=l[j].match(i);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));d[n]?c[d[n]].range+=`${j},`:a[n]?c[a[n]].start=j:h[n]&&(c[h[n]].range+=`${c[h[n]].start}-${j-1},`),l.splice(j,1)}t=l.join("\n");const u={};return Object.entries(c).forEach((([e,{range:n}])=>{U()(n).forEach((n=>{var t;null!==(t=(A=u)[R=n])&&void 0!==t||(A[R]=[]),u[n].push(e)}))})),{lineClassNames:u,code:t}}const G={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(g());return(0,s.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,G.codeBlockContainer,M.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,t=oe){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,o.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=t(26101);const ce={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function de(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){de(e,n,t[n])}))}return e}function he(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ue({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=r({line:e,className:(0,i.Z)(n,t&&ce.codeLine)}),c=e.map(((e,n)=>(0,s.jsx)("span",ae({},o({token:e})),n)));return(0,s.jsxs)("span",he(ae({},l),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:ce.codeLineNumber}),(0,s.jsx)("span",{className:ce.codeLineContent,children:c})]}):c,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function xe(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function fe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function be(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",be(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){fe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,o.useState)(!1),l=(0,o.useRef)(void 0),c=(0,o.useCallback)((()=>{(0,je.Z)(e),r(!0),l.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,d.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,d.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,d.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:c,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(xe,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Te({className:e,onClick:n,isEnabled:t}){const r=(0,d.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:l,language:c}){const{prism:{defaultLanguage:d,magicComments:a}}=(0,p.L)();var h;const u=function(e){return null==e?void 0:e.toLowerCase()}(null!==(h=null!=c?c:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==h?h:d),j=g(),x=function(){const[e,n]=(0,o.useState)(!1),[t,r]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return ie(s,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:i}}(),f=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:b,code:m}=Y(e,{metastring:t,language:u,magicComments:a}),y=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,u&&!n.includes(`language-${u}`)&&`language-${u}`),children:[f&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:f}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(le.y$,{theme:j,code:m,language:null!=u?u:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:x.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(ue,{line:e,getLineProps:r,getTokenProps:o,classNames:b[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(x.isEnabled||x.isCodeScrollable)&&(0,s.jsx)(Te,{className:te.codeButton,onClick:()=>x.toggle(),isEnabled:x.isEnabled}),(0,s.jsx)(Oe,{className:te.codeButton,code:m})]})]})]})}function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ce(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function De(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Le(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Ne=(Fe=function(e){var{children:n}=e,t=De(e,["children"]);const r=(0,l.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),c="string"==typeof i?Se:re;return(0,s.jsx)(c,Ce(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,s.jsx)(C,Le({scope:I},e)):(0,s.jsx)(Fe,Le({},e))});var Fe;function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ae(e){return(0,s.jsx)(Ne,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}({},e))}},30546:(e,n,t)=>{t.d(n,{ZP:()=>l,d$:()=>o});var r=t(24246),s=t(71670);const o=[{value:"Tags File",id:"tags-file",level:2},{value:"Types",id:"tags-file-types",level:3},{value:"Example",id:"tags-file-example",level:3}];function i(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"tags-file",children:"Tags File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#tags",children:[(0,r.jsx)(n.code,{children:"tags"})," plugin option"]})," to configure the path of a YAML tags file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"tags.yml"})," file at the root of your content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined tags. You can reference these tags by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"tags"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Keeping tags consistent",type:"tip",children:(0,r.jsxs)(n.p,{children:["Using a tags file, you can ensure that your tags usage is consistent across your plugin content set. Use the ",(0,r.jsx)(n.a,{href:"#onInlineTags",children:(0,r.jsx)(n.code,{children:"onInlineTags: 'throw'"})})," plugin option to enforce this consistency and prevent usage of inline tags declared on the fly."]})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided tags file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type Tag = {\n label?: string; // Tag display label\n permalink?: string; // Tag URL pathname segment\n description?: string; // Tag description displayed in the tag page\n};\n\ntype TagsFileInput = Record<string, Partial<Tag> | null>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"releases:\n label: 'Product releases'\n permalink: '/product-releases'\n description: 'Content related to product releases.'\n\n# A partial tag definition is also valid\nannouncements:\n label: 'Announcements'\n\n# An empty tag definition is also valid\n# Other attributes will be inferred from the key\nemptyTag:\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="content.md"',children:"---\ntags: [releases, announcements, emptyTag]\n---\n\n# Title\n\nContent\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},12036:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>j,contentTitle:()=>h,default:()=>x,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var r=t(24246),s=t(71670),o=t(97555),i=t(61132),l=t(52605),c=t(82064),d=t(30546);const a={sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},h="\ud83d\udce6 plugin-content-blog",u={id:"api/plugins/plugin-content-blog",title:"\ud83d\udce6 plugin-content-blog",description:"Provides the Blog feature and is the default blog plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-blog.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs"},next:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"}},j={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFn</code>",id:"EditUrlFn",level:4},{value:"<code>ReadingTimeFn</code>",id:"ReadingTimeFn",level:4},{value:"<code>FeedType</code>",id:"FeedType",level:4},{value:"<code>FeedXSLTOptions</code>",id:"FeedXSLTOptions",level:4},{value:"<code>CreateFeedItemsFn</code>",id:"CreateFeedItemsFn",level:4},{value:"<code>ProcessBlogPostsFn</code>",id:"ProcessBlogPostsFn",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},...d.d$,{value:"Authors File",id:"authors-file",level:2},{value:"Types",id:"authors-file-types",level:3},{value:"Example",id:"authors-file-example",level:3},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-content-blog",children:"\ud83d\udce6 plugin-content-blog"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/blog",children:"Blog"})," feature and is the default blog plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.admonition,{title:"some features production only",type:"warning",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/blog#feed",children:"feed feature"})," works by extracting the build output, and is ",(0,r.jsx)(n.strong,{children:"only active in production"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-blog\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(l.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsx)(n.td,{children:"Path to the blog content directory on the file system, relative to site dir."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFn",children:"EditUrlFn"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativePostPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page title for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogDescription"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page meta description for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarCount"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"5"})}),(0,r.jsxs)(n.td,{children:["Number of blog post elements to show in the blog sidebar. ",(0,r.jsx)(n.code,{children:"'ALL'"})," to show all blog posts; ",(0,r.jsx)(n.code,{children:"0"})," to disable."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Recent posts'"})}),(0,r.jsx)(n.td,{children:"Title of the blog sidebar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsxs)(n.td,{children:["URL route for the blog section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," to put the blog at root path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pageBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'page'"})}),(0,r.jsxs)(n.td,{children:["URL route for the pages section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"archiveBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'archive'"})}),(0,r.jsxs)(n.td,{children:["URL route for the archive section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),". ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation of archive."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authorsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'authors'"})}),(0,r.jsxs)(n.td,{children:["URL route for the authors pages of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"path"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"postsPerPage"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsxs)(n.td,{children:["Number of posts to show per page in the listing page. Use ",(0,r.jsx)(n.code,{children:"'ALL'"})," to display all posts on one listing page."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog listing page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogPostComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogPostPage'"})}),(0,r.jsx)(n.td,{children:"Root component of each blog post page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsPostsComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsPostsPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "posts containing tag" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogArchiveComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogArchivePage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog archive page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogAuthorsPostsComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/Blog/Pages/BlogAuthorsPostsPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog author page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogAuthorsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/Blog/Pages/BlogAuthorsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog authors page index."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Recma plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"truncateMarker"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"RegExp"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/\x3c!--\\s*truncate\\s*--\x3e/"})," | ",(0,r.jsx)(n.code,{children:"\\{\\/\\*\\s*truncate\\s*\\*\\/\\}/"})]}),(0,r.jsx)(n.td,{children:"Truncate marker marking where the summary ends."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showReadingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Show estimated reading time for the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"readingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),(0,r.jsx)(n.td,{children:"The default reading time"}),(0,r.jsx)(n.td,{children:"A callback to customize the reading time number displayed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authorsMapPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'authors.yml'"})}),(0,r.jsx)(n.td,{children:"Path to the authors map file, relative to the blog content directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See below"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{type: ['rss', 'atom']}"})}),(0,r.jsx)(n.td,{children:"Blog feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.type"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"})," | ",(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"}),"[] | 'all' | null"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsxs)(n.td,{children:["Type of feed to be generated. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.createFeedItems"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#CreateFeedItemsFn",children:"CreateFeedItemsFn"})," | undefined"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform and / or filter the items in the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.limit"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number | null | false"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"20"})}),(0,r.jsxs)(n.td,{children:["Limits the feed to the specified number of posts, ",(0,r.jsx)(n.code,{children:"false"})," or ",(0,r.jsx)(n.code,{children:"null"})," for all entries. Defaults to ",(0,r.jsx)(n.code,{children:"20"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"siteConfig.title"})}),(0,r.jsx)(n.td,{children:"Title of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"`${siteConfig.title} Blog`"})}),(0,r.jsx)(n.td,{children:"Description of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.copyright"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Copyright message."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.xslt"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["boolean | ",(0,r.jsx)(n.a,{href:"#FeedXSLTOptions",children:"FeedXSLTOptions"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Copyright message."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.language"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"string"})," (See ",(0,r.jsx)(n.a,{href:"http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes",children:"documentation"})," for possible values)"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Language metadata of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sortPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"'descending' | 'ascending' "})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'descending'"})}),(0,r.jsx)(n.td,{children:"Governs the direction of blog post sorting."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"processBlogPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#ProcessBlogPostsFn",children:"ProcessBlogPostsFn"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform blog posts (filter, modify, delete, etc...)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the blog post was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string | false | null | undefined"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags.yml"})}),(0,r.jsx)(n.td,{children:"Path to the YAML tags file listing pre-defined tags. Relative to the blog content directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onInlineTags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'ignore' | 'log' | 'warn' | 'throw'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"warn"})}),(0,r.jsxs)(n.td,{children:["The plugin behavior when blog posts contain inline tags (not appearing in the list of pre-defined tags, usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")."]})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFn",children:(0,r.jsx)(n.code,{children:"EditUrlFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n blogDirPath: string;\n blogPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ReadingTimeFn",children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ReadingTimeOptions = {\n wordsPerMinute: number;\n wordBound: (char: string) => boolean;\n};\n\ntype ReadingTimeCalculator = (params: {\n content: string;\n frontMatter?: BlogPostFrontMatter & Record<string, unknown>;\n options?: ReadingTimeOptions;\n}) => number;\n\ntype ReadingTimeFn = (params: {\n content: string;\n frontMatter: BlogPostFrontMatter & Record<string, unknown>;\n defaultReadingTime: ReadingTimeCalculator;\n}) => number | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"FeedType",children:(0,r.jsx)(n.code,{children:"FeedType"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FeedType = 'rss' | 'atom' | 'json';\n"})}),"\n",(0,r.jsx)(n.h4,{id:"FeedXSLTOptions",children:(0,r.jsx)(n.code,{children:"FeedXSLTOptions"})}),"\n",(0,r.jsxs)(n.p,{children:["Permits to style the blog XML feeds so that browsers render them nicely with ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/XSLT",children:"XSLT"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"true"})," to let the blog use its built-in ",(0,r.jsx)(n.code,{children:".xsl"})," and ",(0,r.jsx)(n.code,{children:".css"})," files to style the blog feed"]}),"\n",(0,r.jsxs)(n.li,{children:["Use a falsy value (",(0,r.jsx)(n.code,{children:"undefined | null | false"}),") to disable the feature"]}),"\n",(0,r.jsxs)(n.li,{children:["Use a ",(0,r.jsx)(n.code,{children:"string"})," to provide a file path to a custom ",(0,r.jsx)(n.code,{children:".xsl"})," file relative to the blog content folder. By convention, you must provide a ",(0,r.jsx)(n.code,{children:".css"})," file with the exact same name."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FeedXSLTOptions =\n | boolean\n | undefined\n | null\n | {\n rss?: string | boolean | null | undefined;\n atom?: string | boolean | null | undefined;\n };\n"})}),"\n",(0,r.jsx)(n.h4,{id:"CreateFeedItemsFn",children:(0,r.jsx)(n.code,{children:"CreateFeedItemsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type CreateFeedItemsFn = (params: {\n blogPosts: BlogPost[];\n siteConfig: DocusaurusConfig;\n outDir: string;\n defaultCreateFeedItemsFn: CreateFeedItemsFn;\n}) => Promise<BlogFeedItem[]>;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ProcessBlogPostsFn",children:(0,r.jsx)(n.code,{children:"ProcessBlogPostsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ProcessBlogPostsFn = (params: {\n blogPosts: BlogPost[];\n}) => Promise<void | BlogPost[]>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(c.Z,{pluginName:"@docusaurus/plugin-content-blog",presetOptionName:"blog",code:"{\n path: 'blog',\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({locale, blogDirPath, blogPath, permalink}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`,\n editLocalizedFiles: false,\n blogTitle: 'Blog title',\n blogDescription: 'Blog',\n blogSidebarCount: 5,\n blogSidebarTitle: 'All our posts',\n routeBasePath: 'blog',\n include: ['**/*.{md,mdx}'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n postsPerPage: 10,\n blogListComponent: '@theme/BlogListPage',\n blogPostComponent: '@theme/BlogPostPage',\n blogTagsListComponent: '@theme/BlogTagsListPage',\n blogTagsPostsComponent: '@theme/BlogTagsPostsPage',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n truncateMarker: /\x3c!--\\s*(truncate)\\s*--\x3e/,\n showReadingTime: true,\n feedOptions: {\n type: '',\n title: '',\n description: '',\n copyright: '',\n language: undefined,\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n },\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(l.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["List of blog post authors (or unique author). Read the ",(0,r.jsxs)(n.a,{href:"/docs/blog#blog-post-authors",children:[(0,r.jsx)(n.code,{children:"authors"})," guide"]})," for more explanations. Prefer ",(0,r.jsx)(n.code,{children:"authors"})," over the ",(0,r.jsx)(n.code,{children:"author_*"})," front matter fields, even for single author blog posts."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The blog post author's name."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL that the author's name will be linked to. This could be a GitHub, Twitter, Facebook profile URL, etc."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_image_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL to the author's thumbnail image."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". A description of the author."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Markdown title"}),(0,r.jsx)(n.td,{children:"The blog post title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"date"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File name or file creation time"}),(0,r.jsxs)(n.td,{children:["The blog post creation date. If not specified, this can be extracted from the file or folder name, e.g, ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post/index.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021/04/15/blog-post.mdx"}),". Otherwise, it is the Markdown file creation time."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your post. Strings can be a reference to keys of a ",(0,r.jsx)(n.a,{href:"#tags-file",children:"tags file"})," (usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft blog posts will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted blog posts will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Keywords meta tag, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="keywords" content="keyword1,keyword2,..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the blog post URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-blog-post"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/to/blog/post"}),", slug: ",(0,r.jsx)(n.code,{children:"/"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n\n// An author key references an author from the global plugin authors.yml file\ntype AuthorKey = string;\n\n// Social platform name -> Social platform link\n// Example: {MyPlatform: \'https://myplatform.com/myusername\'}\n// Pre-defined platforms ("x", "github", "twitter", "linkedin", "stackoverflow") accept handles:\n// Example: {github: \'slorber\'}\ntype AuthorSocials = Record<string, string>;\n\ntype Author = {\n key?: AuthorKey;\n name: string;\n title?: string;\n url?: string;\n image_url?: string;\n socials?: AuthorSocials;\n};\n\n// The front matter authors field allows various possible shapes\ntype Authors = AuthorKey | Author | (AuthorKey | Author)[];\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\ntitle: Welcome Docusaurus\nauthors:\n - slorber\n - yangshun\n - name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\n socials:\n x: joelmarcey\n github: JoelMarcey\ntags: [docusaurus]\ndescription: This is my first post on Docusaurus.\nimage: https://i.imgur.com/mErPwqL.png\nhide_table_of_contents: false\n---\n\nA Markdown blog post\n"})}),"\n","\n",(0,r.jsx)(d.ZP,{}),"\n",(0,r.jsx)(n.h2,{id:"authors-file",children:"Authors File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#authors",children:[(0,r.jsx)(n.code,{children:"authors"})," plugin option"]})," to configure the path of a YAML authors file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"authors.yml"})," file at the root of your blog content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined ",(0,r.jsx)(n.a,{href:"/docs/blog#global-authors",children:"global blog authors"}),". You can reference these authors by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"authors"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"authors-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided authors file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type AuthorsMapInput = {\n [authorKey: string]: AuthorInput;\n};\n\ntype AuthorInput = {\n name?: string;\n title?: string;\n description?: string;\n imageURL?: string;\n url?: string;\n email?: string;\n page?: boolean | {permalink: string};\n socials?: Record<string, string>;\n [customAuthorAttribute: string]: unknown;\n};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"authors-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"slorber:\n name: S\xe9bastien Lorber\n title: Docusaurus maintainer\n url: https://sebastienlorber.com\n image_url: https://github.com/slorber.png\n page: true\n socials:\n x: sebastienlorber\n github: slorber\n\njmarcey:\n name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\n email: jimarcey@gmail.com\n page:\n permalink: '/joel-marcey'\n socials:\n x: joelmarcey\n github: JoelMarcey\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="blog/my-blog-post.md"',children:"---\nauthors: [slorber, jmarcey]\n---\n\n# My Blog Post\n\nContent\n"})}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-blog\n\u2502\n\u2502 # translations for website/blog\n\u251c\u2500\u2500 authors.yml\n\u251c\u2500\u2500 first-blog-post.md\n\u251c\u2500\u2500 second-blog-post.md\n\u2502\n\u2502 # translations for the plugin options that will be rendered\n\u2514\u2500\u2500 options.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/201d0633.8b6d2b0d.js b/assets/js/201d0633.8b6d2b0d.js new file mode 100644 index 000000000000..b026c06f0976 --- /dev/null +++ b/assets/js/201d0633.8b6d2b0d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91510],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>B});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),l=t(3620),c=t(44479),d=t(62821),a=t(52196),h=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function x({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,l.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,d._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){u(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=g(e),[i,l]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[d,a]=f({queryString:t,groupId:r}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,h.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=d?d:u;return x({value:e,tabValues:o})?e:null})();(0,c.Z)((()=>{p&&l(p)}),[p]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),j(e)}),[a,j,o]),tabValues:o}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:l}){const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const n=e.currentTarget,r=c.indexOf(n),o=l[r].value;o!==t&&(d(n),s(o))},h=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[c.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>c.push(e),onKeyDown:h,onClick:a},s),{className:(0,o.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function T(e){const n=b(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,v({},n,e)),(0,r.jsx)(k,v({},n,e))]})}function B(e){const n=(0,m.Z)();return(0,r.jsx)(T,w(v({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),o=t(80474),i=t(3620);const l={apiTable:"apiTable_e8hp"};function c({name:e,children:n},t){const l=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),c=e?`${e}-${l}`:l,d=`#${c}`,a=(0,i.k6)();return(0,o.Z)().collectAnchor(c),(0,r.jsx)("tr",{id:c,tabIndex:0,ref:a.location.hash===d?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(d)},onKeyDown:e=>{"Enter"===e.key&&a.push(d)},children:n.props.children})}const d=s.forwardRef(c);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,o]=s.Children.toArray(e.props.children),i=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=i.current)||void 0===e||e.focus()}),[i]);const c=s.Children.map(o.props.children,(e=>(0,r.jsx)(d,{name:n,ref:i,children:e})));return(0,r.jsxs)("table",{className:l.apiTable,children:[t,(0,r.jsx)("tbody",{children:c})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>h});var r=t(24246),s=(t(27378),t(41428)),o=t(92053),i=t(36712),l=t(97555),c=t(61132),d=t(38112);const a=void 0;function h({code:e,pluginName:n,presetOptionName:t}){const h=(0,o.zu)(a).path;return(0,r.jsxs)(l.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(c.Z,{value:"preset",label:(0,i.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${h}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(i.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(c.Z,{value:"plugin",label:(0,i.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ae});var r={};t.r(r),t.d(r,{ButtonExample:()=>N});var s=t(24246),o=t(27378),i=t(40624),l=t(29088),c=t(32711),d=t(36712),a=t(4423),h=t(94544),u=t(30691),j=t(78844),p=t(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var x=t(88941);const f={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function b(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){b(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function v({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(f.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(h.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(x.Z,{fallback:e=>(0,s.jsx)(u.Ac,m({},e)),children:(0,s.jsx)(c.i5,{})}),(0,s.jsx)(c.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:f.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function T(){const e=(0,l.Z)();return(0,s.jsx)(c.uz,{className:f.playgroundEditor},String(e))}function B(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(T,{})]})}const S=e=>`${e};`;function C(e){var n,{children:t,transformCode:r}=e,o=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,d=g();var h;const u=null!==(h=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==h&&h;return(0,s.jsx)("div",{className:f.playgroundContainer,children:(0,s.jsx)(c.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:u,transformCode:null!=r?r:S,theme:d},o),{children:"top"===l?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(B,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(B,{}),(0,s.jsx)(k,{})]})}))})}function D(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){D(e,n,t[n])}))}return e}function L(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function N(e){return(0,s.jsx)("button",L(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function F(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const I=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){F(e,n,t[n])}))}return e}({React:o},o,r);var A,R,M=t(89583),_=t(6324),U=t.n(_);function Z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(X=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Z(e,n,t[n])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(X,Object.getOwnPropertyDescriptors(z)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(z)).forEach((function(e){Object.defineProperty(X,e,Object.getOwnPropertyDescriptor(z,e))})),X);var X,z;const H=Object.keys(W);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Y(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:o}=n;if(o&&V.test(o)){const e=o.match(V).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=U()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(H,n)}}(r,s),l=t.split("\n"),c=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),d=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),h=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<l.length;){const e=l[j].match(i);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));d[n]?c[d[n]].range+=`${j},`:a[n]?c[a[n]].start=j:h[n]&&(c[h[n]].range+=`${c[h[n]].start}-${j-1},`),l.splice(j,1)}t=l.join("\n");const u={};return Object.entries(c).forEach((([e,{range:n}])=>{U()(n).forEach((n=>{var t;null!==(t=(A=u)[R=n])&&void 0!==t||(A[R]=[]),u[n].push(e)}))})),{lineClassNames:u,code:t}}const G={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(g());return(0,s.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,G.codeBlockContainer,M.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,t=oe){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,o.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=t(26101);const ce={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function de(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){de(e,n,t[n])}))}return e}function he(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ue({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=r({line:e,className:(0,i.Z)(n,t&&ce.codeLine)}),c=e.map(((e,n)=>(0,s.jsx)("span",ae({},o({token:e})),n)));return(0,s.jsxs)("span",he(ae({},l),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:ce.codeLineNumber}),(0,s.jsx)("span",{className:ce.codeLineContent,children:c})]}):c,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function xe(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function fe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function be(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",be(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){fe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,o.useState)(!1),l=(0,o.useRef)(void 0),c=(0,o.useCallback)((()=>{(0,je.Z)(e),r(!0),l.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,d.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,d.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,d.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:c,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(xe,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Te({className:e,onClick:n,isEnabled:t}){const r=(0,d.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Be({children:e,className:n="",metastring:t,title:r,showLineNumbers:l,language:c}){const{prism:{defaultLanguage:d,magicComments:a}}=(0,p.L)();var h;const u=function(e){return null==e?void 0:e.toLowerCase()}(null!==(h=null!=c?c:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==h?h:d),j=g(),x=function(){const[e,n]=(0,o.useState)(!1),[t,r]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return ie(s,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:i}}(),f=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:b,code:m}=Y(e,{metastring:t,language:u,magicComments:a}),y=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,u&&!n.includes(`language-${u}`)&&`language-${u}`),children:[f&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:f}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(le.y$,{theme:j,code:m,language:null!=u?u:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:x.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(ue,{line:e,getLineProps:r,getTokenProps:o,classNames:b[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(x.isEnabled||x.isCodeScrollable)&&(0,s.jsx)(Te,{className:te.codeButton,onClick:()=>x.toggle(),isEnabled:x.isEnabled}),(0,s.jsx)(Oe,{className:te.codeButton,code:m})]})]})]})}function Se(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ce(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function De(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Le(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Ne=(Fe=function(e){var{children:n}=e,t=De(e,["children"]);const r=(0,l.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),c="string"==typeof i?Be:re;return(0,s.jsx)(c,Ce(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Se(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,s.jsx)(C,Le({scope:I},e)):(0,s.jsx)(Fe,Le({},e))});var Fe;function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ae(e){return(0,s.jsx)(Ne,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}({},e))}},30546:(e,n,t)=>{t.d(n,{ZP:()=>l,d$:()=>o});var r=t(24246),s=t(71670);const o=[{value:"Tags File",id:"tags-file",level:2},{value:"Types",id:"tags-file-types",level:3},{value:"Example",id:"tags-file-example",level:3}];function i(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"tags-file",children:"Tags File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#tags",children:[(0,r.jsx)(n.code,{children:"tags"})," plugin option"]})," to configure the path of a YAML tags file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"tags.yml"})," file at the root of your content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined tags. You can reference these tags by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"tags"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Keeping tags consistent",type:"tip",children:(0,r.jsxs)(n.p,{children:["Using a tags file, you can ensure that your tags usage is consistent across your plugin content set. Use the ",(0,r.jsx)(n.a,{href:"#onInlineTags",children:(0,r.jsx)(n.code,{children:"onInlineTags: 'throw'"})})," plugin option to enforce this consistency and prevent usage of inline tags declared on the fly."]})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided tags file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type Tag = {\n label?: string; // Tag display label\n permalink?: string; // Tag URL pathname segment\n description?: string; // Tag description displayed in the tag page\n};\n\ntype TagsFileInput = Record<string, Partial<Tag> | null>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"tags-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"releases:\n label: 'Product releases'\n permalink: '/product-releases'\n description: 'Content related to product releases.'\n\n# A partial tag definition is also valid\nannouncements:\n label: 'Announcements'\n\n# An empty tag definition is also valid\n# Other attributes will be inferred from the key\nemptyTag:\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="content.md"',children:"---\ntags: [releases, announcements, emptyTag]\n---\n\n# Title\n\nContent\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},12036:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>j,contentTitle:()=>h,default:()=>x,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var r=t(24246),s=t(71670),o=t(97555),i=t(61132),l=t(52605),c=t(82064),d=t(30546);const a={sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},h="\ud83d\udce6 plugin-content-blog",u={id:"api/plugins/plugin-content-blog",title:"\ud83d\udce6 plugin-content-blog",description:"Provides the Blog feature and is the default blog plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-blog.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs"},next:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"}},j={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFn</code>",id:"EditUrlFn",level:4},{value:"<code>ReadingTimeFn</code>",id:"ReadingTimeFn",level:4},{value:"<code>FeedType</code>",id:"FeedType",level:4},{value:"<code>FeedXSLTOptions</code>",id:"FeedXSLTOptions",level:4},{value:"<code>CreateFeedItemsFn</code>",id:"CreateFeedItemsFn",level:4},{value:"<code>ProcessBlogPostsFn</code>",id:"ProcessBlogPostsFn",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},...d.d$,{value:"Authors File",id:"authors-file",level:2},{value:"Types",id:"authors-file-types",level:3},{value:"Example",id:"authors-file-example",level:3},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-content-blog",children:"\ud83d\udce6 plugin-content-blog"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/blog",children:"Blog"})," feature and is the default blog plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.admonition,{title:"some features production only",type:"warning",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/blog#feed",children:"feed feature"})," works by extracting the build output, and is ",(0,r.jsx)(n.strong,{children:"only active in production"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-blog\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(l.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsx)(n.td,{children:"Path to the blog content directory on the file system, relative to site dir."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFn",children:"EditUrlFn"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativePostPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page title for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogDescription"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page meta description for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarCount"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"5"})}),(0,r.jsxs)(n.td,{children:["Number of blog post elements to show in the blog sidebar. ",(0,r.jsx)(n.code,{children:"'ALL'"})," to show all blog posts; ",(0,r.jsx)(n.code,{children:"0"})," to disable."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Recent posts'"})}),(0,r.jsx)(n.td,{children:"Title of the blog sidebar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsxs)(n.td,{children:["URL route for the blog section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," to put the blog at root path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pageBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'page'"})}),(0,r.jsxs)(n.td,{children:["URL route for the pages section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"archiveBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'archive'"})}),(0,r.jsxs)(n.td,{children:["URL route for the archive section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),". ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation of archive."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authorsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'authors'"})}),(0,r.jsxs)(n.td,{children:["URL route for the authors pages of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"path"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"postsPerPage"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsxs)(n.td,{children:["Number of posts to show per page in the listing page. Use ",(0,r.jsx)(n.code,{children:"'ALL'"})," to display all posts on one listing page."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog listing page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogPostComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogPostPage'"})}),(0,r.jsx)(n.td,{children:"Root component of each blog post page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsPostsComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsPostsPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "posts containing tag" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogArchiveComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogArchivePage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog archive page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogAuthorsPostsComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/Blog/Pages/BlogAuthorsPostsPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog author page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogAuthorsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/Blog/Pages/BlogAuthorsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog authors page index."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Recma plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"truncateMarker"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"RegExp"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/\x3c!--\\s*truncate\\s*--\x3e/"})," | ",(0,r.jsx)(n.code,{children:"\\{\\/\\*\\s*truncate\\s*\\*\\/\\}/"})]}),(0,r.jsx)(n.td,{children:"Truncate marker marking where the summary ends."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showReadingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Show estimated reading time for the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"readingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),(0,r.jsx)(n.td,{children:"The default reading time"}),(0,r.jsx)(n.td,{children:"A callback to customize the reading time number displayed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authorsMapPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'authors.yml'"})}),(0,r.jsx)(n.td,{children:"Path to the authors map file, relative to the blog content directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See below"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{type: ['rss', 'atom']}"})}),(0,r.jsx)(n.td,{children:"Blog feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.type"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"})," | ",(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"}),"[] | 'all' | null"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsxs)(n.td,{children:["Type of feed to be generated. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.createFeedItems"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#CreateFeedItemsFn",children:"CreateFeedItemsFn"})," | undefined"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform and / or filter the items in the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.limit"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number | null | false"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"20"})}),(0,r.jsxs)(n.td,{children:["Limits the feed to the specified number of posts, ",(0,r.jsx)(n.code,{children:"false"})," or ",(0,r.jsx)(n.code,{children:"null"})," for all entries. Defaults to ",(0,r.jsx)(n.code,{children:"20"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"siteConfig.title"})}),(0,r.jsx)(n.td,{children:"Title of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"`${siteConfig.title} Blog`"})}),(0,r.jsx)(n.td,{children:"Description of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.copyright"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Copyright message."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.xslt"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["boolean | ",(0,r.jsx)(n.a,{href:"#FeedXSLTOptions",children:"FeedXSLTOptions"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Copyright message."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.language"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"string"})," (See ",(0,r.jsx)(n.a,{href:"http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes",children:"documentation"})," for possible values)"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Language metadata of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sortPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"'descending' | 'ascending' "})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'descending'"})}),(0,r.jsx)(n.td,{children:"Governs the direction of blog post sorting."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"processBlogPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#ProcessBlogPostsFn",children:"ProcessBlogPostsFn"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform blog posts (filter, modify, delete, etc...)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the blog post was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string | false | null | undefined"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags.yml"})}),(0,r.jsx)(n.td,{children:"Path to the YAML tags file listing pre-defined tags. Relative to the blog content directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onInlineTags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'ignore' | 'log' | 'warn' | 'throw'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"warn"})}),(0,r.jsxs)(n.td,{children:["The plugin behavior when blog posts contain inline tags (not appearing in the list of pre-defined tags, usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")."]})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFn",children:(0,r.jsx)(n.code,{children:"EditUrlFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n blogDirPath: string;\n blogPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ReadingTimeFn",children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ReadingTimeOptions = {\n wordsPerMinute: number;\n wordBound: (char: string) => boolean;\n};\n\ntype ReadingTimeCalculator = (params: {\n content: string;\n frontMatter?: BlogPostFrontMatter & Record<string, unknown>;\n options?: ReadingTimeOptions;\n}) => number;\n\ntype ReadingTimeFn = (params: {\n content: string;\n frontMatter: BlogPostFrontMatter & Record<string, unknown>;\n defaultReadingTime: ReadingTimeCalculator;\n}) => number | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"FeedType",children:(0,r.jsx)(n.code,{children:"FeedType"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FeedType = 'rss' | 'atom' | 'json';\n"})}),"\n",(0,r.jsx)(n.h4,{id:"FeedXSLTOptions",children:(0,r.jsx)(n.code,{children:"FeedXSLTOptions"})}),"\n",(0,r.jsxs)(n.p,{children:["Permits to style the blog XML feeds so that browsers render them nicely with ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/XSLT",children:"XSLT"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"true"})," to let the blog use its built-in ",(0,r.jsx)(n.code,{children:".xsl"})," and ",(0,r.jsx)(n.code,{children:".css"})," files to style the blog feed"]}),"\n",(0,r.jsxs)(n.li,{children:["Use a falsy value (",(0,r.jsx)(n.code,{children:"undefined | null | false"}),") to disable the feature"]}),"\n",(0,r.jsxs)(n.li,{children:["Use a ",(0,r.jsx)(n.code,{children:"string"})," to provide a file path to a custom ",(0,r.jsx)(n.code,{children:".xsl"})," file relative to the blog content folder. By convention, you must provide a ",(0,r.jsx)(n.code,{children:".css"})," file with the exact same name."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FeedXSLTOptions =\n | boolean\n | undefined\n | null\n | {\n rss?: string | boolean | null | undefined;\n atom?: string | boolean | null | undefined;\n };\n"})}),"\n",(0,r.jsx)(n.h4,{id:"CreateFeedItemsFn",children:(0,r.jsx)(n.code,{children:"CreateFeedItemsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type CreateFeedItemsFn = (params: {\n blogPosts: BlogPost[];\n siteConfig: DocusaurusConfig;\n outDir: string;\n defaultCreateFeedItemsFn: CreateFeedItemsFn;\n}) => Promise<BlogFeedItem[]>;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ProcessBlogPostsFn",children:(0,r.jsx)(n.code,{children:"ProcessBlogPostsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ProcessBlogPostsFn = (params: {\n blogPosts: BlogPost[];\n}) => Promise<void | BlogPost[]>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(c.Z,{pluginName:"@docusaurus/plugin-content-blog",presetOptionName:"blog",code:"{\n path: 'blog',\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({locale, blogDirPath, blogPath, permalink}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`,\n editLocalizedFiles: false,\n blogTitle: 'Blog title',\n blogDescription: 'Blog',\n blogSidebarCount: 5,\n blogSidebarTitle: 'All our posts',\n routeBasePath: 'blog',\n include: ['**/*.{md,mdx}'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n postsPerPage: 10,\n blogListComponent: '@theme/BlogListPage',\n blogPostComponent: '@theme/BlogPostPage',\n blogTagsListComponent: '@theme/BlogTagsListPage',\n blogTagsPostsComponent: '@theme/BlogTagsPostsPage',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n truncateMarker: /\x3c!--\\s*(truncate)\\s*--\x3e/,\n showReadingTime: true,\n feedOptions: {\n type: '',\n title: '',\n description: '',\n copyright: '',\n language: undefined,\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n },\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(l.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["List of blog post authors (or unique author). Read the ",(0,r.jsxs)(n.a,{href:"/docs/blog#blog-post-authors",children:[(0,r.jsx)(n.code,{children:"authors"})," guide"]})," for more explanations. Prefer ",(0,r.jsx)(n.code,{children:"authors"})," over the ",(0,r.jsx)(n.code,{children:"author_*"})," front matter fields, even for single author blog posts."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The blog post author's name."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL that the author's name will be linked to. This could be a GitHub, Twitter, Facebook profile URL, etc."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_image_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL to the author's thumbnail image."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". A description of the author."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Markdown title"}),(0,r.jsx)(n.td,{children:"The blog post title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"date"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File name or file creation time"}),(0,r.jsxs)(n.td,{children:["The blog post creation date. If not specified, this can be extracted from the file or folder name, e.g, ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post/index.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021/04/15/blog-post.mdx"}),". Otherwise, it is the Markdown file creation time."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your post. Strings can be a reference to keys of a ",(0,r.jsx)(n.a,{href:"#tags-file",children:"tags file"})," (usually ",(0,r.jsx)(n.code,{children:"tags.yml"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft blog posts will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted blog posts will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Keywords meta tag, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="keywords" content="keyword1,keyword2,..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the blog post URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-blog-post"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/to/blog/post"}),", slug: ",(0,r.jsx)(n.code,{children:"/"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n\n// An author key references an author from the global plugin authors.yml file\ntype AuthorKey = string;\n\n// Social platform name -> Social platform link\n// Example: {MyPlatform: \'https://myplatform.com/myusername\'}\n// Pre-defined platforms ("x", "github", "twitter", "linkedin", "stackoverflow") accept handles:\n// Example: {github: \'slorber\'}\ntype AuthorSocials = Record<string, string>;\n\ntype Author = {\n key?: AuthorKey;\n name: string;\n title?: string;\n url?: string;\n image_url?: string;\n socials?: AuthorSocials;\n};\n\n// The front matter authors field allows various possible shapes\ntype Authors = AuthorKey | Author | (AuthorKey | Author)[];\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\ntitle: Welcome Docusaurus\nauthors:\n - slorber\n - yangshun\n - name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\n socials:\n x: joelmarcey\n github: JoelMarcey\ntags: [docusaurus]\ndescription: This is my first post on Docusaurus.\nimage: https://i.imgur.com/mErPwqL.png\nhide_table_of_contents: false\n---\n\nA Markdown blog post\n"})}),"\n","\n",(0,r.jsx)(d.ZP,{}),"\n",(0,r.jsx)(n.h2,{id:"authors-file",children:"Authors File"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsxs)(n.a,{href:"#authors",children:[(0,r.jsx)(n.code,{children:"authors"})," plugin option"]})," to configure the path of a YAML authors file."]}),"\n",(0,r.jsxs)(n.p,{children:["By convention, the plugin will look for a ",(0,r.jsx)(n.code,{children:"authors.yml"})," file at the root of your blog content folder(s)."]}),"\n",(0,r.jsxs)(n.p,{children:["This file can contain a list of predefined ",(0,r.jsx)(n.a,{href:"/docs/blog#global-authors",children:"global blog authors"}),". You can reference these authors by their keys in Markdown files thanks to the ",(0,r.jsxs)(n.a,{href:"#markdown-front-matter",children:[(0,r.jsx)(n.code,{children:"authors"})," front matter"]}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"authors-file-types",children:"Types"}),"\n",(0,r.jsx)(n.p,{children:"The YAML content of the provided authors file should respect the following shape:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:"type AuthorsMapInput = {\n [authorKey: string]: AuthorInput;\n};\n\ntype AuthorInput = {\n name?: string;\n title?: string;\n description?: string;\n imageURL?: string;\n url?: string;\n email?: string;\n page?: boolean | {permalink: string};\n socials?: Record<string, string>;\n [customAuthorAttribute: string]: unknown;\n};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"authors-file-example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="tags.yml"',children:"slorber:\n name: S\xe9bastien Lorber\n title: Docusaurus maintainer\n url: https://sebastienlorber.com\n image_url: https://github.com/slorber.png\n page: true\n socials:\n x: sebastienlorber\n github: slorber\n\njmarcey:\n name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\n email: jimarcey@gmail.com\n page:\n permalink: '/joel-marcey'\n socials:\n x: joelmarcey\n github: JoelMarcey\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="blog/my-blog-post.md"',children:"---\nauthors: [slorber, jmarcey]\n---\n\n# My Blog Post\n\nContent\n"})}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-blog\n\u2502\n\u2502 # translations for website/blog\n\u251c\u2500\u2500 authors.yml\n\u251c\u2500\u2500 first-blog-post.md\n\u251c\u2500\u2500 second-blog-post.md\n\u2502\n\u2502 # translations for the plugin options that will be rendered\n\u2514\u2500\u2500 options.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/209ff87f.388316b4.js b/assets/js/209ff87f.388316b4.js new file mode 100644 index 000000000000..7752ef7cbbfc --- /dev/null +++ b/assets/js/209ff87f.388316b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94152],{61132:(e,a,n)=>{n.d(a,{Z:()=>l});var t=n(24246),s=(n(27378),n(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:a,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,n),hidden:a,children:e})}},97555:(e,a,n)=>{n.d(a,{Z:()=>Z});var t=n(24246),s=n(27378),r=n(40624),l=n(75527),i=n(3620),o=n(44479),c=n(62821),d=n(52196),u=n(53589);function b(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function h(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function p(e){var a,n;return null!==(n=null===(a=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===a?void 0:a.filter(Boolean))&&void 0!==n?n:[]}function m(e){const{values:a,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=a?a:function(e){return p(e).map((({props:{value:e,label:a,attributes:n,default:t}})=>({value:e,label:a,attributes:n,default:t})))}(n);return function(e){const a=(0,d.lx)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[a,n])}function g({value:e,tabValues:a}){return a.some((a=>a.value===e))}function j({queryString:e=!1,groupId:a}){const n=(0,i.k6)(),t=function({queryString:e=!1,groupId:a}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:e,groupId:a}),r=(0,c._X)(t),l=(0,s.useCallback)((e=>{if(!t)return;const a=new URLSearchParams(n.location.search);a.set(t,e),n.replace(h(function(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){b(e,a,n[a])}))}return e}({},n.location),{search:a.toString()}))}),[t,n]);return[r,l]}function x(e){const{defaultValue:a,queryString:n=!1,groupId:t}=e,r=m(e),[l,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:a}){if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=a.find((e=>e.default)))&&void 0!==n?n:a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:a,tabValues:r}))),[c,d]=j({queryString:n,groupId:t}),[b,h]=function({groupId:e}){const a=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,u.Nk)(a);return[n,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:t}),p=(()=>{const e=null!=c?c:b;return g({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,r]),tabValues:r}}var f=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function y(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){w(e,a,n[a])}))}return e}function T(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function I({className:e,block:a,selectedValue:n,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const a=e.currentTarget,t=o.indexOf(a),r=i[t].value;r!==n&&(c(a),s(r))},u=e=>{let a=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var n;a=null!==(n=o[t])&&void 0!==n?n:o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;var t;a=null!==(t=o[n])&&void 0!==t?t:o[o.length-1];break}}null==a||a.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},e),children:i.map((({value:e,label:a,attributes:s})=>(0,t.jsx)("li",T(y({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},s),{className:(0,r.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=a?a:e}),e)))})}function O({lazy:e,children:a,selectedValue:n}){const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:l.map(((e,a)=>(0,s.cloneElement)(e,{key:a,hidden:e.props.value!==n})))})}function S(e){const a=x(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,t.jsx)(I,y({},a,e)),(0,t.jsx)(O,y({},a,e))]})}function Z(e){const a=(0,f.Z)();return(0,t.jsx)(S,T(y({},e),{children:p(e.children)}),String(a))}},6698:(e,a,n)=>{n.d(a,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){l(e,a,n[a])}))}return e}function o(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function c({children:e,minHeight:a,url:n="http://localhost:3000",style:l,bodyStyle:c}){return(0,t.jsxs)("div",{className:r.browserWindow,style:o(i({},l),{minHeight:a}),children:[(0,t.jsxs)("div",{className:r.browserWindowHeader,children:[(0,t.jsxs)("div",{className:r.buttons,children:[(0,t.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(r.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar})]})})]}),(0,t.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},46379:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>b,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var t=n(24246),s=n(71670),r=n(6698),l=n(97555),i=n(61132);const o={red:"red_FE5X",orange:"orange_kp8w",yellow:"yellow_uGry"},c={id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},d="Tabs",u={id:"guides/markdown-features/tabs",title:"Tabs",description:"Using tabs inside Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-tabs.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/tabs",permalink:"/docs/markdown-features/tabs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},sidebar:"docs",previous:{title:"MDX and React",permalink:"/docs/markdown-features/react"},next:{title:"Code blocks",permalink:"/docs/markdown-features/code-blocks"}},b={},h=[{value:"Displaying a default tab",id:"displaying-a-default-tab",level:2},{value:"Syncing tab choices",id:"syncing-tab-choices",level:2},{value:"Customizing tabs",id:"customizing-tabs",level:2},{value:"Customizing tab headings",id:"customizing-tab-headings",level:3},{value:"Query string",id:"query-string",level:2}];function p(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",...(0,s.a)(),...e.components},{Details:n}=a;return n||function(e,a){throw new Error("Expected "+(a?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.header,{children:(0,t.jsx)(a.h1,{id:"tabs",children:"Tabs"})}),"\n","\n",(0,t.jsxs)(a.p,{children:["Docusaurus provides the ",(0,t.jsx)(a.code,{children:"<Tabs>"})," component that you can use in Markdown thanks to ",(0,t.jsx)(a.a,{href:"/docs/markdown-features/react",children:"MDX"}),":"]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" default>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana">\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsxs)(a.p,{children:["It is also possible to provide ",(0,t.jsx)(a.code,{children:"values"})," and ",(0,t.jsx)(a.code,{children:"defaultValue"})," props to ",(0,t.jsx)(a.code,{children:"Tabs"}),":"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:"<Tabs\n defaultValue=\"apple\"\n values={[\n {label: 'Apple', value: 'apple'},\n {label: 'Orange', value: 'orange'},\n {label: 'Banana', value: 'banana'},\n ]}>\n <TabItem value=\"apple\">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value=\"orange\">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value=\"banana\">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple",value:"apple"},{label:"Orange",value:"orange"},{label:"Banana",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsxs)("summary",{children:[(0,t.jsx)("code",{children:"Tabs"})," props take precedence over the ",(0,t.jsx)("code",{children:"TabItem"})," props:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs\n defaultValue="apple"\n values={[\n {label: \'Apple 1\', value: \'apple\'},\n {label: \'Orange 1\', value: \'orange\'},\n {label: \'Banana 1\', value: \'banana\'},\n ]}>\n <TabItem value="apple" label="Apple 2">\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange 2">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana 2" default>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple 1",value:"apple"},{label:"Orange 1",value:"orange"},{label:"Banana 1",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple 2",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange 2",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana 2",default:!0,children:"This is a banana \ud83c\udf4c"})]})})]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsx)(a.p,{children:"By default, all tabs are rendered eagerly during the build process, and search engines can index hidden tabs."}),(0,t.jsxs)(a.p,{children:["It is possible to only render the default tab with ",(0,t.jsx)(a.code,{children:"<Tabs lazy />"}),"."]})]}),"\n",(0,t.jsx)(a.h2,{id:"displaying-a-default-tab",children:"Displaying a default tab"}),"\n",(0,t.jsxs)(a.p,{children:["The first tab is displayed by default, and to override this behavior, you can specify a default tab by adding ",(0,t.jsx)(a.code,{children:"default"})," to one of the tab items. You can also set the ",(0,t.jsx)(a.code,{children:"defaultValue"})," prop of the ",(0,t.jsx)(a.code,{children:"Tabs"})," component to the label value of your choice. For example, in the example above, either setting ",(0,t.jsx)(a.code,{children:"default"})," for the ",(0,t.jsx)(a.code,{children:'value="apple"'})," tab or setting ",(0,t.jsx)(a.code,{children:'defaultValue="apple"'}),' for the tabs forces the "Apple" tab to be open by default.']}),"\n",(0,t.jsxs)(a.p,{children:["Docusaurus will throw an error if a ",(0,t.jsx)(a.code,{children:"defaultValue"})," is provided for the ",(0,t.jsx)(a.code,{children:"Tabs"})," but it refers to a non-existing value. If you want none of the tabs to be shown by default, use ",(0,t.jsx)(a.code,{children:"defaultValue={null}"}),"."]}),"\n",(0,t.jsx)(a.h2,{id:"syncing-tab-choices",children:"Syncing tab choices"}),"\n",(0,t.jsxs)(a.p,{children:["You may want choices of the same kind of tabs to sync with each other. For example, you might want to provide different instructions for users on Windows vs users on macOS, and you want to change all OS-specific instructions tabs in one click. To achieve that, you can give all related tabs the same ",(0,t.jsx)(a.code,{children:"groupId"})," prop. Note that doing this will persist the choice in ",(0,t.jsx)(a.code,{children:"localStorage"})," and all ",(0,t.jsx)(a.code,{children:"<Tab>"})," instances with the same ",(0,t.jsx)(a.code,{children:"groupId"})," will update automatically when the value of one of them is changed. Note that group IDs are globally namespaced."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + C to copy."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + C to copy."})]}),(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + V to paste."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + V to paste."})]})]}),"\n",(0,t.jsxs)(a.p,{children:["For all tab groups that have the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the possible values do not need to be the same. If one tab group is chosen a value that does not exist in another tab group with the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the tab group with the missing value won't change its tab. You can see that from the following example. Try to select Linux, and the above tab groups don't change."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">\n I am Windows.\n </TabItem>\n <TabItem value="mac" label="macOS">\n I am macOS.\n </TabItem>\n <TabItem value="linux" label="Linux">\n I am Linux.\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"I am Windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"I am macOS."}),(0,t.jsx)(i.Z,{value:"linux",label:"Linux",children:"I am Linux."})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsx)(a.p,{children:"Tab choices with different group IDs will not interfere with each other:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Windows in windows.</TabItem>\n <TabItem value="mac" label="macOS">macOS is macOS.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="non-mac-operating-systems">\n <TabItem value="win" label="Windows">Windows is windows.</TabItem>\n <TabItem value="unix" label="Unix">Unix is unix.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows in windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"macOS is macOS."})]}),(0,t.jsxs)(l.Z,{groupId:"non-mac-operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows is windows."}),(0,t.jsx)(i.Z,{value:"unix",label:"Unix",children:"Unix is unix."})]})]}),"\n",(0,t.jsx)(a.h2,{id:"customizing-tabs",children:"Customizing tabs"}),"\n",(0,t.jsxs)(a.p,{children:["You might want to customize the appearance of a certain set of tabs. You can pass the string in ",(0,t.jsx)(a.code,{children:"className"})," prop, and the specified CSS class will be added to the ",(0,t.jsx)(a.code,{children:"Tabs"})," component:"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs className="unique-tabs">\n <TabItem value="Apple">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value="Orange">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value="Banana">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{className:"unique-tabs",children:[(0,t.jsx)(i.Z,{value:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.h3,{id:"customizing-tab-headings",children:"Customizing tab headings"}),"\n",(0,t.jsxs)(a.p,{children:["You can also customize each tab heading independently by using the ",(0,t.jsx)(a.code,{children:"attributes"})," field. The extra props can be passed to the headings either through the ",(0,t.jsx)(a.code,{children:"values"})," prop in ",(0,t.jsx)(a.code,{children:"Tabs"}),", or props of each ",(0,t.jsx)(a.code,{children:"TabItem"}),"\u2014in the same way as you declare ",(0,t.jsx)(a.code,{children:"label"}),"."]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",metastring:'title="some-doc.mdx"',children:'import styles from \'./styles.module.css\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" attributes={{className: styles.red}}>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange" attributes={{className: styles.orange}}>\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana" attributes={{className: styles.yellow}}>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:".red {\n color: red;\n}\n.red[aria-selected='true'] {\n border-bottom-color: red;\n}\n\n.orange {\n color: orange;\n}\n.orange[aria-selected='true'] {\n border-bottom-color: orange;\n}\n\n.yellow {\n color: yellow;\n}\n.yellow[aria-selected='true'] {\n border-bottom-color: yellow;\n}\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",attributes:{className:o.red},children:(0,t.jsx)(a.p,{children:"This is an apple \ud83c\udf4e"})}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",attributes:{className:o.orange},children:(0,t.jsx)(a.p,{children:"This is an orange \ud83c\udf4a"})}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",attributes:{className:o.yellow},children:(0,t.jsx)(a.p,{children:"This is a banana \ud83c\udf4c"})})]})}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"className"})," would be merged with other default class names. You may also use a custom ",(0,t.jsx)(a.code,{children:"data-value"})," field (",(0,t.jsx)(a.code,{children:"{'data-value': 'apple'}"}),") paired with CSS attribute selectors:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:"li[role='tab'][data-value='apple'] {\n color: red;\n}\n"})})]}),"\n",(0,t.jsx)(a.h2,{id:"query-string",children:"Query string"}),"\n",(0,t.jsx)(a.p,{children:"It is possible to persist the selected tab into the url search parameters. This enables you to share a link to a page which pre-selects the tab - linking from your Android app to documentation with the Android tabs pre-selected. This feature does not provide an anchor link - the browser will not scroll to the tab."}),"\n",(0,t.jsxs)(a.p,{children:["Use the ",(0,t.jsx)(a.code,{children:"queryString"})," prop to enable this feature and define the search param name to use."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs queryString="current-os">\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),"\n",(0,t.jsxs)(a.p,{children:["As soon as a tab is clicked, a search parameter is added at the end of the url: ",(0,t.jsx)(a.code,{children:"?current-os=android"})," or ",(0,t.jsx)(a.code,{children:"?current-os=ios"}),"."]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"queryString"})," can be used together with ",(0,t.jsx)(a.code,{children:"groupId"}),"."]}),(0,t.jsxs)(a.p,{children:["For convenience, when the ",(0,t.jsx)(a.code,{children:"queryString"})," prop is ",(0,t.jsx)(a.code,{children:"true"}),", the ",(0,t.jsx)(a.code,{children:"groupId"})," value will be used as a fallback."]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:!0,groupId:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),(0,t.jsxs)(a.p,{children:["When the page loads, the tab query string choice will be restored in priority over the ",(0,t.jsx)(a.code,{children:"groupId"})," choice (using ",(0,t.jsx)(a.code,{children:"localStorage"}),")."]})]})]})}function m(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,a,n)=>{n.d(a,{Z:()=>i,a:()=>l});var t=n(27378);const s={},r=t.createContext(s);function l(e){const a=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/209ff87f.cf4d83d3.js b/assets/js/209ff87f.cf4d83d3.js deleted file mode 100644 index afe9d279f6f8..000000000000 --- a/assets/js/209ff87f.cf4d83d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94152],{61132:(e,a,n)=>{n.d(a,{Z:()=>l});var t=n(24246),s=(n(27378),n(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:a,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,n),hidden:a,children:e})}},97555:(e,a,n)=>{n.d(a,{Z:()=>Z});var t=n(24246),s=n(27378),r=n(40624),l=n(75527),i=n(3620),o=n(44479),c=n(62821),d=n(52196),u=n(53589);function b(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function h(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function p(e){var a,n;return null!==(n=null===(a=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===a?void 0:a.filter(Boolean))&&void 0!==n?n:[]}function m(e){const{values:a,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=a?a:function(e){return p(e).map((({props:{value:e,label:a,attributes:n,default:t}})=>({value:e,label:a,attributes:n,default:t})))}(n);return function(e){const a=(0,d.lx)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[a,n])}function g({value:e,tabValues:a}){return a.some((a=>a.value===e))}function j({queryString:e=!1,groupId:a}){const n=(0,i.k6)(),t=function({queryString:e=!1,groupId:a}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:e,groupId:a}),r=(0,c._X)(t),l=(0,s.useCallback)((e=>{if(!t)return;const a=new URLSearchParams(n.location.search);a.set(t,e),n.replace(h(function(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){b(e,a,n[a])}))}return e}({},n.location),{search:a.toString()}))}),[t,n]);return[r,l]}function x(e){const{defaultValue:a,queryString:n=!1,groupId:t}=e,r=m(e),[l,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:a}){if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=a.find((e=>e.default)))&&void 0!==n?n:a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:a,tabValues:r}))),[c,d]=j({queryString:n,groupId:t}),[b,h]=function({groupId:e}){const a=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,u.Nk)(a);return[n,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:t}),p=(()=>{const e=null!=c?c:b;return g({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,r]),tabValues:r}}var f=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function y(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){w(e,a,n[a])}))}return e}function T(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function I({className:e,block:a,selectedValue:n,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const a=e.currentTarget,t=o.indexOf(a),r=i[t].value;r!==n&&(c(a),s(r))},u=e=>{let a=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var n;a=null!==(n=o[t])&&void 0!==n?n:o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;var t;a=null!==(t=o[n])&&void 0!==t?t:o[o.length-1];break}}null==a||a.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},e),children:i.map((({value:e,label:a,attributes:s})=>(0,t.jsx)("li",T(y({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},s),{className:(0,r.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=a?a:e}),e)))})}function O({lazy:e,children:a,selectedValue:n}){const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:l.map(((e,a)=>(0,s.cloneElement)(e,{key:a,hidden:e.props.value!==n})))})}function S(e){const a=x(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,t.jsx)(I,y({},a,e)),(0,t.jsx)(O,y({},a,e))]})}function Z(e){const a=(0,f.Z)();return(0,t.jsx)(S,T(y({},e),{children:p(e.children)}),String(a))}},6698:(e,a,n)=>{n.d(a,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){l(e,a,n[a])}))}return e}function o(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function c({children:e,minHeight:a,url:n="http://localhost:3000",style:l,bodyStyle:c}){return(0,t.jsxs)("div",{className:r.browserWindow,style:o(i({},l),{minHeight:a}),children:[(0,t.jsxs)("div",{className:r.browserWindowHeader,children:[(0,t.jsxs)("div",{className:r.buttons,children:[(0,t.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(r.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar})]})})]}),(0,t.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},46379:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>b,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var t=n(24246),s=n(71670),r=n(6698),l=n(97555),i=n(61132);const o={red:"red_FE5X",orange:"orange_kp8w",yellow:"yellow_uGry"},c={id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},d="Tabs",u={id:"guides/markdown-features/tabs",title:"Tabs",description:"Using tabs inside Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-tabs.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/tabs",permalink:"/docs/markdown-features/tabs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},sidebar:"docs",previous:{title:"MDX and React",permalink:"/docs/markdown-features/react"},next:{title:"Code blocks",permalink:"/docs/markdown-features/code-blocks"}},b={},h=[{value:"Displaying a default tab",id:"displaying-a-default-tab",level:2},{value:"Syncing tab choices",id:"syncing-tab-choices",level:2},{value:"Customizing tabs",id:"customizing-tabs",level:2},{value:"Customizing tab headings",id:"customizing-tab-headings",level:3},{value:"Query string",id:"query-string",level:2}];function p(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",...(0,s.a)(),...e.components},{Details:n}=a;return n||function(e,a){throw new Error("Expected "+(a?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.header,{children:(0,t.jsx)(a.h1,{id:"tabs",children:"Tabs"})}),"\n","\n",(0,t.jsxs)(a.p,{children:["Docusaurus provides the ",(0,t.jsx)(a.code,{children:"<Tabs>"})," component that you can use in Markdown thanks to ",(0,t.jsx)(a.a,{href:"/docs/markdown-features/react",children:"MDX"}),":"]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" default>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana">\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsxs)(a.p,{children:["It is also possible to provide ",(0,t.jsx)(a.code,{children:"values"})," and ",(0,t.jsx)(a.code,{children:"defaultValue"})," props to ",(0,t.jsx)(a.code,{children:"Tabs"}),":"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:"<Tabs\n defaultValue=\"apple\"\n values={[\n {label: 'Apple', value: 'apple'},\n {label: 'Orange', value: 'orange'},\n {label: 'Banana', value: 'banana'},\n ]}>\n <TabItem value=\"apple\">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value=\"orange\">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value=\"banana\">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple",value:"apple"},{label:"Orange",value:"orange"},{label:"Banana",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsxs)("summary",{children:[(0,t.jsx)("code",{children:"Tabs"})," props take precedence over the ",(0,t.jsx)("code",{children:"TabItem"})," props:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs\n defaultValue="apple"\n values={[\n {label: \'Apple 1\', value: \'apple\'},\n {label: \'Orange 1\', value: \'orange\'},\n {label: \'Banana 1\', value: \'banana\'},\n ]}>\n <TabItem value="apple" label="Apple 2">\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange 2">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana 2" default>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple 1",value:"apple"},{label:"Orange 1",value:"orange"},{label:"Banana 1",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple 2",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange 2",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana 2",default:!0,children:"This is a banana \ud83c\udf4c"})]})})]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsx)(a.p,{children:"By default, all tabs are rendered eagerly during the build process, and search engines can index hidden tabs."}),(0,t.jsxs)(a.p,{children:["It is possible to only render the default tab with ",(0,t.jsx)(a.code,{children:"<Tabs lazy />"}),"."]})]}),"\n",(0,t.jsx)(a.h2,{id:"displaying-a-default-tab",children:"Displaying a default tab"}),"\n",(0,t.jsxs)(a.p,{children:["The first tab is displayed by default, and to override this behavior, you can specify a default tab by adding ",(0,t.jsx)(a.code,{children:"default"})," to one of the tab items. You can also set the ",(0,t.jsx)(a.code,{children:"defaultValue"})," prop of the ",(0,t.jsx)(a.code,{children:"Tabs"})," component to the label value of your choice. For example, in the example above, either setting ",(0,t.jsx)(a.code,{children:"default"})," for the ",(0,t.jsx)(a.code,{children:'value="apple"'})," tab or setting ",(0,t.jsx)(a.code,{children:'defaultValue="apple"'}),' for the tabs forces the "Apple" tab to be open by default.']}),"\n",(0,t.jsxs)(a.p,{children:["Docusaurus will throw an error if a ",(0,t.jsx)(a.code,{children:"defaultValue"})," is provided for the ",(0,t.jsx)(a.code,{children:"Tabs"})," but it refers to a non-existing value. If you want none of the tabs to be shown by default, use ",(0,t.jsx)(a.code,{children:"defaultValue={null}"}),"."]}),"\n",(0,t.jsx)(a.h2,{id:"syncing-tab-choices",children:"Syncing tab choices"}),"\n",(0,t.jsxs)(a.p,{children:["You may want choices of the same kind of tabs to sync with each other. For example, you might want to provide different instructions for users on Windows vs users on macOS, and you want to change all OS-specific instructions tabs in one click. To achieve that, you can give all related tabs the same ",(0,t.jsx)(a.code,{children:"groupId"})," prop. Note that doing this will persist the choice in ",(0,t.jsx)(a.code,{children:"localStorage"})," and all ",(0,t.jsx)(a.code,{children:"<Tab>"})," instances with the same ",(0,t.jsx)(a.code,{children:"groupId"})," will update automatically when the value of one of them is changed. Note that group IDs are globally namespaced."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + C to copy."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + C to copy."})]}),(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + V to paste."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + V to paste."})]})]}),"\n",(0,t.jsxs)(a.p,{children:["For all tab groups that have the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the possible values do not need to be the same. If one tab group is chosen a value that does not exist in another tab group with the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the tab group with the missing value won't change its tab. You can see that from the following example. Try to select Linux, and the above tab groups don't change."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">\n I am Windows.\n </TabItem>\n <TabItem value="mac" label="macOS">\n I am macOS.\n </TabItem>\n <TabItem value="linux" label="Linux">\n I am Linux.\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"I am Windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"I am macOS."}),(0,t.jsx)(i.Z,{value:"linux",label:"Linux",children:"I am Linux."})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsx)(a.p,{children:"Tab choices with different group IDs will not interfere with each other:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Windows in windows.</TabItem>\n <TabItem value="mac" label="macOS">macOS is macOS.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="non-mac-operating-systems">\n <TabItem value="win" label="Windows">Windows is windows.</TabItem>\n <TabItem value="unix" label="Unix">Unix is unix.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows in windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"macOS is macOS."})]}),(0,t.jsxs)(l.Z,{groupId:"non-mac-operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows is windows."}),(0,t.jsx)(i.Z,{value:"unix",label:"Unix",children:"Unix is unix."})]})]}),"\n",(0,t.jsx)(a.h2,{id:"customizing-tabs",children:"Customizing tabs"}),"\n",(0,t.jsxs)(a.p,{children:["You might want to customize the appearance of a certain set of tabs. You can pass the string in ",(0,t.jsx)(a.code,{children:"className"})," prop, and the specified CSS class will be added to the ",(0,t.jsx)(a.code,{children:"Tabs"})," component:"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs className="unique-tabs">\n <TabItem value="Apple">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value="Orange">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value="Banana">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{className:"unique-tabs",children:[(0,t.jsx)(i.Z,{value:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.h3,{id:"customizing-tab-headings",children:"Customizing tab headings"}),"\n",(0,t.jsxs)(a.p,{children:["You can also customize each tab heading independently by using the ",(0,t.jsx)(a.code,{children:"attributes"})," field. The extra props can be passed to the headings either through the ",(0,t.jsx)(a.code,{children:"values"})," prop in ",(0,t.jsx)(a.code,{children:"Tabs"}),", or props of each ",(0,t.jsx)(a.code,{children:"TabItem"}),"\u2014in the same way as you declare ",(0,t.jsx)(a.code,{children:"label"}),"."]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",metastring:'title="some-doc.mdx"',children:'import styles from \'./styles.module.css\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" attributes={{className: styles.red}}>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange" attributes={{className: styles.orange}}>\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana" attributes={{className: styles.yellow}}>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:".red {\n color: red;\n}\n.red[aria-selected='true'] {\n border-bottom-color: red;\n}\n\n.orange {\n color: orange;\n}\n.orange[aria-selected='true'] {\n border-bottom-color: orange;\n}\n\n.yellow {\n color: yellow;\n}\n.yellow[aria-selected='true'] {\n border-bottom-color: yellow;\n}\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",attributes:{className:o.red},children:(0,t.jsx)(a.p,{children:"This is an apple \ud83c\udf4e"})}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",attributes:{className:o.orange},children:(0,t.jsx)(a.p,{children:"This is an orange \ud83c\udf4a"})}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",attributes:{className:o.yellow},children:(0,t.jsx)(a.p,{children:"This is a banana \ud83c\udf4c"})})]})}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"className"})," would be merged with other default class names. You may also use a custom ",(0,t.jsx)(a.code,{children:"data-value"})," field (",(0,t.jsx)(a.code,{children:"{'data-value': 'apple'}"}),") paired with CSS attribute selectors:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:"li[role='tab'][data-value='apple'] {\n color: red;\n}\n"})})]}),"\n",(0,t.jsx)(a.h2,{id:"query-string",children:"Query string"}),"\n",(0,t.jsx)(a.p,{children:"It is possible to persist the selected tab into the url search parameters. This enables you to share a link to a page which pre-selects the tab - linking from your Android app to documentation with the Android tabs pre-selected. This feature does not provide an anchor link - the browser will not scroll to the tab."}),"\n",(0,t.jsxs)(a.p,{children:["Use the ",(0,t.jsx)(a.code,{children:"queryString"})," prop to enable this feature and define the search param name to use."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs queryString="current-os">\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),"\n",(0,t.jsxs)(a.p,{children:["As soon as a tab is clicked, a search parameter is added at the end of the url: ",(0,t.jsx)(a.code,{children:"?current-os=android"})," or ",(0,t.jsx)(a.code,{children:"?current-os=ios"}),"."]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"queryString"})," can be used together with ",(0,t.jsx)(a.code,{children:"groupId"}),"."]}),(0,t.jsxs)(a.p,{children:["For convenience, when the ",(0,t.jsx)(a.code,{children:"queryString"})," prop is ",(0,t.jsx)(a.code,{children:"true"}),", the ",(0,t.jsx)(a.code,{children:"groupId"})," value will be used as a fallback."]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:!0,groupId:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),(0,t.jsxs)(a.p,{children:["When the page loads, the tab query string choice will be restored in priority over the ",(0,t.jsx)(a.code,{children:"groupId"})," choice (using ",(0,t.jsx)(a.code,{children:"localStorage"}),")."]})]})]})}function m(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,a,n)=>{n.d(a,{Z:()=>i,a:()=>l});var t=n(27378);const s={},r=t.createContext(s);function l(e){const a=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/228a014d.00a74b9f.js b/assets/js/228a014d.f00d9b1b.js similarity index 51% rename from assets/js/228a014d.00a74b9f.js rename to assets/js/228a014d.f00d9b1b.js index 27e997f5b00f..5d92ab3accc8 100644 --- a/assets/js/228a014d.00a74b9f.js +++ b/assets/js/228a014d.f00d9b1b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48375],{61132:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),i=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function a({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),i=n(27378),s=n(40624),a=n(75527),o=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function b({queryString:e=!1,groupId:t}){const n=(0,o.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,c._X)(r),a=(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,a]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[a,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,u]=b({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),p(e)}),[u,p,s]),tabValues:s}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:i,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),s=o[r].value;s!==n&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:o.map((({value:e,label:t,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},i),{className:(0,s.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:n}){const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function T(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(P,w({},t,e))]})}function D(e){const t=(0,x.Z)();return(0,r.jsx)(T,O(w({},e),{children:f(e.children)}),String(t))}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),i=n(27378),s=n(80474),a=n(3620);const o={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const o=function(e){let t=e;for(;(0,i.isValidElement)(t);)[t]=i.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${o}`:o,c=`#${l}`,u=(0,a.k6)();return(0,s.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===c?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(c)},onKeyDown:e=>{"Enter"===e.key&&u.push(c)},children:t.props.children})}const c=i.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,s]=i.Children.toArray(e.props.children),a=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=a.current)||void 0===e||e.focus()}),[a]);const l=i.Children.map(s.props.children,(e=>(0,r.jsx)(c,{name:t,ref:a,children:e})));return(0,r.jsxs)("table",{className:o.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},4395:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=n(24246),i=n(71670),s=n(97555),a=n(61132),o=n(52605);const l={sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},c="\ud83d\udce6 plugin-client-redirects",u={id:"api/plugins/plugin-client-redirects",title:"\ud83d\udce6 plugin-client-redirects",description:"Docusaurus Plugin to generate client-side redirects.",source:"@site/docs/api/plugins/plugin-client-redirects.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"},next:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"}},d={},h=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>RedirectRule</code>",id:"RedirectRule",level:4},{value:"<code>CreateRedirectsFn</code>",id:"CreateRedirectsFn",level:4},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-client-redirects",children:"\ud83d\udce6 plugin-client-redirects"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["Docusaurus Plugin to generate ",(0,r.jsx)(t.strong,{children:"client-side redirects"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"This plugin will write additional HTML pages to your static site that redirect the user to your existing Docusaurus pages with JavaScript."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsx)(t.p,{children:"It is better to use server-side redirects whenever possible."}),(0,r.jsx)(t.p,{children:"Before using this plugin, you should look if your hosting provider doesn't offer this feature."})]}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(a.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-client-redirects\n"})})})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Option"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"fromExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be removed from the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"toExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be appended to the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"redirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(t.a,{href:"#RedirectRule",children:"RedirectRule"}),"[]"]})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The list of redirect rules."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"createRedirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(t.a,{href:"#CreateRedirectsFn",children:"CreateRedirectsFn"})})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"undefined"})}),(0,r.jsx)(t.td,{children:"A callback to create a redirect rule. Docusaurus query this callback against every path it has created, and use its return value to output more paths."})]})]})]})}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["This plugin will also read the ",(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#onDuplicateRoutes",children:(0,r.jsx)(t.code,{children:"siteConfig.onDuplicateRoutes"})})," config to adjust its logging level when multiple files will be emitted to the same location."]})}),"\n",(0,r.jsx)(t.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(t.h4,{id:"RedirectRule",children:(0,r.jsx)(t.code,{children:"RedirectRule"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"type RedirectRule = {\n to: string;\n from: string | string[];\n};\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.p,{children:['The idea of "from" and "to" is central in this plugin. "From" means a path that you want to ',(0,r.jsx)(t.em,{children:"create"}),', i.e. an extra HTML file that will be written; "to" means a path to want to redirect ',(0,r.jsx)(t.em,{children:"to"}),", usually a route that Docusaurus already knows about."]}),(0,r.jsx)(t.p,{children:'This is why you can have multiple "from" for the same "to": we will create multiple HTML files that all redirect to the same destination. On the other hand, one "from" can never have more than one "to": the written HTML file needs to have a determinate destination.'})]}),"\n",(0,r.jsx)(t.h4,{id:"CreateRedirectsFn",children:(0,r.jsx)(t.code,{children:"CreateRedirectsFn"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:'// The parameter `path` is a route that Docusaurus has already created. It can\n// be seen as the "to", and your return value is the "from". Returning a falsy\n// value will not create any redirect pages for this particular path.\ntype CreateRedirectsFn = (path: string) => string[] | string | null | undefined;\n'})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"Here's an example configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-client-redirects',\n // highlight-start\n {\n fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage\n toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip (if latter exists)\n redirects: [\n // /docs/oldDoc -> /docs/newDoc\n {\n to: '/docs/newDoc',\n from: '/docs/oldDoc',\n },\n // Redirect from multiple old paths to the new path\n {\n to: '/docs/newDoc2',\n from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],\n },\n ],\n createRedirects(existingPath) {\n if (existingPath.includes('/community')) {\n // Redirect from /docs/team/X to /community/X and /docs/support/X to /community/X\n return [\n existingPath.replace('/community', '/docs/team'),\n existingPath.replace('/community', '/docs/support'),\n ];\n }\n return undefined; // Return a falsy value: no redirect created\n },\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function f(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var r=n(27378);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48375],{61132:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),i=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function a({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),i=n(27378),s=n(40624),a=n(75527),o=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function b({queryString:e=!1,groupId:t}){const n=(0,o.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,c._X)(r),a=(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,a]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[a,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,u]=b({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),p(e)}),[u,p,s]),tabValues:s}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:i,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),s=o[r].value;s!==n&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:o.map((({value:e,label:t,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},i),{className:(0,s.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:n}){const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function T(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(P,w({},t,e))]})}function D(e){const t=(0,x.Z)();return(0,r.jsx)(T,O(w({},e),{children:f(e.children)}),String(t))}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),i=n(27378),s=n(80474),a=n(3620);const o={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const o=function(e){let t=e;for(;(0,i.isValidElement)(t);)[t]=i.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${o}`:o,c=`#${l}`,u=(0,a.k6)();return(0,s.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===c?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(c)},onKeyDown:e=>{"Enter"===e.key&&u.push(c)},children:t.props.children})}const c=i.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,s]=i.Children.toArray(e.props.children),a=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=a.current)||void 0===e||e.focus()}),[a]);const l=i.Children.map(s.props.children,(e=>(0,r.jsx)(c,{name:t,ref:a,children:e})));return(0,r.jsxs)("table",{className:o.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},4395:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=n(24246),i=n(71670),s=n(97555),a=n(61132),o=n(52605);const l={sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},c="\ud83d\udce6 plugin-client-redirects",u={id:"api/plugins/plugin-client-redirects",title:"\ud83d\udce6 plugin-client-redirects",description:"Docusaurus Plugin to generate client-side redirects.",source:"@site/docs/api/plugins/plugin-client-redirects.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"},next:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"}},d={},h=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>RedirectRule</code>",id:"RedirectRule",level:4},{value:"<code>CreateRedirectsFn</code>",id:"CreateRedirectsFn",level:4},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-client-redirects",children:"\ud83d\udce6 plugin-client-redirects"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["Docusaurus Plugin to generate ",(0,r.jsx)(t.strong,{children:"client-side redirects"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"This plugin will write additional HTML pages to your static site that redirect the user to your existing Docusaurus pages with JavaScript."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsx)(t.p,{children:"It is better to use server-side redirects whenever possible."}),(0,r.jsx)(t.p,{children:"Before using this plugin, you should look if your hosting provider doesn't offer this feature."})]}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(a.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-client-redirects\n"})})})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Option"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"fromExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be removed from the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"toExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be appended to the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"redirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(t.a,{href:"#RedirectRule",children:"RedirectRule"}),"[]"]})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The list of redirect rules."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"createRedirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(t.a,{href:"#CreateRedirectsFn",children:"CreateRedirectsFn"})})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"undefined"})}),(0,r.jsx)(t.td,{children:"A callback to create a redirect rule. Docusaurus query this callback against every path it has created, and use its return value to output more paths."})]})]})]})}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["This plugin will also read the ",(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#onDuplicateRoutes",children:(0,r.jsx)(t.code,{children:"siteConfig.onDuplicateRoutes"})})," config to adjust its logging level when multiple files will be emitted to the same location."]})}),"\n",(0,r.jsx)(t.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(t.h4,{id:"RedirectRule",children:(0,r.jsx)(t.code,{children:"RedirectRule"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"type RedirectRule = {\n to: string;\n from: string | string[];\n};\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.p,{children:['The idea of "from" and "to" is central in this plugin. "From" means a path that you want to ',(0,r.jsx)(t.em,{children:"create"}),', i.e. an extra HTML file that will be written; "to" means a path to want to redirect ',(0,r.jsx)(t.em,{children:"to"}),", usually a route that Docusaurus already knows about."]}),(0,r.jsx)(t.p,{children:'This is why you can have multiple "from" for the same "to": we will create multiple HTML files that all redirect to the same destination. On the other hand, one "from" can never have more than one "to": the written HTML file needs to have a determinate destination.'})]}),"\n",(0,r.jsx)(t.h4,{id:"CreateRedirectsFn",children:(0,r.jsx)(t.code,{children:"CreateRedirectsFn"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:'// The parameter `path` is a route that Docusaurus has already created. It can\n// be seen as the "to", and your return value is the "from". Returning a falsy\n// value will not create any redirect pages for this particular path.\ntype CreateRedirectsFn = (path: string) => string[] | string | null | undefined;\n'})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"Here's an example configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-client-redirects',\n // highlight-start\n {\n fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage\n toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip (if latter exists)\n redirects: [\n // /docs/oldDoc -> /docs/newDoc\n {\n to: '/docs/newDoc',\n from: '/docs/oldDoc',\n },\n // Redirect from multiple old paths to the new path\n {\n to: '/docs/newDoc2',\n from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],\n },\n ],\n createRedirects(existingPath) {\n if (existingPath.includes('/community')) {\n // Redirect from /docs/team/X to /community/X and /docs/support/X to /community/X\n return [\n existingPath.replace('/community', '/docs/team'),\n existingPath.replace('/community', '/docs/support'),\n ];\n }\n return undefined; // Return a falsy value: no redirect created\n },\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function f(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var r=n(27378);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2451b334.ab2b4f49.js b/assets/js/2451b334.ab2b4f49.js new file mode 100644 index 000000000000..2d7881af2033 --- /dev/null +++ b/assets/js/2451b334.ab2b4f49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60162],{90632:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},81736:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},66778:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var n=s(24246),a=s(71670);const r={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},c={image:s(90632).Z,authorsImageUrls:[void 0]},l=[];function u(e){const t={a:"a",img:"img",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["We are happy to announce ",(0,n.jsx)(t.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(t.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(t.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Docusaurus blog post social card",src:s(81736).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>o});var n=s(27378);const a={},r=n.createContext(a);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2451b334.e8abb5e1.js b/assets/js/2451b334.e8abb5e1.js deleted file mode 100644 index 997ab756bd06..000000000000 --- a/assets/js/2451b334.e8abb5e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60162],{90632:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},81736:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},66778:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var n=t(24246),a=t(71670);const r={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},c={image:t(90632).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(81736).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var n=t(27378);const a={},r=n.createContext(a);function o(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24dd9243.3194cfc3.js b/assets/js/24dd9243.3194cfc3.js deleted file mode 100644 index 6ce14ce1f249..000000000000 --- a/assets/js/24dd9243.3194cfc3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88786],{61802:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png"},3560:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>o,toc:()=>l});var a=s(24246),r=s(71670);const n={title:"DocSearch migration",authors:["shortcuts","slorber"],tags:["search"],image:"./img/social-card.png"},i=void 0,o={permalink:"/blog/2021/11/21/algolia-docsearch-migration",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx",source:"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx",title:"DocSearch migration",description:"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.",date:"2021-11-21T00:00:00.000Z",tags:[{inline:!1,label:"Search",permalink:"/blog/tags/search"}],readingTime:2.96,hasTruncateMarker:!0,authors:[{name:"Cl\xe9ment Vannicatte",title:"Software Engineer @ Algolia",url:"https://github.com/shortcuts",socials:{x:"https://x.com/sh0rtcts",github:"https://github.com/shortcuts"},imageURL:"https://github.com/shortcuts.png",key:"shortcuts",page:null},{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"DocSearch migration",authors:["shortcuts","slorber"],tags:["search"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"},nextItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"}},c={image:s(61802).Z,authorsImageUrls:[void 0,void 0]},l=[];function u(e){const t={a:"a",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://docsearch.algolia.com/",children:"DocSearch"})," is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials."]}),"\n",(0,a.jsxs)(t.p,{children:["Docusaurus site owners should upgrade their configuration with their new credentials ",(0,a.jsx)(t.strong,{children:"by February 1, 2022"}),", existing search indexes will be frozen and become read-only after this date."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>i});var a=s(27378);const r={},n=a.createContext(r);function i(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24dd9243.761ce3a1.js b/assets/js/24dd9243.761ce3a1.js new file mode 100644 index 000000000000..cc8977e21ceb --- /dev/null +++ b/assets/js/24dd9243.761ce3a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88786],{61802:(e,t,a)=>{a.d(t,{Z:()=>s});const s=a.p+"assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png"},3560:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var s=a(24246),r=a(71670);const n={title:"DocSearch migration",authors:["shortcuts","slorber"],tags:["search"],image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/2021/11/21/algolia-docsearch-migration",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx",source:"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx",title:"DocSearch migration",description:"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.",date:"2021-11-21T00:00:00.000Z",tags:[{inline:!1,label:"Search",permalink:"/blog/tags/search"}],readingTime:2.96,hasTruncateMarker:!0,authors:[{name:"Cl\xe9ment Vannicatte",title:"Software Engineer @ Algolia",url:"https://github.com/shortcuts",socials:{x:"https://x.com/sh0rtcts",github:"https://github.com/shortcuts"},imageURL:"https://github.com/shortcuts.png",key:"shortcuts",page:null},{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"DocSearch migration",authors:["shortcuts","slorber"],tags:["search"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"},nextItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"}},c={image:a(61802).Z,authorsImageUrls:[void 0,void 0]},l=[];function u(e){const t={a:"a",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://docsearch.algolia.com/",children:"DocSearch"})," is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials."]}),"\n",(0,s.jsxs)(t.p,{children:["Docusaurus site owners should upgrade their configuration with their new credentials ",(0,s.jsx)(t.strong,{children:"by February 1, 2022"}),", existing search indexes will be frozen and become read-only after this date."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>o});var s=a(27378);const r={},n=s.createContext(r);function o(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/26af6b06.44d508ba.js b/assets/js/26af6b06.44d508ba.js deleted file mode 100644 index 8bedcc026365..000000000000 --- a/assets/js/26af6b06.44d508ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63545],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),a=t(3620),c=t(44479),l=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function f(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return f(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,l._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=m(e),[i,a]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[l,d]=g({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:o})?e:null})();(0,c.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function S({className:e,block:n,selectedValue:t,selectValue:s,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=c.indexOf(n),o=a[r].value;o!==t&&(l(n),s(o))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[c.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>c.push(e),onKeyDown:u,onClick:d},s),{className:(0,o.Z)("tabs__item",x.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function T(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(S,v({},n,e)),(0,r.jsx)(k,v({},n,e))]})}function E(e){const n=(0,w.Z)();return(0,r.jsx)(T,O(v({},e),{children:f(e.children)}),String(n))}},43057:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=t(24246),s=t(71670),o=t(97555),i=t(61132);const a={sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},c="Static site generation (SSG)",l={id:"advanced/ssg",title:"Static site generation (SSG)",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.",source:"@site/docs/advanced/ssg.mdx",sourceDirName:"advanced",slug:"/advanced/ssg",permalink:"/docs/advanced/ssg",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},sidebar:"docs",previous:{title:"Routing",permalink:"/docs/advanced/routing"},next:{title:"Client architecture",permalink:"/docs/advanced/client"}},d={},u=[{value:"Understanding SSR",id:"understanding-ssr",level:2},{value:"Escape hatches",id:"escape-hatches",level:2},{value:"<code><BrowserOnly></code>",id:"browseronly",level:3},{value:"<code>useIsBrowser</code>",id:"useisbrowser",level:3},{value:"<code>useEffect</code>",id:"useeffect",level:3},{value:"<code>ExecutionEnvironment</code>",id:"executionenvironment",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"static-site-generation-ssg",children:"Static site generation (SSG)"})}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"/docs/advanced/architecture",children:"architecture"}),", we mentioned that the theme is run in Webpack. But beware: that doesn't mean it always has access to browser globals! The theme is built twice:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"server-side rendering"}),", the theme is compiled in a sandbox called ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/react-dom-server.html",children:"React DOM Server"}),'. You can see this as a "headless browser", where there is no ',(0,r.jsx)(n.code,{children:"window"})," or ",(0,r.jsx)(n.code,{children:"document"}),", only React. SSR produces static HTML pages."]}),"\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"client-side rendering"}),", the theme is compiled to JavaScript that gets eventually executed in the browser, so it has access to browser variables."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"SSR or SSG?",type:"info",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Server-side rendering"})," and ",(0,r.jsx)(n.em,{children:"static site generation"})," can be different concepts, but we use them interchangeably."]}),(0,r.jsxs)(n.p,{children:["Strictly speaking, Docusaurus is a static site generator, because there's no server-side runtime\u2014we statically render to HTML files that are deployed on a CDN, instead of dynamically pre-rendering on each request. This differs from the working model of ",(0,r.jsx)(n.a,{href:"https://nextjs.org/",children:"Next.js"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["Therefore, while you probably know not to access Node globals like ",(0,r.jsx)(n.code,{children:"process"})," (",(0,r.jsx)(n.a,{href:"#node-env",children:"or can we?"}),") or the ",(0,r.jsx)(n.code,{children:"'fs'"})," module, you can't freely access browser globals either."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function WhereAmI() {\n return <span>{window.location.href}</span>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This looks like idiomatic React, but if you run ",(0,r.jsx)(n.code,{children:"docusaurus build"}),", you will get an error:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"ReferenceError: window is not defined\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This is because during server-side rendering, the Docusaurus app isn't actually run in browser, and it doesn't know what ",(0,r.jsx)(n.code,{children:"window"})," is."]}),"\n",(0,r.jsxs)(t,{id:"node-env",children:[(0,r.jsxs)("summary",{children:["What about ",(0,r.jsx)("code",{children:"process.env.NODE_ENV"}),"?"]}),(0,r.jsxs)(n.p,{children:['One exception to the "no Node globals" rule is ',(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"}),". In fact, you can use it in React, because Webpack injects this variable as a global:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function expensiveComp() {\n if (process.env.NODE_ENV === 'development') {\n return <>This component is not shown in development</>;\n }\n const res = someExpensiveOperationThatLastsALongTime();\n return <>{res}</>;\n}\n"})}),(0,r.jsxs)(n.p,{children:["During Webpack build, the ",(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"})," will be replaced with the value, either ",(0,r.jsx)(n.code,{children:"'development'"})," or ",(0,r.jsx)(n.code,{children:"'production'"}),". You will then get different build results after dead code elimination:"]}),(0,r.jsxs)(o.Z,{children:[(0,r.jsx)(i.Z,{value:"Development",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n if ('development' === 'development') {\n+ return <>This component is not shown in development</>;\n }\n- const res = someExpensiveOperationThatLastsALongTime();\n- return <>{res}</>;\n}\n"})})}),(0,r.jsx)(i.Z,{value:"Production",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n- if ('production' === 'development') {\n- return <>This component is not shown in development</>;\n- }\n+ const res = someExpensiveOperationThatLastsALongTime();\n+ return <>{res}</>;\n}\n"})})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"understanding-ssr",children:"Understanding SSR"}),"\n",(0,r.jsx)(n.p,{children:"React is not just a dynamic UI runtime\u2014it's also a templating engine. Because Docusaurus sites mostly contain static contents, it should be able to work without any JavaScript (which React runs in), but only plain HTML/CSS. And that's what server-side rendering offers: statically rendering your React code into HTML, without any dynamic content. An HTML file has no concept of client state (it's purely markup), hence it shouldn't rely on browser APIs."}),"\n",(0,r.jsxs)(n.p,{children:["These HTML files are the first to arrive at the user's browser screen when a URL is visited (see ",(0,r.jsx)(n.a,{href:"/docs/advanced/routing",children:"routing"}),'). Afterwards, the browser fetches and runs other JS code to provide the "dynamic" parts of your site\u2014anything implemented with JavaScript. However, before that, the main content of your page is already visible, allowing faster loading.']}),"\n",(0,r.jsx)(n.p,{children:'In CSR-only apps, all DOM elements are generated on client side with React, and the HTML file only ever contains one root element for React to mount DOM to; in SSR, React is already facing a fully built HTML page, and it only needs to correlate the DOM elements with the virtual DOM in its model. This step is called "hydration". After React has hydrated the static markup, the app starts to work as any normal React app.'}),"\n",(0,r.jsxs)(n.p,{children:["Note that Docusaurus is ultimately a single-page application, so static site generation is only an optimization (",(0,r.jsx)(n.em,{children:"progressive enhancement"}),", as it's called), but our functionality does not fully depend on those HTML files. This is contrary to site generators like ",(0,r.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"})," and ",(0,r.jsx)(n.a,{href:"https://v1.docusaurus.io/",children:"Docusaurus v1"}),", where all files are statically transformed to markup, and interactiveness is added through external JavaScript linked with ",(0,r.jsx)(n.code,{children:"<script>"})," tags. If you inspect the build output, you will still see JS assets under ",(0,r.jsx)(n.code,{children:"build/assets/js"}),", which are, really, the core of Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"escape-hatches",children:"Escape hatches"}),"\n",(0,r.jsx)(n.p,{children:"If you want to render any dynamic content on your screen that relies on the browser API to be functional at all, for example:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"live codeblock"}),", which runs in the browser's JS runtime"]}),"\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/assets#themed-images",children:"themed image"})," that detects the user's color scheme to display different images"]}),"\n",(0,r.jsxs)(n.li,{children:["The JSON viewer of our debug panel which uses the ",(0,r.jsx)(n.code,{children:"window"})," global for styling"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You may need to escape from SSR since static HTML can't display anything useful without knowing the client state."}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"It is important for the first client-side render to produce the exact same DOM structure as server-side rendering, otherwise, React will correlate virtual DOM with the wrong DOM elements."}),(0,r.jsxs)(n.p,{children:["Therefore, the na\xefve attempt of ",(0,r.jsx)(n.code,{children:"if (typeof window !== 'undefined) {/* render something */}"})," won't work appropriately as a browser vs. server detection, because the first client render would instantly render different markup from the server-generated one."]}),(0,r.jsxs)(n.p,{children:["You can read more about this pitfall in ",(0,r.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,r.jsx)(n.p,{children:"We provide several more reliable ways to escape SSR."}),"\n",(0,r.jsx)(n.h3,{id:"browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})}),"\n",(0,r.jsxs)(n.p,{children:["If you need to render some component in browser only (for example, because the component relies on browser specifics to be functional at all), one common approach is to wrap your component with ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})})," to make sure it's invisible during SSR and only rendered in CSR."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent(props) {\n return (\n // highlight-start\n <BrowserOnly fallback={<div>Loading...</div>}>\n {() => {\n const LibComponent =\n require('some-lib-that-accesses-window').LibComponent;\n return <LibComponent {...props} />;\n }}\n </BrowserOnly>\n // highlight-end\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It's important to realize that the children of ",(0,r.jsx)(n.code,{children:"<BrowserOnly>"})," is not a JSX element, but a function that ",(0,r.jsx)(n.em,{children:"returns"})," an element. This is a design decision. Consider this code:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent() {\n return (\n <BrowserOnly>\n {/* highlight-start */}\n {/* DON'T DO THIS - doesn't actually work */}\n <span>page url = {window.location.href}</span>\n {/* highlight-end */}\n </BrowserOnly>\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["While you may expect that ",(0,r.jsx)(n.code,{children:"BrowserOnly"})," hides away the children during server-side rendering, it actually can't. When the React renderer tries to render this JSX tree, it does see the ",(0,r.jsx)(n.code,{children:"{window.location.href}"})," variable as a node of this tree and tries to render it, although it's actually not used! Using a function ensures that we only let the renderer see the browser-only component when it's needed."]}),"\n",(0,r.jsx)(n.h3,{id:"useisbrowser",children:(0,r.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,r.jsxs)(n.p,{children:["You can also use the ",(0,r.jsx)(n.code,{children:"useIsBrowser()"})," hook to test if the component is currently in a browser environment. It returns ",(0,r.jsx)(n.code,{children:"false"})," in SSR and ",(0,r.jsx)(n.code,{children:"true"})," is CSR, after first client render. Use this hook if you only need to perform certain conditional operations on client-side, but not render an entirely different UI."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import useIsBrowser from '@docusaurus/useIsBrowser';\n\nfunction MyComponent() {\n const isBrowser = useIsBrowser();\n const location = isBrowser ? window.location.href : 'fetching location...';\n return <span>{location}</span>;\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"useeffect",children:(0,r.jsx)(n.code,{children:"useEffect"})}),"\n",(0,r.jsxs)(n.p,{children:["Lastly, you can put your logic in ",(0,r.jsx)(n.code,{children:"useEffect()"})," to delay its execution until after first CSR. This is most appropriate if you are only performing side-effects but don't ",(0,r.jsx)(n.em,{children:"get"})," data from the client state."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'function MyComponent() {\n useEffect(() => {\n // Only logged in the browser console; nothing is logged during server-side rendering\n console.log("I\'m now in the browser");\n }, []);\n return <span>Some content...</span>;\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})})," namespace contains several values, and ",(0,r.jsx)(n.code,{children:"canUseDOM"})," is an effective way to detect browser environment."]}),"\n",(0,r.jsxs)(n.p,{children:["Beware that it essentially checked ",(0,r.jsx)(n.code,{children:"typeof window !== 'undefined'"})," under the hood, so you should not use it for rendering-related logic, but only imperative code, like reacting to user input by sending web requests, or dynamically importing libraries, where DOM isn't updated at all."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="a-client-module.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n document.title = \"I'm loaded!\";\n}\n"})})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(27378);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/26af6b06.f2eefb69.js b/assets/js/26af6b06.f2eefb69.js new file mode 100644 index 000000000000..4c47c084e99b --- /dev/null +++ b/assets/js/26af6b06.f2eefb69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63545],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),a=t(3620),c=t(44479),l=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function f(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return f(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,l._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=m(e),[i,a]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[l,d]=g({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:o})?e:null})();(0,c.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function S({className:e,block:n,selectedValue:t,selectValue:s,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=c.indexOf(n),o=a[r].value;o!==t&&(l(n),s(o))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[c.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>c.push(e),onKeyDown:u,onClick:d},s),{className:(0,o.Z)("tabs__item",x.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function T(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(S,v({},n,e)),(0,r.jsx)(k,v({},n,e))]})}function E(e){const n=(0,w.Z)();return(0,r.jsx)(T,O(v({},e),{children:f(e.children)}),String(n))}},43057:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=t(24246),s=t(71670),o=t(97555),i=t(61132);const a={sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},c="Static site generation (SSG)",l={id:"advanced/ssg",title:"Static site generation (SSG)",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.",source:"@site/docs/advanced/ssg.mdx",sourceDirName:"advanced",slug:"/advanced/ssg",permalink:"/docs/advanced/ssg",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},sidebar:"docs",previous:{title:"Routing",permalink:"/docs/advanced/routing"},next:{title:"Client architecture",permalink:"/docs/advanced/client"}},d={},u=[{value:"Understanding SSR",id:"understanding-ssr",level:2},{value:"Escape hatches",id:"escape-hatches",level:2},{value:"<code><BrowserOnly></code>",id:"browseronly",level:3},{value:"<code>useIsBrowser</code>",id:"useisbrowser",level:3},{value:"<code>useEffect</code>",id:"useeffect",level:3},{value:"<code>ExecutionEnvironment</code>",id:"executionenvironment",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"static-site-generation-ssg",children:"Static site generation (SSG)"})}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"/docs/advanced/architecture",children:"architecture"}),", we mentioned that the theme is run in Webpack. But beware: that doesn't mean it always has access to browser globals! The theme is built twice:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"server-side rendering"}),", the theme is compiled in a sandbox called ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/react-dom-server.html",children:"React DOM Server"}),'. You can see this as a "headless browser", where there is no ',(0,r.jsx)(n.code,{children:"window"})," or ",(0,r.jsx)(n.code,{children:"document"}),", only React. SSR produces static HTML pages."]}),"\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"client-side rendering"}),", the theme is compiled to JavaScript that gets eventually executed in the browser, so it has access to browser variables."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"SSR or SSG?",type:"info",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Server-side rendering"})," and ",(0,r.jsx)(n.em,{children:"static site generation"})," can be different concepts, but we use them interchangeably."]}),(0,r.jsxs)(n.p,{children:["Strictly speaking, Docusaurus is a static site generator, because there's no server-side runtime\u2014we statically render to HTML files that are deployed on a CDN, instead of dynamically pre-rendering on each request. This differs from the working model of ",(0,r.jsx)(n.a,{href:"https://nextjs.org/",children:"Next.js"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["Therefore, while you probably know not to access Node globals like ",(0,r.jsx)(n.code,{children:"process"})," (",(0,r.jsx)(n.a,{href:"#node-env",children:"or can we?"}),") or the ",(0,r.jsx)(n.code,{children:"'fs'"})," module, you can't freely access browser globals either."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function WhereAmI() {\n return <span>{window.location.href}</span>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This looks like idiomatic React, but if you run ",(0,r.jsx)(n.code,{children:"docusaurus build"}),", you will get an error:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"ReferenceError: window is not defined\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This is because during server-side rendering, the Docusaurus app isn't actually run in browser, and it doesn't know what ",(0,r.jsx)(n.code,{children:"window"})," is."]}),"\n",(0,r.jsxs)(t,{id:"node-env",children:[(0,r.jsxs)("summary",{children:["What about ",(0,r.jsx)("code",{children:"process.env.NODE_ENV"}),"?"]}),(0,r.jsxs)(n.p,{children:['One exception to the "no Node globals" rule is ',(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"}),". In fact, you can use it in React, because Webpack injects this variable as a global:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function expensiveComp() {\n if (process.env.NODE_ENV === 'development') {\n return <>This component is not shown in development</>;\n }\n const res = someExpensiveOperationThatLastsALongTime();\n return <>{res}</>;\n}\n"})}),(0,r.jsxs)(n.p,{children:["During Webpack build, the ",(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"})," will be replaced with the value, either ",(0,r.jsx)(n.code,{children:"'development'"})," or ",(0,r.jsx)(n.code,{children:"'production'"}),". You will then get different build results after dead code elimination:"]}),(0,r.jsxs)(o.Z,{children:[(0,r.jsx)(i.Z,{value:"Development",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n if ('development' === 'development') {\n+ return <>This component is not shown in development</>;\n }\n- const res = someExpensiveOperationThatLastsALongTime();\n- return <>{res}</>;\n}\n"})})}),(0,r.jsx)(i.Z,{value:"Production",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n- if ('production' === 'development') {\n- return <>This component is not shown in development</>;\n- }\n+ const res = someExpensiveOperationThatLastsALongTime();\n+ return <>{res}</>;\n}\n"})})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"understanding-ssr",children:"Understanding SSR"}),"\n",(0,r.jsx)(n.p,{children:"React is not just a dynamic UI runtime\u2014it's also a templating engine. Because Docusaurus sites mostly contain static contents, it should be able to work without any JavaScript (which React runs in), but only plain HTML/CSS. And that's what server-side rendering offers: statically rendering your React code into HTML, without any dynamic content. An HTML file has no concept of client state (it's purely markup), hence it shouldn't rely on browser APIs."}),"\n",(0,r.jsxs)(n.p,{children:["These HTML files are the first to arrive at the user's browser screen when a URL is visited (see ",(0,r.jsx)(n.a,{href:"/docs/advanced/routing",children:"routing"}),'). Afterwards, the browser fetches and runs other JS code to provide the "dynamic" parts of your site\u2014anything implemented with JavaScript. However, before that, the main content of your page is already visible, allowing faster loading.']}),"\n",(0,r.jsx)(n.p,{children:'In CSR-only apps, all DOM elements are generated on client side with React, and the HTML file only ever contains one root element for React to mount DOM to; in SSR, React is already facing a fully built HTML page, and it only needs to correlate the DOM elements with the virtual DOM in its model. This step is called "hydration". After React has hydrated the static markup, the app starts to work as any normal React app.'}),"\n",(0,r.jsxs)(n.p,{children:["Note that Docusaurus is ultimately a single-page application, so static site generation is only an optimization (",(0,r.jsx)(n.em,{children:"progressive enhancement"}),", as it's called), but our functionality does not fully depend on those HTML files. This is contrary to site generators like ",(0,r.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"})," and ",(0,r.jsx)(n.a,{href:"https://v1.docusaurus.io/",children:"Docusaurus v1"}),", where all files are statically transformed to markup, and interactiveness is added through external JavaScript linked with ",(0,r.jsx)(n.code,{children:"<script>"})," tags. If you inspect the build output, you will still see JS assets under ",(0,r.jsx)(n.code,{children:"build/assets/js"}),", which are, really, the core of Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"escape-hatches",children:"Escape hatches"}),"\n",(0,r.jsx)(n.p,{children:"If you want to render any dynamic content on your screen that relies on the browser API to be functional at all, for example:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"live codeblock"}),", which runs in the browser's JS runtime"]}),"\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/assets#themed-images",children:"themed image"})," that detects the user's color scheme to display different images"]}),"\n",(0,r.jsxs)(n.li,{children:["The JSON viewer of our debug panel which uses the ",(0,r.jsx)(n.code,{children:"window"})," global for styling"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You may need to escape from SSR since static HTML can't display anything useful without knowing the client state."}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"It is important for the first client-side render to produce the exact same DOM structure as server-side rendering, otherwise, React will correlate virtual DOM with the wrong DOM elements."}),(0,r.jsxs)(n.p,{children:["Therefore, the na\xefve attempt of ",(0,r.jsx)(n.code,{children:"if (typeof window !== 'undefined) {/* render something */}"})," won't work appropriately as a browser vs. server detection, because the first client render would instantly render different markup from the server-generated one."]}),(0,r.jsxs)(n.p,{children:["You can read more about this pitfall in ",(0,r.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,r.jsx)(n.p,{children:"We provide several more reliable ways to escape SSR."}),"\n",(0,r.jsx)(n.h3,{id:"browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})}),"\n",(0,r.jsxs)(n.p,{children:["If you need to render some component in browser only (for example, because the component relies on browser specifics to be functional at all), one common approach is to wrap your component with ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})})," to make sure it's invisible during SSR and only rendered in CSR."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent(props) {\n return (\n // highlight-start\n <BrowserOnly fallback={<div>Loading...</div>}>\n {() => {\n const LibComponent =\n require('some-lib-that-accesses-window').LibComponent;\n return <LibComponent {...props} />;\n }}\n </BrowserOnly>\n // highlight-end\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It's important to realize that the children of ",(0,r.jsx)(n.code,{children:"<BrowserOnly>"})," is not a JSX element, but a function that ",(0,r.jsx)(n.em,{children:"returns"})," an element. This is a design decision. Consider this code:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent() {\n return (\n <BrowserOnly>\n {/* highlight-start */}\n {/* DON'T DO THIS - doesn't actually work */}\n <span>page url = {window.location.href}</span>\n {/* highlight-end */}\n </BrowserOnly>\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["While you may expect that ",(0,r.jsx)(n.code,{children:"BrowserOnly"})," hides away the children during server-side rendering, it actually can't. When the React renderer tries to render this JSX tree, it does see the ",(0,r.jsx)(n.code,{children:"{window.location.href}"})," variable as a node of this tree and tries to render it, although it's actually not used! Using a function ensures that we only let the renderer see the browser-only component when it's needed."]}),"\n",(0,r.jsx)(n.h3,{id:"useisbrowser",children:(0,r.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,r.jsxs)(n.p,{children:["You can also use the ",(0,r.jsx)(n.code,{children:"useIsBrowser()"})," hook to test if the component is currently in a browser environment. It returns ",(0,r.jsx)(n.code,{children:"false"})," in SSR and ",(0,r.jsx)(n.code,{children:"true"})," is CSR, after first client render. Use this hook if you only need to perform certain conditional operations on client-side, but not render an entirely different UI."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import useIsBrowser from '@docusaurus/useIsBrowser';\n\nfunction MyComponent() {\n const isBrowser = useIsBrowser();\n const location = isBrowser ? window.location.href : 'fetching location...';\n return <span>{location}</span>;\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"useeffect",children:(0,r.jsx)(n.code,{children:"useEffect"})}),"\n",(0,r.jsxs)(n.p,{children:["Lastly, you can put your logic in ",(0,r.jsx)(n.code,{children:"useEffect()"})," to delay its execution until after first CSR. This is most appropriate if you are only performing side-effects but don't ",(0,r.jsx)(n.em,{children:"get"})," data from the client state."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'function MyComponent() {\n useEffect(() => {\n // Only logged in the browser console; nothing is logged during server-side rendering\n console.log("I\'m now in the browser");\n }, []);\n return <span>Some content...</span>;\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})})," namespace contains several values, and ",(0,r.jsx)(n.code,{children:"canUseDOM"})," is an effective way to detect browser environment."]}),"\n",(0,r.jsxs)(n.p,{children:["Beware that it essentially checked ",(0,r.jsx)(n.code,{children:"typeof window !== 'undefined'"})," under the hood, so you should not use it for rendering-related logic, but only imperative code, like reacting to user input by sending web requests, or dynamically importing libraries, where DOM isn't updated at all."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="a-client-module.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n document.title = \"I'm loaded!\";\n}\n"})})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(27378);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/276a1994.6aa90c48.js b/assets/js/276a1994.d8b54bbe.js similarity index 63% rename from assets/js/276a1994.6aa90c48.js rename to assets/js/276a1994.d8b54bbe.js index 456c50ebbdb0..a787fba5b25d 100644 --- a/assets/js/276a1994.6aa90c48.js +++ b/assets/js/276a1994.d8b54bbe.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42931],{94544:(e,n,r)=>{r.d(n,{Z:()=>o});var t=r(24246),s=(r(27378),r(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,t.jsx)(t.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},87048:(e,n,r)=>{r.d(n,{CW:()=>j,FS:()=>v,Fr:()=>f,Hc:()=>O,I1:()=>p,SR:()=>b,UM:()=>x,Zl:()=>g,mC:()=>d,mq:()=>y,rv:()=>w});var t=r(24246),s=r(27378),o=r(56953),i=r(92053),c=r(36712),l=r(41428),a=r(38112);const u=s.createContext(null);function d({children:e}){const[n,r]=(0,s.useState)(null),o=(0,s.useRef)(!0);return(0,s.useEffect)((()=>(o.current=!0,()=>{o.current=!1})),[]),(0,s.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!o.current)return;const n=Object.keys(e.versions).at(-1),t=e.time[n];r({name:n,time:t})}))}),[]),(0,t.jsx)(u.Provider,{value:n,children:e})}function h(){var e;const n=null===(e=(0,o.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,i.gB)("default");var t;const s=(null!==(t=r.find((e=>"current"!==e.name)))&&void 0!==t?t:r[0]).name;return n&&"current"!==n?n:s}function p(){const e=(0,s.useContext)(u);return e?(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,t.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function b(){const e=h();return(0,t.jsx)("span",{children:e})}function j(){return(0,t.jsx)("span",{children:3})}function f(){return(0,t.jsx)("span",{children:2})}function m({branch:e}){return(0,t.jsx)(l.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,t.jsx)("code",{children:e})})}function g(){return(0,t.jsx)(m,{branch:"docusaurus-v2"})}function y(){return(0,t.jsx)(m,{branch:"main"})}function x({children:e}){return(0,s.useContext)(u)?null:e}function v({children:e}){return(0,s.useContext)(u)?e:null}function O(){var e,n;const r=null!==(n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==n?n:"0.0.0-4922",o=h();return(0,t.jsx)(a.Z,{language:"diff",children:`- "@docusaurus/core": "^${o}",\n- "@docusaurus/preset-classic": "^${o}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function w(){var e;const n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.time;return n?(0,t.jsx)(c.Z,{values:{time:(0,t.jsx)("b",{children:new Date(n).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,n,r)=>{r.d(n,{Z:()=>ze});var t={};r.r(t),r.d(t,{ButtonExample:()=>A});var s=r(24246),o=r(27378),i=r(40624),c=r(29088),l=r(32711),a=r(36712),u=r(4423),d=r(94544),h=r(30691),p=r(78844),b=r(73919);function j(){const{prism:e}=(0,b.L)(),{colorMode:n}=(0,p.I)(),r=e.theme,t=e.darkTheme||r;return"dark"===n?t:r}var f=r(88941);const m={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function y(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){g(e,n,r[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function v(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(m.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(d.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(f.Z,{fallback:e=>(0,s.jsx)(h.Ac,y({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:m.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function S(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:m.playgroundEditor},String(e))}function D(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(S,{})]})}const C=e=>`${e};`;function B(e){var n,{children:r,transformCode:t}=e,o=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=j();var d;const h=null!==(d=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,s.jsx)("div",{className:m.playgroundContainer,children:(0,s.jsx)(l.nu,x(y({code:null==r?void 0:r.replace(/\n$/,""),noInline:h,transformCode:null!=t?t:C,theme:a},o),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(D,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(D,{}),(0,s.jsx)(k,{})]})}))})}function I(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function E(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){I(e,n,r[n])}))}return e}function N(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function A(e){return(0,s.jsx)("button",N(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const L=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){T(e,n,r[n])}))}return e}({React:o},o,t);var z,Z,_=r(89583),W=r(6324),R=r.n(W);function M(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),$=RegExp("\\{(?<range>[\\d,-]+)\\}"),V={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(q=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){M(e,n,r[n])}))}return e}({},V),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(U)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(U)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(U,e))})),q);var q,U;const G=Object.keys(V);function Q(e,n){const r=e.map((e=>{const{start:r,end:t}=H[e];return`(?:${r}\\s*(${n.flatMap((e=>{var n,r;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${t})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Y(e,n){let r=e.replace(/\n$/,"");const{language:t,magicComments:s,metastring:o}=n;if(o&&$.test(o)){const e=o.match($).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,t=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(t),code:r}}if(void 0===t)return{lineClassNames:{},code:r};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],n);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],n);case"html":return Q(["js","jsBlock","html"],n);case"python":case"py":case"bash":return Q(["bash"],n);case"markdown":case"md":return Q(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return Q(["tex"],n);case"lua":case"haskell":case"sql":return Q(["lua"],n);case"wasm":return Q(["wasm"],n);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],n);case"vbnet":return Q(["vbnet","rem"],n);case"batch":return Q(["rem"],n);case"basic":return Q(["rem","f90"],n);case"fsharp":return Q(["js","ml"],n);case"ocaml":case"sml":return Q(["ml"],n);case"fortran":return Q(["f90"],n);case"cobol":return Q(["cobol"],n);default:return Q(G,n)}}(t,s),c=r.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:u[n]?l[u[n]].start=p:d[n]&&(l[d[n]].range+=`${l[d[n]].start}-${p-1},`),c.splice(p,1)}r=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var r;null!==(r=(z=h)[Z=n])&&void 0!==r||(z[Z]=[]),h[n].push(e)}))})),{lineClassNames:h,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ee(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function ne(e){var{as:n}=e,r=ee(e,["as"]);const t=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,t])=>{const s=n[e];s&&"string"==typeof t&&(r[s]=t)})),r}(j());return(0,s.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){X(e,n,r[n])}))}return e}({},r),{style:t,className:(0,i.Z)(r.className,J.codeBlockContainer,_.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function te({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:re.codeBlockLines,children:e})})}var se=r(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[r,t]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;t(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,t]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,r=oe){const t=(0,se.zX)(n),s=(0,se.Ql)(r);(0,o.useEffect)((()=>{const n=new MutationObserver(t);return e&&n.observe(e,s),()=>n.disconnect()}),[e,t,s])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=r(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ue(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){ae(e,n,r[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function he({line:e,classNames:n,showLineNumbers:r,getLineProps:t,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=t({line:e,className:(0,i.Z)(n,r&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ue({},o({token:e})),n)));return(0,s.jsxs)("span",de(ue({},c),{children:[r?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var pe=r(34370);function be(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function fe(e){return(0,s.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){be(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function me(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ye(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){me(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[r,t]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{(0,pe.Z)(e),t(!0),c.current=window.setTimeout((()=>{t(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,r&&xe.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(fe,{className:xe.copyButtonIcon}),(0,s.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function Oe(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Oe(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:n,isEnabled:r}){const t=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":t,title:t,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:n="",metastring:r,title:t,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,b.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:a),p=j(),f=function(){const[e,n]=(0,o.useState)(!1),[r,t]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const r=s.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,r=e>n||s.current.querySelector("code").hasAttribute("style");t(r)}),[s]);return ie(s,c),(0,o.useEffect)((()=>{c()}),[e,c]),(0,o.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:r,toggle:i}}(),m=function(e){var n,r;return null!==(r=null===(n=null==e?void 0:e.match(F))||void 0===n?void 0:n.groups.title)&&void 0!==r?r:""}(r)||t,{lineClassNames:g,code:y}=Y(e,{metastring:r,language:h,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[m&&(0,s.jsx)("div",{className:re.codeBlockTitle,children:m}),(0,s.jsxs)("div",{className:re.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:r,getLineProps:t,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,x&&re.codeBlockLinesWithNumbering),children:r.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:t,getTokenProps:o,classNames:g[n],showLineNumbers:x},n)))})})}),(0,s.jsxs)("div",{className:re.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,s.jsx)(Se,{className:re.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,s.jsx)(ve,{className:re.codeButton,code:y})]})]})]})}function Ce(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Be(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Ie(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function Ee(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Ne(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ee(e,n,r[n])}))}return e}const Ae=(Te=function(e){var{children:n}=e,r=Ie(e,["children"]);const t=(0,c.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?De:te;return(0,s.jsx)(l,Be(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ce(e,n,r[n])}))}return e}({},r),{children:i}),String(t))},function(e){return e.live?(0,s.jsx)(B,Ne({scope:L},e)):(0,s.jsx)(Te,Ne({},e))});var Te;function Le(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ze(e){return(0,s.jsx)(Ae,function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Le(e,n,r[n])}))}return e}({},e))}},82430:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var t=r(24246),s=r(71670),o=r(87048);const i={},c="Release process",l={id:"release-process",title:"Release process",description:"Let's see how Docusaurus handles versioning, releases and breaking changes.",source:"@site/community/5-release-process.mdx",sourceDirName:".",slug:"/release-process",permalink:"/community/release-process",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:5,frontMatter:{},sidebar:"community",previous:{title:"Canary releases",permalink:"/community/canary"}},a={},u=[{value:"Semantic versioning",id:"semantic-versioning",level:2},{value:"Major versions",id:"major-versions",level:3},{value:"Minor versions",id:"minor-versions",level:3},{value:"Patch versions",id:"patch-versions",level:3},{value:"Versions",id:"versions",level:2},{value:"Stable version",id:"stable-version",level:3},{value:"Next version",id:"next-version",level:3},{value:"Public API surface",id:"public-api-surface",level:2},{value:"Core public API",id:"core-public-api",level:3},{value:"Theming public API",id:"theming-public-api",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"release-process",children:"Release process"})}),"\n",(0,t.jsxs)(n.p,{children:["Let's see how Docusaurus handles ",(0,t.jsx)(n.strong,{children:"versioning, releases and breaking changes"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"This topic is particularly important for highly customized sites that may have difficulties to upgrade."})}),"\n",(0,t.jsx)(n.h2,{id:"semantic-versioning",children:"Semantic versioning"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(n.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Respecting Semantic Versioning is important for multiple reasons:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It ",(0,t.jsx)(n.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,t.jsx)(n.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,t.jsx)(n.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,t.jsx)(n.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,t.jsx)(n.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["Releasing Docusaurus 2.0 took a very long time. From now on, Docusaurus will ",(0,t.jsx)(n.strong,{children:"release new major versions more regularly"}),". In practice, you can expect a new major version every 2\u20134 months."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]})]}),"\n",(0,t.jsx)(n.h3,{id:"major-versions",children:"Major versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"major"})," version number is incremented on ",(0,t.jsx)(n.strong,{children:"every breaking change"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new major version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["a blog post with feature highlights, major bug fixes, ",(0,t.jsx)(n.strong,{children:"breaking changes, and upgrade instructions"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Read our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"})," section to clearly understand what we consider as a breaking change."]})}),"\n",(0,t.jsx)(n.h3,{id:"minor-versions",children:"Minor versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"minor"})," version number is incremented on every significant retro-compatible change."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new minor version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"a blog post with a list of feature highlights and major bug fixes"}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If you only use our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"}),", you should be able to upgrade in no time!"]})}),"\n",(0,t.jsx)(n.h3,{id:"patch-versions",children:"Patch versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"patch"})," version number is incremented on bugfixes releases."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new patch version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"versions",children:"Versions"}),"\n","\n",(0,t.jsx)(n.p,{children:"The Docusaurus team is usually working on 2 major versions at the same time:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.Fr,{})]}),": the ",(0,t.jsx)(n.strong,{children:"stable"})," version, on the ",(0,t.jsx)(o.Zl,{})," branch"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.CW,{})]}),": the ",(0,t.jsx)(n.strong,{children:"next"})," version, on the ",(0,t.jsx)(o.mq,{})," branch"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.Zl,{})," branch is created just before releasing the first v",(0,t.jsx)(o.Fr,{})," release candidate."]})}),"\n",(0,t.jsx)(n.h3,{id:"stable-version",children:"Stable version"}),"\n",(0,t.jsxs)(n.p,{children:["The stable version (v",(0,t.jsx)(o.Fr,{}),", on ",(0,t.jsx)(o.Zl,{}),") is recommended for most Docusaurus users."]}),"\n",(0,t.jsxs)(n.p,{children:["We regularly backport retro-compatible features, bug and security fixes from ",(0,t.jsx)(o.mq,{})," to ",(0,t.jsx)(o.Zl,{})," with ",(0,t.jsx)(n.code,{children:"git cherry-pick"})," to make them available to those not ready for the next version."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["After a new stable version has been released, the former stable version will continue to receive support only for ",(0,t.jsx)(n.strong,{children:"major security issues"})," for ",(0,t.jsx)(n.strong,{children:"3 months"}),". Otherwise, all features will be frozen and non-critical bugs will not be fixed."]}),(0,t.jsx)(n.p,{children:"It is recommended to upgrade within that time frame to the new stable version."})]}),"\n",(0,t.jsx)(n.h3,{id:"next-version",children:"Next version"}),"\n",(0,t.jsxs)(n.p,{children:["The next version (v",(0,t.jsx)(o.CW,{}),", on ",(0,t.jsx)(o.mq,{}),") is the version the Docusaurus team is currently working on."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.mq,{})," branch is the ",(0,t.jsx)(n.strong,{children:"default target branch"})," for all pull requests, including core team and external contributions."]}),"\n",(0,t.jsxs)(n.p,{children:["This version is recommended for ",(0,t.jsx)(n.strong,{children:"early adopters"})," that want to use the latest Docusaurus features as soon as possible. It is also a good way to help us by reporting bugs and giving some feedback."]}),"\n",(0,t.jsx)(n.p,{children:"There are 3 ways to use the next version:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["with an ",(0,t.jsx)(n.code,{children:"alpha"}),", ",(0,t.jsx)(n.code,{children:"beta"})," or ",(0,t.jsx)(n.code,{children:"rc"})," pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with the ",(0,t.jsx)(n.code,{children:"@next"})," npm dist tag for the latest pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with a ",(0,t.jsx)(n.a,{href:"/community/canary",children:"canary release"})," for the very latest features"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"The next version passes all our automated tests and is used by the Docusaurus site itself. It is relatively safe: don't be afraid to give it a try."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"Breaking changes can happen on the next version: detailed upgrade instructions are available in the changelog and pull requests."}),(0,t.jsxs)(n.p,{children:["At the ",(0,t.jsx)(n.code,{children:"beta"})," and ",(0,t.jsx)(n.code,{children:"rc"})," (release candidate) phases, we avoid introducing major breaking changes."]})]}),"\n",(0,t.jsx)(n.h2,{id:"public-api-surface",children:"Public API surface"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus commits to respecting Semantic Versioning. This means that whenever changes occur in Docusaurus public APIs and break backward compatibility, we will increment the ",(0,t.jsx)(n.code,{children:"major"})," version number."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Docusaurus guarantees public API retro-compatibility across ",(0,t.jsx)(n.code,{children:"minor"})," versions. Unless you use internal APIs, ",(0,t.jsx)(n.code,{children:"minor"})," version upgrades should be easy."]})}),"\n",(0,t.jsx)(n.p,{children:"We will outline what accounts as the public API surface."}),"\n",(0,t.jsx)(n.h3,{id:"core-public-api",children:"Core public API"}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Docusaurus config"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus client APIs"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus CLI"}),"\n",(0,t.jsx)(n.li,{children:"Preset options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin lifecycle APIs"}),"\n",(0,t.jsx)(n.li,{children:"Theme config"}),"\n",(0,t.jsx)(n.li,{children:"Core plugins route component props"}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/types"})," TypeScript types","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"We still retain the freedom to make types stricter (which may break type-checking)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u274c Our public API ",(0,t.jsx)(n.strong,{children:"excludes"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Docusaurus config ",(0,t.jsx)(n.code,{children:"future"})]}),"\n",(0,t.jsxs)(n.li,{children:["All features prefixed by ",(0,t.jsx)(n.code,{children:"experimental_"})," or ",(0,t.jsx)(n.code,{children:"unstable_"})]}),"\n",(0,t.jsxs)(n.li,{children:["All features prefixed by ",(0,t.jsx)(n.code,{children:"v<MajorVersion>_"})," (",(0,t.jsx)(n.code,{children:"v6_"})," ",(0,t.jsx)(n.code,{children:"v7_"}),", etc.)"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"For non-theme APIs, any documented API is considered public (and will be stable); any undocumented API is considered internal."})}),"\n",(0,t.jsxs)(n.p,{children:['An API being "stable" means if you increment the patch or minor version of your Docusaurus installation without any other change, running ',(0,t.jsx)(n.code,{children:"docusaurus start"})," or ",(0,t.jsx)(n.code,{children:"docusaurus build"})," should not throw an error."]}),"\n",(0,t.jsx)(n.h3,{id:"theming-public-api",children:"Theming public API"}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus has a very flexible theming system:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"You can use custom CSS"}),"\n",(0,t.jsxs)(n.li,{children:["You can ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," any React theme component"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This system also implicitly creates a very large API surface. To be able to move fast and improve Docusaurus, we can't guarantee retro-compatibility."}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public theming API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/styling-layout#theme-class-names",children:"Theme class names"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima"})," class names and CSS variables"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"safe to swizzle"})]}),"\n",(0,t.jsx)(n.li,{children:"The theme user experience"}),"\n",(0,t.jsx)(n.li,{children:"Browser support"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"You may not be able to achieve your site customization through this public API."}),(0,t.jsxs)(n.p,{children:["In this case, please ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use case"})," and we will figure out how to expand our public API."]})]}),"\n",(0,t.jsxs)(n.p,{children:["\u274c Our public theming API ",(0,t.jsx)(n.strong,{children:"excludes"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The DOM structure"}),"\n",(0,t.jsxs)(n.li,{children:["CSS module class names with a hash suffix (usually targeted with ",(0,t.jsx)(n.code,{children:"[class*='myClassName']"})," selectors)"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"unsafe or forbidden to swizzle"})]}),"\n",(0,t.jsxs)(n.li,{children:["React components that import from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common/internal"})]}),"\n",(0,t.jsx)(n.li,{children:"The exact visual appearance of the theme"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"})," safe components, you might encounter components that import undocumented APIs from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common"})," (without the ",(0,t.jsx)(n.code,{children:"/internal"})," subpath)."]}),(0,t.jsx)(n.p,{children:'We still maintain retro-compatibility on those APIs (hence they are marked as "safe"), but we don\'t encourage a direct usage.'})]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42931],{94544:(e,n,r)=>{r.d(n,{Z:()=>o});var t=r(24246),s=(r(27378),r(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,t.jsx)(t.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},87048:(e,n,r)=>{r.d(n,{CW:()=>j,FS:()=>v,Fr:()=>f,Hc:()=>O,I1:()=>p,SR:()=>b,UM:()=>x,Zl:()=>g,mC:()=>d,mq:()=>y,rv:()=>w});var t=r(24246),s=r(27378),o=r(56953),i=r(92053),c=r(36712),l=r(41428),a=r(38112);const u=s.createContext(null);function d({children:e}){const[n,r]=(0,s.useState)(null),o=(0,s.useRef)(!0);return(0,s.useEffect)((()=>(o.current=!0,()=>{o.current=!1})),[]),(0,s.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!o.current)return;const n=Object.keys(e.versions).at(-1),t=e.time[n];r({name:n,time:t})}))}),[]),(0,t.jsx)(u.Provider,{value:n,children:e})}function h(){var e;const n=null===(e=(0,o.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,i.gB)("default");var t;const s=(null!==(t=r.find((e=>"current"!==e.name)))&&void 0!==t?t:r[0]).name;return n&&"current"!==n?n:s}function p(){const e=(0,s.useContext)(u);return e?(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,t.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function b(){const e=h();return(0,t.jsx)("span",{children:e})}function j(){return(0,t.jsx)("span",{children:3})}function f(){return(0,t.jsx)("span",{children:2})}function m({branch:e}){return(0,t.jsx)(l.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,t.jsx)("code",{children:e})})}function g(){return(0,t.jsx)(m,{branch:"docusaurus-v2"})}function y(){return(0,t.jsx)(m,{branch:"main"})}function x({children:e}){return(0,s.useContext)(u)?null:e}function v({children:e}){return(0,s.useContext)(u)?e:null}function O(){var e,n;const r=null!==(n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==n?n:"0.0.0-4922",o=h();return(0,t.jsx)(a.Z,{language:"diff",children:`- "@docusaurus/core": "^${o}",\n- "@docusaurus/preset-classic": "^${o}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function w(){var e;const n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.time;return n?(0,t.jsx)(c.Z,{values:{time:(0,t.jsx)("b",{children:new Date(n).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,n,r)=>{r.d(n,{Z:()=>Ze});var t={};r.r(t),r.d(t,{ButtonExample:()=>A});var s=r(24246),o=r(27378),i=r(40624),c=r(29088),l=r(32711),a=r(36712),u=r(4423),d=r(94544),h=r(30691),p=r(78844),b=r(73919);function j(){const{prism:e}=(0,b.L)(),{colorMode:n}=(0,p.I)(),r=e.theme,t=e.darkTheme||r;return"dark"===n?t:r}var f=r(88941);const m={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function y(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){g(e,n,r[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function v(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(m.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(d.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(f.Z,{fallback:e=>(0,s.jsx)(h.Ac,y({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:m.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function S(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:m.playgroundEditor},String(e))}function D(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(S,{})]})}const C=e=>`${e};`;function B(e){var n,{children:r,transformCode:t}=e,o=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=j();var d;const h=null!==(d=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,s.jsx)("div",{className:m.playgroundContainer,children:(0,s.jsx)(l.nu,x(y({code:null==r?void 0:r.replace(/\n$/,""),noInline:h,transformCode:null!=t?t:C,theme:a},o),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(D,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(D,{}),(0,s.jsx)(k,{})]})}))})}function I(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function E(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){I(e,n,r[n])}))}return e}function N(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function A(e){return(0,s.jsx)("button",N(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const L=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){T(e,n,r[n])}))}return e}({React:o},o,t);var Z,z,_=r(89583),W=r(6324),R=r.n(W);function M(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),V={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(q=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){M(e,n,r[n])}))}return e}({},V),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(U)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(U)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(U,e))})),q);var q,U;const G=Object.keys(V);function Q(e,n){const r=e.map((e=>{const{start:r,end:t}=H[e];return`(?:${r}\\s*(${n.flatMap((e=>{var n,r;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${t})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Y(e,n){let r=e.replace(/\n$/,"");const{language:t,magicComments:s,metastring:o}=n;if(o&&F.test(o)){const e=o.match(F).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,t=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(t),code:r}}if(void 0===t)return{lineClassNames:{},code:r};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],n);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],n);case"html":return Q(["js","jsBlock","html"],n);case"python":case"py":case"bash":return Q(["bash"],n);case"markdown":case"md":return Q(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return Q(["tex"],n);case"lua":case"haskell":case"sql":return Q(["lua"],n);case"wasm":return Q(["wasm"],n);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],n);case"vbnet":return Q(["vbnet","rem"],n);case"batch":return Q(["rem"],n);case"basic":return Q(["rem","f90"],n);case"fsharp":return Q(["js","ml"],n);case"ocaml":case"sml":return Q(["ml"],n);case"fortran":return Q(["f90"],n);case"cobol":return Q(["cobol"],n);default:return Q(G,n)}}(t,s),c=r.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:u[n]?l[u[n]].start=p:d[n]&&(l[d[n]].range+=`${l[d[n]].start}-${p-1},`),c.splice(p,1)}r=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var r;null!==(r=(Z=h)[z=n])&&void 0!==r||(Z[z]=[]),h[n].push(e)}))})),{lineClassNames:h,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ee(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function ne(e){var{as:n}=e,r=ee(e,["as"]);const t=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,t])=>{const s=n[e];s&&"string"==typeof t&&(r[s]=t)})),r}(j());return(0,s.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){X(e,n,r[n])}))}return e}({},r),{style:t,className:(0,i.Z)(r.className,J.codeBlockContainer,_.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function te({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:re.codeBlockLines,children:e})})}var se=r(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[r,t]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;t(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,t]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,r=oe){const t=(0,se.zX)(n),s=(0,se.Ql)(r);(0,o.useEffect)((()=>{const n=new MutationObserver(t);return e&&n.observe(e,s),()=>n.disconnect()}),[e,t,s])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=r(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ue(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){ae(e,n,r[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function he({line:e,classNames:n,showLineNumbers:r,getLineProps:t,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=t({line:e,className:(0,i.Z)(n,r&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ue({},o({token:e})),n)));return(0,s.jsxs)("span",de(ue({},c),{children:[r?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var pe=r(34370);function be(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function fe(e){return(0,s.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){be(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function me(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ye(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){me(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[r,t]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{(0,pe.Z)(e),t(!0),c.current=window.setTimeout((()=>{t(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,r&&xe.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(fe,{className:xe.copyButtonIcon}),(0,s.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function Oe(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Oe(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:n,isEnabled:r}){const t=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":t,title:t,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:n="",metastring:r,title:t,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,b.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:a),p=j(),f=function(){const[e,n]=(0,o.useState)(!1),[r,t]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const r=s.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,r=e>n||s.current.querySelector("code").hasAttribute("style");t(r)}),[s]);return ie(s,c),(0,o.useEffect)((()=>{c()}),[e,c]),(0,o.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:r,toggle:i}}(),m=function(e){var n,r;return null!==(r=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==r?r:""}(r)||t,{lineClassNames:g,code:y}=Y(e,{metastring:r,language:h,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[m&&(0,s.jsx)("div",{className:re.codeBlockTitle,children:m}),(0,s.jsxs)("div",{className:re.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:r,getLineProps:t,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,x&&re.codeBlockLinesWithNumbering),children:r.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:t,getTokenProps:o,classNames:g[n],showLineNumbers:x},n)))})})}),(0,s.jsxs)("div",{className:re.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,s.jsx)(Se,{className:re.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,s.jsx)(ve,{className:re.codeButton,code:y})]})]})]})}function Ce(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Be(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Ie(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function Ee(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Ne(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ee(e,n,r[n])}))}return e}const Ae=(Te=function(e){var{children:n}=e,r=Ie(e,["children"]);const t=(0,c.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?De:te;return(0,s.jsx)(l,Be(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ce(e,n,r[n])}))}return e}({},r),{children:i}),String(t))},function(e){return e.live?(0,s.jsx)(B,Ne({scope:L},e)):(0,s.jsx)(Te,Ne({},e))});var Te;function Le(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Ze(e){return(0,s.jsx)(Ae,function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Le(e,n,r[n])}))}return e}({},e))}},82430:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var t=r(24246),s=r(71670),o=r(87048);const i={},c="Release process",l={id:"release-process",title:"Release process",description:"Let's see how Docusaurus handles versioning, releases and breaking changes.",source:"@site/community/5-release-process.mdx",sourceDirName:".",slug:"/release-process",permalink:"/community/release-process",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:5,frontMatter:{},sidebar:"community",previous:{title:"Canary releases",permalink:"/community/canary"}},a={},u=[{value:"Semantic versioning",id:"semantic-versioning",level:2},{value:"Major versions",id:"major-versions",level:3},{value:"Minor versions",id:"minor-versions",level:3},{value:"Patch versions",id:"patch-versions",level:3},{value:"Versions",id:"versions",level:2},{value:"Stable version",id:"stable-version",level:3},{value:"Next version",id:"next-version",level:3},{value:"Public API surface",id:"public-api-surface",level:2},{value:"Core public API",id:"core-public-api",level:3},{value:"Theming public API",id:"theming-public-api",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"release-process",children:"Release process"})}),"\n",(0,t.jsxs)(n.p,{children:["Let's see how Docusaurus handles ",(0,t.jsx)(n.strong,{children:"versioning, releases and breaking changes"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"This topic is particularly important for highly customized sites that may have difficulties to upgrade."})}),"\n",(0,t.jsx)(n.h2,{id:"semantic-versioning",children:"Semantic versioning"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(n.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Respecting Semantic Versioning is important for multiple reasons:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It ",(0,t.jsx)(n.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,t.jsx)(n.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,t.jsx)(n.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,t.jsx)(n.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,t.jsx)(n.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["Releasing Docusaurus 2.0 took a very long time. From now on, Docusaurus will ",(0,t.jsx)(n.strong,{children:"release new major versions more regularly"}),". In practice, you can expect a new major version every 2\u20134 months."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]})]}),"\n",(0,t.jsx)(n.h3,{id:"major-versions",children:"Major versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"major"})," version number is incremented on ",(0,t.jsx)(n.strong,{children:"every breaking change"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new major version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["a blog post with feature highlights, major bug fixes, ",(0,t.jsx)(n.strong,{children:"breaking changes, and upgrade instructions"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Read our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"})," section to clearly understand what we consider as a breaking change."]})}),"\n",(0,t.jsx)(n.h3,{id:"minor-versions",children:"Minor versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"minor"})," version number is incremented on every significant retro-compatible change."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new minor version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"a blog post with a list of feature highlights and major bug fixes"}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If you only use our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"}),", you should be able to upgrade in no time!"]})}),"\n",(0,t.jsx)(n.h3,{id:"patch-versions",children:"Patch versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"patch"})," version number is incremented on bugfixes releases."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new patch version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"versions",children:"Versions"}),"\n","\n",(0,t.jsx)(n.p,{children:"The Docusaurus team is usually working on 2 major versions at the same time:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.Fr,{})]}),": the ",(0,t.jsx)(n.strong,{children:"stable"})," version, on the ",(0,t.jsx)(o.Zl,{})," branch"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.CW,{})]}),": the ",(0,t.jsx)(n.strong,{children:"next"})," version, on the ",(0,t.jsx)(o.mq,{})," branch"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.Zl,{})," branch is created just before releasing the first v",(0,t.jsx)(o.Fr,{})," release candidate."]})}),"\n",(0,t.jsx)(n.h3,{id:"stable-version",children:"Stable version"}),"\n",(0,t.jsxs)(n.p,{children:["The stable version (v",(0,t.jsx)(o.Fr,{}),", on ",(0,t.jsx)(o.Zl,{}),") is recommended for most Docusaurus users."]}),"\n",(0,t.jsxs)(n.p,{children:["We regularly backport retro-compatible features, bug and security fixes from ",(0,t.jsx)(o.mq,{})," to ",(0,t.jsx)(o.Zl,{})," with ",(0,t.jsx)(n.code,{children:"git cherry-pick"})," to make them available to those not ready for the next version."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["After a new stable version has been released, the former stable version will continue to receive support only for ",(0,t.jsx)(n.strong,{children:"major security issues"})," for ",(0,t.jsx)(n.strong,{children:"3 months"}),". Otherwise, all features will be frozen and non-critical bugs will not be fixed."]}),(0,t.jsx)(n.p,{children:"It is recommended to upgrade within that time frame to the new stable version."})]}),"\n",(0,t.jsx)(n.h3,{id:"next-version",children:"Next version"}),"\n",(0,t.jsxs)(n.p,{children:["The next version (v",(0,t.jsx)(o.CW,{}),", on ",(0,t.jsx)(o.mq,{}),") is the version the Docusaurus team is currently working on."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.mq,{})," branch is the ",(0,t.jsx)(n.strong,{children:"default target branch"})," for all pull requests, including core team and external contributions."]}),"\n",(0,t.jsxs)(n.p,{children:["This version is recommended for ",(0,t.jsx)(n.strong,{children:"early adopters"})," that want to use the latest Docusaurus features as soon as possible. It is also a good way to help us by reporting bugs and giving some feedback."]}),"\n",(0,t.jsx)(n.p,{children:"There are 3 ways to use the next version:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["with an ",(0,t.jsx)(n.code,{children:"alpha"}),", ",(0,t.jsx)(n.code,{children:"beta"})," or ",(0,t.jsx)(n.code,{children:"rc"})," pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with the ",(0,t.jsx)(n.code,{children:"@next"})," npm dist tag for the latest pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with a ",(0,t.jsx)(n.a,{href:"/community/canary",children:"canary release"})," for the very latest features"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"The next version passes all our automated tests and is used by the Docusaurus site itself. It is relatively safe: don't be afraid to give it a try."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"Breaking changes can happen on the next version: detailed upgrade instructions are available in the changelog and pull requests."}),(0,t.jsxs)(n.p,{children:["At the ",(0,t.jsx)(n.code,{children:"beta"})," and ",(0,t.jsx)(n.code,{children:"rc"})," (release candidate) phases, we avoid introducing major breaking changes."]})]}),"\n",(0,t.jsx)(n.h2,{id:"public-api-surface",children:"Public API surface"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus commits to respecting Semantic Versioning. This means that whenever changes occur in Docusaurus public APIs and break backward compatibility, we will increment the ",(0,t.jsx)(n.code,{children:"major"})," version number."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Docusaurus guarantees public API retro-compatibility across ",(0,t.jsx)(n.code,{children:"minor"})," versions. Unless you use internal APIs, ",(0,t.jsx)(n.code,{children:"minor"})," version upgrades should be easy."]})}),"\n",(0,t.jsx)(n.p,{children:"We will outline what accounts as the public API surface."}),"\n",(0,t.jsx)(n.h3,{id:"core-public-api",children:"Core public API"}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Docusaurus config"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus client APIs"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus CLI"}),"\n",(0,t.jsx)(n.li,{children:"Preset options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin lifecycle APIs"}),"\n",(0,t.jsx)(n.li,{children:"Theme config"}),"\n",(0,t.jsx)(n.li,{children:"Core plugins route component props"}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/types"})," TypeScript types","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"We still retain the freedom to make types stricter (which may break type-checking)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u274c Our public API ",(0,t.jsx)(n.strong,{children:"excludes"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Docusaurus config ",(0,t.jsx)(n.code,{children:"future"})]}),"\n",(0,t.jsxs)(n.li,{children:["All features prefixed by ",(0,t.jsx)(n.code,{children:"experimental_"})," or ",(0,t.jsx)(n.code,{children:"unstable_"})]}),"\n",(0,t.jsxs)(n.li,{children:["All features prefixed by ",(0,t.jsx)(n.code,{children:"v<MajorVersion>_"})," (",(0,t.jsx)(n.code,{children:"v6_"})," ",(0,t.jsx)(n.code,{children:"v7_"}),", etc.)"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"For non-theme APIs, any documented API is considered public (and will be stable); any undocumented API is considered internal."})}),"\n",(0,t.jsxs)(n.p,{children:['An API being "stable" means if you increment the patch or minor version of your Docusaurus installation without any other change, running ',(0,t.jsx)(n.code,{children:"docusaurus start"})," or ",(0,t.jsx)(n.code,{children:"docusaurus build"})," should not throw an error."]}),"\n",(0,t.jsx)(n.h3,{id:"theming-public-api",children:"Theming public API"}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus has a very flexible theming system:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"You can use custom CSS"}),"\n",(0,t.jsxs)(n.li,{children:["You can ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," any React theme component"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This system also implicitly creates a very large API surface. To be able to move fast and improve Docusaurus, we can't guarantee retro-compatibility."}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public theming API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/styling-layout#theme-class-names",children:"Theme class names"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima"})," class names and CSS variables"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"safe to swizzle"})]}),"\n",(0,t.jsx)(n.li,{children:"The theme user experience"}),"\n",(0,t.jsx)(n.li,{children:"Browser support"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"You may not be able to achieve your site customization through this public API."}),(0,t.jsxs)(n.p,{children:["In this case, please ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use case"})," and we will figure out how to expand our public API."]})]}),"\n",(0,t.jsxs)(n.p,{children:["\u274c Our public theming API ",(0,t.jsx)(n.strong,{children:"excludes"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The DOM structure"}),"\n",(0,t.jsxs)(n.li,{children:["CSS module class names with a hash suffix (usually targeted with ",(0,t.jsx)(n.code,{children:"[class*='myClassName']"})," selectors)"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"unsafe or forbidden to swizzle"})]}),"\n",(0,t.jsxs)(n.li,{children:["React components that import from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common/internal"})]}),"\n",(0,t.jsx)(n.li,{children:"The exact visual appearance of the theme"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"})," safe components, you might encounter components that import undocumented APIs from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common"})," (without the ",(0,t.jsx)(n.code,{children:"/internal"})," subpath)."]}),(0,t.jsx)(n.p,{children:'We still maintain retro-compatibility on those APIs (hence they are marked as "safe"), but we don\'t encourage a direct usage.'})]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/assets/js/2c6d53a8.7b14744f.js b/assets/js/2c6d53a8.694031dd.js similarity index 80% rename from assets/js/2c6d53a8.7b14744f.js rename to assets/js/2c6d53a8.694031dd.js index 59470c15781e..c8034e2f831f 100644 --- a/assets/js/2c6d53a8.7b14744f.js +++ b/assets/js/2c6d53a8.694031dd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49409],{9947:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf"},4090:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz"},36261:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js"},76804:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json"},97408:(e,t,n)=>{n.d(t,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",i(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,n)=>{n.d(t,{Z:()=>se});var r=n(24246),o=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function s(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),i=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children);var s;const l=null!==(s=e.title)&&void 0!==s?s:t;return c(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}({},e,l&&{title:l}),{children:n})}var l=n(40624),a=n(36712),u=n(89583);const d={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function b({type:e,className:t,children:n}){return(0,r.jsx)("div",{className:(0,l.Z)(u.k.common.admonition,u.k.common.admonitionType(e),d.admonition,t),children:n})}function p({icon:e,title:t}){return(0,r.jsxs)("div",{className:d.admonitionHeading,children:[(0,r.jsx)("span",{className:d.admonitionIcon,children:e}),t]})}function f({children:e}){return e?(0,r.jsx)("div",{className:d.admonitionContent,children:e}):null}function h(e){const{type:t,icon:n,title:o,children:i,className:c}=e;return(0,r.jsxs)(b,{type:t,className:c,children:[o||n?(0,r.jsx)(p,{title:o,icon:n}):null,(0,r.jsx)(f,{children:i})]})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){return(0,r.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const x={icon:(0,r.jsx)(g,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function w(e){return(0,r.jsx)(h,O(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){y(e,t,n[t])}))}return e}({},x,e),{className:(0,l.Z)("alert alert--secondary",e.className),children:e.children}))}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function A(e){return(0,r.jsx)("svg",k(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function P(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const N={icon:(0,r.jsx)(A,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(e){return(0,r.jsx)(h,S(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){P(e,t,n[t])}))}return e}({},N,e),{className:(0,l.Z)("alert alert--success",e.className),children:e.children}))}var D=n(35434);function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const T={icon:(0,r.jsx)(D.Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function M(e){return(0,r.jsx)(h,B(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){E(e,t,n[t])}))}return e}({},T,e),{className:(0,l.Z)("alert alert--info",e.className),children:e.children}))}function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Z(e){return(0,r.jsx)("svg",L(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const J={icon:(0,r.jsx)(Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function W(e){return(0,r.jsx)("svg",G(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){V(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function H(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const q={icon:(0,r.jsx)(W,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function Q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function X(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const K={icon:(0,r.jsx)(Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){U(e,t,n[t])}))}return e}const _={note:w,tip:C,info:M,warning:function(e){return(0,r.jsx)(h,z(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}({},J,e),{className:(0,l.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(h,H(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){F(e,t,n[t])}))}return e}({},q,e),{className:(0,l.Z)("alert alert--danger",e.className),children:e.children}))}},$={secondary:e=>(0,r.jsx)(w,Y({title:"secondary"},e)),important:e=>(0,r.jsx)(M,Y({title:"important"},e)),success:e=>(0,r.jsx)(C,Y({title:"success"},e)),caution:function(e){return(0,r.jsx)(h,X(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Q(e,t,n[t])}))}return e}({},K,e),{className:(0,l.Z)("alert alert--warning",e.className),children:e.children}))}},ee=Y({},_,$);var te=n(52615);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re,oe;const ie=(re=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ne(e,t,n[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,r.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,r.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,r.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(re,Object.getOwnPropertyDescriptors(oe)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(oe)).forEach((function(e){Object.defineProperty(re,e,Object.getOwnPropertyDescriptor(oe,e))})),re);function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(e){const t=s(e),n=(o=t.type,ie[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ie.info));var o;return(0,r.jsx)(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ce(e,t,n[t])}))}return e}({},t))}},5254:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(24246),o=n(27378),i=n(40624),c=n(80474),s=n(29088),l=n(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function b(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function f(e,t){return!!e&&(e===t||f(e.parentElement,t))}function h(e){var{summary:t,children:n}=e,h=b(e,["summary","children"]);(0,c.Z)().collectAnchor(h.id);const m=(0,s.Z)(),j=(0,o.useRef)(null),{collapsed:g,setCollapsed:y}=(0,l.u)({initialState:!h.open}),[O,x]=(0,o.useState)(h.open),w=o.isValidElement(t)?t:(0,r.jsx)("summary",{children:null!=t?t:"Details"});return(0,r.jsxs)("details",d(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){u(e,t,n[t])}))}return e}({},h),{ref:j,open:O,"data-collapsed":g,className:(0,i.Z)(a.details,m&&a.isBrowser,h.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&f(t,j.current)&&(e.preventDefault(),g?(y(!1),x(!0)):y(!0))},children:[w,(0,r.jsx)(l.z,{lazy:!1,collapsed:g,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{y(e),x(!e)},children:(0,r.jsx)("div",{className:a.collapsibleContent,children:n})})]}))}const m={details:"details_Cn_P"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(){return g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g.apply(this,arguments)}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const O="alert alert--info";function x(e){var t=g({},e);return(0,r.jsx)(h,y(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}({},t),{className:(0,i.Z)(O,m.details,t.className)}))}},61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const i={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(i.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>S});var r=n(24246),o=n(27378),i=n(40624),c=n(75527),s=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,s.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),i=(0,a._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){b(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[i,c]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=h(e),[c,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[a,u]=j({queryString:n,groupId:r}),[b,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:b;return m({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{f&&s(f)}),[f]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),p(e)}),[u,p,i]),tabValues:i}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function v(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:o,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),i=s[r].value;i!==n&&(a(t),o(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",v(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,i.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function A({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=g(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(A,w({},t,e))]})}function S(e){const t=(0,y.Z)();return(0,r.jsx)(P,v(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),o=(n(27378),n(29088));function i({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),o=(n(27378),n(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function l(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:a}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(s({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(i.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:a,children:e})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Le});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),i=n(27378),c=n(40624),s=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),b=n(30691),p=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,p.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(j.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(b.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function A(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function P(){const e=(0,s.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const N=e=>`${e};`;function C(e){var t,{children:n,transformCode:r}=e,i=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:s}}=c,a=h();var d;const b=null!==(d=null===(t=i.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:b,transformCode:null!=r?r:N,theme:a},i),{children:"top"===s?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(A,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(A,{})]})}))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){D(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({React:i},i,r);var L,Z,I=n(89583),z=n(6324),J=n.n(z);function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const G=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),W=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(q=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){V(e,t,n[t])}))}return e}({},F),Q=null!=(Q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?Q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(Q)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(Q)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(Q,e))})),q);var q,Q;const X=Object.keys(F);function K(e,t){const n=e.map((e=>{const{start:n,end:r}=H[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function U(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:i}=t;if(i&&W.test(i)){const e=i.match(W).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=J()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return K(["js","jsBlock"],t);case"jsx":case"tsx":return K(["js","jsBlock","jsx"],t);case"html":return K(["js","jsBlock","html"],t);case"python":case"py":case"bash":return K(["bash"],t);case"markdown":case"md":return K(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return K(["tex"],t);case"lua":case"haskell":case"sql":return K(["lua"],t);case"wasm":return K(["wasm"],t);case"vb":case"vba":case"visual-basic":return K(["vb","rem"],t);case"vbnet":return K(["vbnet","rem"],t);case"batch":return K(["rem"],t);case"basic":return K(["rem","f90"],t);case"fsharp":return K(["js","ml"],t);case"ocaml":case"sml":return K(["ml"],t);case"fortran":return K(["f90"],t);case"cobol":return K(["cobol"],t);default:return K(X,t)}}(r,o),s=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<s.length;){const e=s[p].match(c);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${p},`:u[t]?l[u[t]].start=p:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${p-1},`),s.splice(p,1)}n=s.join("\n");const b={};return Object.entries(l).forEach((([e,{range:t}])=>{J()(t).forEach((t=>{var n;null!==(n=(L=b)[Z=t])&&void 0!==n||(L[Z]=[]),b[t].push(e)}))})),{lineClassNames:b,code:n}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,$(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){_(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Y.codeBlockContainer,I.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,i.useState)(),o=(0,i.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{o()}),[o]),function(e,t,n=ie){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,i.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var se=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function be({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const s=r({line:e,className:(0,c.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},i({token:e})),t)));return(0,o.jsxs)("span",de(ue({},s),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,i.useState)(!1),s=(0,i.useRef)(void 0),l=(0,i.useCallback)((()=>{(0,pe.Z)(e),r(!0),s.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ve(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ke(e){return(0,o.jsx)("svg",ve(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Ae={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Ae.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Ae.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:t="",metastring:n,title:r,showLineNumbers:s,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const b=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),p=h(),m=function(){const[e,t]=(0,i.useState)(!1),[n,r]=(0,i.useState)(!1),o=(0,i.useRef)(null),c=(0,i.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),s=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,s),(0,i.useEffect)((()=>{s()}),[e,s]),(0,i.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(G))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:g,code:y}=U(e,{metastring:n,language:b,magicComments:u}),O=null!=s?s:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,b&&!t.includes(`language-${b}`)&&`language-${b}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(se.y$,{theme:p,code:y,language:null!=b?b:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:i})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(be,{line:e,getLineProps:r,getTokenProps:i,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Pe,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function De(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ee(e,t,n[t])}))}return e}const Te=(Me=function(e){var{children:t}=e,n=De(e,["children"]);const r=(0,s.Z)(),c=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof c?Se:re;return(0,o.jsx)(l,Ce(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(C,Be({scope:R},e)):(0,o.jsx)(Me,Be({},e))});var Me;function Re(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Le(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Re(e,t,n[t])}))}return e}({},e))}},64782:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},3732:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/\u56fe\u7247-c3c014b00b204c4fec2ad5e402e5521d.png"},12048:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},87064:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},69799:(e,t,n)=>{n.r(t),n.d(t,{AdmonitionWithoutHeading:()=>y,TestLink:()=>O,assets:()=>g,contentTitle:()=>m,default:()=>v,frontMatter:()=>h,metadata:()=>j,toc:()=>x});var r=n(24246),o=n(71670),i=n(97555),c=n(61132),s=n(27378);function l(){const[e,t]=(0,s.useState)(!1);return(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"MyComponent rendered !"}),(0,r.jsxs)("p",{children:["bool=",e?"true":"false"]}),(0,r.jsx)("p",{children:(0,r.jsx)("button",{onClick:()=>t((e=>!e)),children:"toggle bool"})})]})}var a=n(6698),u=n(38112),d=n(97408),b=n(5254),p=n(77773),f=n(41428);const h={title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},m="Markdown .mdx tests",j={type:"mdx",permalink:"/tests/pages/markdown-tests-mdx",source:"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx",title:"Markdown Page tests title",description:"Markdown Page tests description",frontMatter:{title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx",unlisted:!1},g={};function y(e){return(0,r.jsx)(p.Z,{...e,type:"info",icon:null,title:null,children:"Admonition content without heading"})}function O({noCheck:e,...t}){return(0,r.jsx)(f.Z,{...t,"data-noBrokenLinkCheck":e,children:(e?"\u274c":"\u2705")+" "+(t.to??t.href)+(t.target?` (target=${t.target})`:"")})}const x=[{value:"Using absolute path",id:"using-absolute-path",level:3},{value:"Tab",id:"tab",level:3},{value:"Comments",id:"comments",level:2},{value:"Import code block from source code file",id:"import-code-block-from-source-code-file",level:2},{value:"Test",id:"test",level:2},{value:"Code block test",id:"code-block-test",level:2},{value:"Mermaid",id:"mermaid",level:2},{value:"Custom heading ID",id:"custom",level:2},{value:"Weird heading",id:"\u4f60\u597d",level:3},{value:"Weird heading",id:"2022.1.1",level:3},{value:"Weird heading",id:"a#b",level:3},{value:"Weird heading",id:"a b",level:3},{value:"Weird heading",id:"a{b",level:3},{value:"Pipe",id:"pipe",level:2},{value:"Images edge cases",id:"images-edge-cases",level:2},{value:"Details",id:"details",level:2},{value:"Task list",id:"task-list",level:2},{value:"Emojis",id:"emojis",level:2},{value:"Admonitions",id:"admonitions",level:2},{value:"Linking",id:"linking",level:2},{value:"Linking to assets",id:"linking-to-assets",level:3},{value:"Linking to non-SPA page hosted within website",id:"linking-to-non-spa-page-hosted-within-website",level:3},{value:"Linking to non-SPA page with Link component",id:"linking-to-non-spa-page-with-link-component",level:3},{value:"Linking to JSON",id:"linking-to-json",level:3}];function w(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",input:"input",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:()=>alert("unsafe :s"),children:"Should not alert"}),"\n",(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"markdown-mdx-tests",children:"Markdown .mdx tests"})}),"\n",(0,r.jsx)(t.p,{children:"This is a page generated from Markdown to illustrate the Markdown page feature and test some edge cases."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Useful information."})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Button() {\n return (\n <button type=\"button\" onClick={() => alert('hey')}>\n Click me!\n </button>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h3,{id:"using-absolute-path",children:"Using absolute path"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(87064).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.h3,{id:"tab",children:"Tab"}),"\n","\n","\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(c.Z,{value:"apple",label:"Apple",default:!0,children:(0,r.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,r.jsx)(c.Z,{value:"orange",label:"Orange",children:(0,r.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})}),(0,r.jsx)(c.Z,{value:"banana",label:"Banana",children:(0,r.jsx)(t.p,{children:"This is a banana \ud83c\udf4c"})})]}),"\n",(0,r.jsx)(t.h2,{id:"comments",children:"Comments"}),"\n",(0,r.jsx)(t.p,{children:"Html comment: "}),"\n",(0,r.jsx)(t.p,{children:"Html comment multi-line:"}),"\n",(0,r.jsx)(t.p,{children:"MDX comment: "}),"\n",(0,r.jsx)(t.p,{children:"MDX comment multi-line:"}),"\n","\n",(0,r.jsx)(t.h2,{id:"import-code-block-from-source-code-file",children:"Import code block from source code file"}),"\n","\n","\n",(0,r.jsx)(t.p,{children:"Let's say you have a React component."}),"\n",(0,r.jsx)(t.p,{children:"You can import and use it in MDX:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import MyComponent from './myComponent';\n\n<MyComponent />;\n"})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(l,{})}),"\n",(0,r.jsxs)(t.p,{children:["But you can also display its source code directly in MDX, thanks to ",(0,r.jsx)(t.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\n\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock className=\"language-jsx\">{MyComponentSource}</CodeBlock>;\n"})}),"\n","\n","\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(u.Z,{className:"language-jsx",children:d.Z})}),"\n",(0,r.jsx)(t.h2,{id:"test",children:"Test"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Demo() {\n useEffect(() => console.log('mount'), []);\n return null;\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"code-block-test",children:"Code block test"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="Title"',children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n // highlight-start\n {/* prettier-ignore */}\n long long long long long long long long long long long long line\n {/* prettier-ignore */}\n // highlight-end\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"mermaid",children:"Mermaid"}),"\n",(0,r.jsx)(t.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,r.jsx)(t.h2,{id:"custom",children:"Custom heading ID"}),"\n",(0,r.jsx)(t.h3,{id:"\u4f60\u597d",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"2022.1.1",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a#b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a{b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h2,{id:"pipe",children:"Pipe"}),"\n",(0,r.jsxs)(t.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsxs)(t.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsx)(t.h2,{id:"images-edge-cases",children:"Images edge cases"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(12048).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(3732).Z+"",width:"2282",height:"1066"})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(64782).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.h2,{id:"details",children:"Details"}),"\n",(0,r.jsx)(b.Z,{children:(0,r.jsx)(t.p,{children:"Details without a summary"})}),"\n","\n",(0,r.jsx)(b.Z,{summary:"My Headline",children:"Some Text"}),"\n",(0,r.jsx)(b.Z,{children:"Some Text"}),"\n",(0,r.jsx)(t.p,{children:"This is a fragment:"}),"\n",(0,r.jsx)(r.Fragment,{children:"Hello"}),"\n",(0,r.jsx)(t.p,{children:"It should work :)"}),"\n",(0,r.jsx)(t.h2,{id:"task-list",children:"Task list"}),"\n",(0,r.jsx)(t.p,{children:"A list:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Simple"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Has simple"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Styles"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Another list:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{children:["Nested","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Should be well-formatted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","No matter"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","How weird"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Can be arbitrarily nested:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{children:["Level","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{children:["Another level","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{children:["Deeper","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"emojis",children:"Emojis"}),"\n",(0,r.jsxs)(t.p,{children:["Emojis in this text will be replaced with ",(0,r.jsx)(t.a,{href:"https://www.npmjs.com/package/remark-emoji",children:"remark-emoji"}),": ","\ud83d\udc36"," ","\ud83d\udc4d"]}),"\n",(0,r.jsx)(t.h2,{id:"admonitions",children:"Admonitions"}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(t.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (old syntax)"]}),(0,r.jsx)(t.p,{children:"Admonition body"})]}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(t.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (directive label syntax)"]}),(0,r.jsx)(t.p,{children:"Admonition body"})]}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["Admonition alias ",(0,r.jsx)(t.code,{children:":::important"})," should have Important title"]})}),"\n",(0,r.jsxs)(t.admonition,{title:"title",type:"note",children:[(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]}),(0,r.jsxs)(t.admonition,{title:"nested Title",type:"note",children:[(0,r.jsx)(t.admonition,{title:"very nested Title",type:"tip",children:(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]})}),(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]})]}),(0,r.jsx)(t.p,{children:"hey"})]}),"\n",(0,r.jsxs)(t.admonition,{title:"Use tabs in admonitions",type:"tip",children:[(0,r.jsx)(t.admonition,{title:"Admonition nested",type:"info",children:(0,r.jsx)(t.p,{children:"test"})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(c.Z,{value:"apple",label:"Apple",children:(0,r.jsx)(t.admonition,{title:"Admonition in tab",type:"note",children:(0,r.jsx)(t.p,{children:"test"})})}),(0,r.jsx)(c.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,r.jsx)(c.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})]}),"\n","\n","\n",(0,r.jsx)(y,{}),"\n",(0,r.jsx)(t.h2,{id:"linking",children:"Linking"}),"\n",(0,r.jsx)(t.p,{children:"This is a test page to see if Docusaurus Markdown features are working properly"}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-assets",children:"Linking to assets"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3337",children:"#3337"})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(9947).Z+"",children:"/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(4090).Z+"",children:"/someFile.xyz"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(9947).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(4090).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.xyz"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-non-spa-page-hosted-within-website",children:"Linking to non-SPA page hosted within website"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3309",children:"#3309"})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname:///dogfooding/javadoc",children:"pathname:///dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname:///dogfooding/javadoc/index.html",children:"pathname:///dogfooding/javadoc/index.html"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname://../dogfooding/javadoc",children:"pathname://../dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname://../dogfooding/javadoc/index.html",children:"pathname://../dogfooding/javadoc/index.html"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-non-spa-page-with-link-component",children:"Linking to non-SPA page with Link component"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9758",children:"#9758"}),", these external urls should not be reported by the broken links checker:"]}),"\n","\n","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"pathname:///dogfooding/javadoc#goodlink1"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"pathname:///dogfooding/javadoc#goodlink2"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#goodlink3",target:"_blank"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#goodlink4",target:"_blank"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"These links are broken (try to single click on them) and should be reported. We need to explicitly disable the broken link checker for them:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#badlink1",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#badlink2",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#badlink3",target:"_self",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#badlink4",target:"_self",noCheck:!0}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-json",children:"Linking to JSON"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(36261).Z+"",children:"./script.js"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(76804).Z+"",children:"./data.json"})}),"\n"]}),"\n"]})]})}function v(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(w,{...e})}):w(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49409],{9947:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf"},4090:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz"},36261:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js"},76804:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json"},97408:(e,t,n)=>{n.d(t,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",i(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,n)=>{n.d(t,{Z:()=>se});var r=n(24246),o=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function s(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),i=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children);var s;const l=null!==(s=e.title)&&void 0!==s?s:t;return c(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}({},e,l&&{title:l}),{children:n})}var l=n(40624),a=n(36712),u=n(89583);const d={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function b({type:e,className:t,children:n}){return(0,r.jsx)("div",{className:(0,l.Z)(u.k.common.admonition,u.k.common.admonitionType(e),d.admonition,t),children:n})}function p({icon:e,title:t}){return(0,r.jsxs)("div",{className:d.admonitionHeading,children:[(0,r.jsx)("span",{className:d.admonitionIcon,children:e}),t]})}function f({children:e}){return e?(0,r.jsx)("div",{className:d.admonitionContent,children:e}):null}function h(e){const{type:t,icon:n,title:o,children:i,className:c}=e;return(0,r.jsxs)(b,{type:t,className:c,children:[o||n?(0,r.jsx)(p,{title:o,icon:n}):null,(0,r.jsx)(f,{children:i})]})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){return(0,r.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const x={icon:(0,r.jsx)(g,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function w(e){return(0,r.jsx)(h,O(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){y(e,t,n[t])}))}return e}({},x,e),{className:(0,l.Z)("alert alert--secondary",e.className),children:e.children}))}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function A(e){return(0,r.jsx)("svg",k(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function P(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const N={icon:(0,r.jsx)(A,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(e){return(0,r.jsx)(h,S(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){P(e,t,n[t])}))}return e}({},N,e),{className:(0,l.Z)("alert alert--success",e.className),children:e.children}))}var D=n(35434);function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const T={icon:(0,r.jsx)(D.Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function M(e){return(0,r.jsx)(h,B(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){E(e,t,n[t])}))}return e}({},T,e),{className:(0,l.Z)("alert alert--info",e.className),children:e.children}))}function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Z(e){return(0,r.jsx)("svg",L(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function J(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const z={icon:(0,r.jsx)(Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function W(e){return(0,r.jsx)("svg",G(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){V(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function H(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const q={icon:(0,r.jsx)(W,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function Q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function X(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const K={icon:(0,r.jsx)(Z,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){U(e,t,n[t])}))}return e}const _={note:w,tip:C,info:M,warning:function(e){return(0,r.jsx)(h,J(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}({},z,e),{className:(0,l.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(h,H(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){F(e,t,n[t])}))}return e}({},q,e),{className:(0,l.Z)("alert alert--danger",e.className),children:e.children}))}},$={secondary:e=>(0,r.jsx)(w,Y({title:"secondary"},e)),important:e=>(0,r.jsx)(M,Y({title:"important"},e)),success:e=>(0,r.jsx)(C,Y({title:"success"},e)),caution:function(e){return(0,r.jsx)(h,X(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Q(e,t,n[t])}))}return e}({},K,e),{className:(0,l.Z)("alert alert--warning",e.className),children:e.children}))}},ee=Y({},_,$);var te=n(52615);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re,oe;const ie=(re=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ne(e,t,n[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,r.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,r.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,r.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(re,Object.getOwnPropertyDescriptors(oe)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(oe)).forEach((function(e){Object.defineProperty(re,e,Object.getOwnPropertyDescriptor(oe,e))})),re);function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(e){const t=s(e),n=(o=t.type,ie[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ie.info));var o;return(0,r.jsx)(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ce(e,t,n[t])}))}return e}({},t))}},5254:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(24246),o=n(27378),i=n(40624),c=n(80474),s=n(29088),l=n(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function b(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function f(e,t){return!!e&&(e===t||f(e.parentElement,t))}function h(e){var{summary:t,children:n}=e,h=b(e,["summary","children"]);(0,c.Z)().collectAnchor(h.id);const m=(0,s.Z)(),j=(0,o.useRef)(null),{collapsed:g,setCollapsed:y}=(0,l.u)({initialState:!h.open}),[O,x]=(0,o.useState)(h.open),w=o.isValidElement(t)?t:(0,r.jsx)("summary",{children:null!=t?t:"Details"});return(0,r.jsxs)("details",d(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){u(e,t,n[t])}))}return e}({},h),{ref:j,open:O,"data-collapsed":g,className:(0,i.Z)(a.details,m&&a.isBrowser,h.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&f(t,j.current)&&(e.preventDefault(),g?(y(!1),x(!0)):y(!0))},children:[w,(0,r.jsx)(l.z,{lazy:!1,collapsed:g,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{y(e),x(!e)},children:(0,r.jsx)("div",{className:a.collapsibleContent,children:n})})]}))}const m={details:"details_Cn_P"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(){return g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g.apply(this,arguments)}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const O="alert alert--info";function x(e){var t=g({},e);return(0,r.jsx)(h,y(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}({},t),{className:(0,i.Z)(O,m.details,t.className)}))}},61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const i={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(i.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>S});var r=n(24246),o=n(27378),i=n(40624),c=n(75527),s=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,s.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),i=(0,a._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){b(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[i,c]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=h(e),[c,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[a,u]=j({queryString:n,groupId:r}),[b,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:b;return m({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{f&&s(f)}),[f]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),p(e)}),[u,p,i]),tabValues:i}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function v(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:o,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),i=s[r].value;i!==n&&(a(t),o(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",v(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,i.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function A({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=g(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(k,w({},t,e)),(0,r.jsx)(A,w({},t,e))]})}function S(e){const t=(0,y.Z)();return(0,r.jsx)(P,v(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),o=(n(27378),n(29088));function i({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),o=(n(27378),n(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function l(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:a}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(s({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(i.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:a,children:e})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Le});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),i=n(27378),c=n(40624),s=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),b=n(30691),p=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,p.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(j.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(b.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function A(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function P(){const e=(0,s.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const N=e=>`${e};`;function C(e){var t,{children:n,transformCode:r}=e,i=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:s}}=c,a=h();var d;const b=null!==(d=null===(t=i.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:b,transformCode:null!=r?r:N,theme:a},i),{children:"top"===s?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(A,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(A,{})]})}))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){D(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({React:i},i,r);var L,Z,I=n(89583),J=n(6324),z=n.n(J);function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const G=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),W=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(q=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){V(e,t,n[t])}))}return e}({},F),Q=null!=(Q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?Q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(Q)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(Q)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(Q,e))})),q);var q,Q;const X=Object.keys(F);function K(e,t){const n=e.map((e=>{const{start:n,end:r}=H[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function U(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:i}=t;if(i&&W.test(i)){const e=i.match(W).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=z()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return K(["js","jsBlock"],t);case"jsx":case"tsx":return K(["js","jsBlock","jsx"],t);case"html":return K(["js","jsBlock","html"],t);case"python":case"py":case"bash":return K(["bash"],t);case"markdown":case"md":return K(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return K(["tex"],t);case"lua":case"haskell":case"sql":return K(["lua"],t);case"wasm":return K(["wasm"],t);case"vb":case"vba":case"visual-basic":return K(["vb","rem"],t);case"vbnet":return K(["vbnet","rem"],t);case"batch":return K(["rem"],t);case"basic":return K(["rem","f90"],t);case"fsharp":return K(["js","ml"],t);case"ocaml":case"sml":return K(["ml"],t);case"fortran":return K(["f90"],t);case"cobol":return K(["cobol"],t);default:return K(X,t)}}(r,o),s=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<s.length;){const e=s[p].match(c);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${p},`:u[t]?l[u[t]].start=p:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${p-1},`),s.splice(p,1)}n=s.join("\n");const b={};return Object.entries(l).forEach((([e,{range:t}])=>{z()(t).forEach((t=>{var n;null!==(n=(L=b)[Z=t])&&void 0!==n||(L[Z]=[]),b[t].push(e)}))})),{lineClassNames:b,code:n}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,$(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){_(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Y.codeBlockContainer,I.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,i.useState)(),o=(0,i.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{o()}),[o]),function(e,t,n=ie){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,i.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var se=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function be({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const s=r({line:e,className:(0,c.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},i({token:e})),t)));return(0,o.jsxs)("span",de(ue({},s),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,i.useState)(!1),s=(0,i.useRef)(void 0),l=(0,i.useCallback)((()=>{(0,pe.Z)(e),r(!0),s.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ve(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ke(e){return(0,o.jsx)("svg",ve(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Ae={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Ae.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Ae.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:t="",metastring:n,title:r,showLineNumbers:s,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const b=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),p=h(),m=function(){const[e,t]=(0,i.useState)(!1),[n,r]=(0,i.useState)(!1),o=(0,i.useRef)(null),c=(0,i.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),s=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,s),(0,i.useEffect)((()=>{s()}),[e,s]),(0,i.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(G))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:g,code:y}=U(e,{metastring:n,language:b,magicComments:u}),O=null!=s?s:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,b&&!t.includes(`language-${b}`)&&`language-${b}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(se.y$,{theme:p,code:y,language:null!=b?b:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:i})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(be,{line:e,getLineProps:r,getTokenProps:i,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Pe,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function De(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ee(e,t,n[t])}))}return e}const Te=(Me=function(e){var{children:t}=e,n=De(e,["children"]);const r=(0,s.Z)(),c=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof c?Se:re;return(0,o.jsx)(l,Ce(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(C,Be({scope:R},e)):(0,o.jsx)(Me,Be({},e))});var Me;function Re(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Le(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Re(e,t,n[t])}))}return e}({},e))}},64782:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},3732:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/\u56fe\u7247-c3c014b00b204c4fec2ad5e402e5521d.png"},12048:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},87064:(e,t,n)=>{n.d(t,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},69799:(e,t,n)=>{n.r(t),n.d(t,{AdmonitionWithoutHeading:()=>y,TestLink:()=>O,assets:()=>g,contentTitle:()=>m,default:()=>v,frontMatter:()=>h,metadata:()=>j,toc:()=>x});var r=n(24246),o=n(71670),i=n(97555),c=n(61132),s=n(27378);function l(){const[e,t]=(0,s.useState)(!1);return(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"MyComponent rendered !"}),(0,r.jsxs)("p",{children:["bool=",e?"true":"false"]}),(0,r.jsx)("p",{children:(0,r.jsx)("button",{onClick:()=>t((e=>!e)),children:"toggle bool"})})]})}var a=n(6698),u=n(38112),d=n(97408),b=n(5254),p=n(77773),f=n(41428);const h={title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},m="Markdown .mdx tests",j={type:"mdx",permalink:"/tests/pages/markdown-tests-mdx",source:"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx",title:"Markdown Page tests title",description:"Markdown Page tests description",frontMatter:{title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx",unlisted:!1},g={};function y(e){return(0,r.jsx)(p.Z,{...e,type:"info",icon:null,title:null,children:"Admonition content without heading"})}function O({noCheck:e,...t}){return(0,r.jsx)(f.Z,{...t,"data-noBrokenLinkCheck":e,children:(e?"\u274c":"\u2705")+" "+(t.to??t.href)+(t.target?` (target=${t.target})`:"")})}const x=[{value:"Using absolute path",id:"using-absolute-path",level:3},{value:"Tab",id:"tab",level:3},{value:"Comments",id:"comments",level:2},{value:"Import code block from source code file",id:"import-code-block-from-source-code-file",level:2},{value:"Test",id:"test",level:2},{value:"Code block test",id:"code-block-test",level:2},{value:"Mermaid",id:"mermaid",level:2},{value:"Custom heading ID",id:"custom",level:2},{value:"Weird heading",id:"\u4f60\u597d",level:3},{value:"Weird heading",id:"2022.1.1",level:3},{value:"Weird heading",id:"a#b",level:3},{value:"Weird heading",id:"a b",level:3},{value:"Weird heading",id:"a{b",level:3},{value:"Pipe",id:"pipe",level:2},{value:"Images edge cases",id:"images-edge-cases",level:2},{value:"Details",id:"details",level:2},{value:"Task list",id:"task-list",level:2},{value:"Emojis",id:"emojis",level:2},{value:"Admonitions",id:"admonitions",level:2},{value:"Linking",id:"linking",level:2},{value:"Linking to assets",id:"linking-to-assets",level:3},{value:"Linking to non-SPA page hosted within website",id:"linking-to-non-spa-page-hosted-within-website",level:3},{value:"Linking to non-SPA page with Link component",id:"linking-to-non-spa-page-with-link-component",level:3},{value:"Linking to JSON",id:"linking-to-json",level:3}];function w(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",input:"input",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:()=>alert("unsafe :s"),children:"Should not alert"}),"\n",(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"markdown-mdx-tests",children:"Markdown .mdx tests"})}),"\n",(0,r.jsx)(t.p,{children:"This is a page generated from Markdown to illustrate the Markdown page feature and test some edge cases."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Useful information."})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Button() {\n return (\n <button type=\"button\" onClick={() => alert('hey')}>\n Click me!\n </button>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h3,{id:"using-absolute-path",children:"Using absolute path"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(87064).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.h3,{id:"tab",children:"Tab"}),"\n","\n","\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(c.Z,{value:"apple",label:"Apple",default:!0,children:(0,r.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,r.jsx)(c.Z,{value:"orange",label:"Orange",children:(0,r.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})}),(0,r.jsx)(c.Z,{value:"banana",label:"Banana",children:(0,r.jsx)(t.p,{children:"This is a banana \ud83c\udf4c"})})]}),"\n",(0,r.jsx)(t.h2,{id:"comments",children:"Comments"}),"\n",(0,r.jsx)(t.p,{children:"Html comment: "}),"\n",(0,r.jsx)(t.p,{children:"Html comment multi-line:"}),"\n",(0,r.jsx)(t.p,{children:"MDX comment: "}),"\n",(0,r.jsx)(t.p,{children:"MDX comment multi-line:"}),"\n","\n",(0,r.jsx)(t.h2,{id:"import-code-block-from-source-code-file",children:"Import code block from source code file"}),"\n","\n","\n",(0,r.jsx)(t.p,{children:"Let's say you have a React component."}),"\n",(0,r.jsx)(t.p,{children:"You can import and use it in MDX:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import MyComponent from './myComponent';\n\n<MyComponent />;\n"})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(l,{})}),"\n",(0,r.jsxs)(t.p,{children:["But you can also display its source code directly in MDX, thanks to ",(0,r.jsx)(t.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\n\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock className=\"language-jsx\">{MyComponentSource}</CodeBlock>;\n"})}),"\n","\n","\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(u.Z,{className:"language-jsx",children:d.Z})}),"\n",(0,r.jsx)(t.h2,{id:"test",children:"Test"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Demo() {\n useEffect(() => console.log('mount'), []);\n return null;\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"code-block-test",children:"Code block test"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="Title"',children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n // highlight-start\n {/* prettier-ignore */}\n long long long long long long long long long long long long line\n {/* prettier-ignore */}\n // highlight-end\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"mermaid",children:"Mermaid"}),"\n",(0,r.jsx)(t.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,r.jsx)(t.h2,{id:"custom",children:"Custom heading ID"}),"\n",(0,r.jsx)(t.h3,{id:"\u4f60\u597d",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"2022.1.1",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a#b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h3,{id:"a{b",children:"Weird heading"}),"\n",(0,r.jsx)(t.h2,{id:"pipe",children:"Pipe"}),"\n",(0,r.jsxs)(t.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsxs)(t.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsx)(t.h2,{id:"images-edge-cases",children:"Images edge cases"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(12048).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(3732).Z+"",width:"2282",height:"1066"})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(64782).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(t.h2,{id:"details",children:"Details"}),"\n",(0,r.jsx)(b.Z,{children:(0,r.jsx)(t.p,{children:"Details without a summary"})}),"\n","\n",(0,r.jsx)(b.Z,{summary:"My Headline",children:"Some Text"}),"\n",(0,r.jsx)(b.Z,{children:"Some Text"}),"\n",(0,r.jsx)(t.p,{children:"This is a fragment:"}),"\n",(0,r.jsx)(r.Fragment,{children:"Hello"}),"\n",(0,r.jsx)(t.p,{children:"It should work :)"}),"\n",(0,r.jsx)(t.h2,{id:"task-list",children:"Task list"}),"\n",(0,r.jsx)(t.p,{children:"A list:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Simple"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Has simple"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Styles"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Another list:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{children:["Nested","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Should be well-formatted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","No matter"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","How weird"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Can be arbitrarily nested:"}),"\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{children:["Level","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{children:["Another level","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{children:["Deeper","\n",(0,r.jsxs)(t.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{className:"task-list-item",children:[(0,r.jsx)(t.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"emojis",children:"Emojis"}),"\n",(0,r.jsxs)(t.p,{children:["Emojis in this text will be replaced with ",(0,r.jsx)(t.a,{href:"https://www.npmjs.com/package/remark-emoji",children:"remark-emoji"}),": ","\ud83d\udc36"," ","\ud83d\udc4d"]}),"\n",(0,r.jsx)(t.h2,{id:"admonitions",children:"Admonitions"}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(t.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (old syntax)"]}),(0,r.jsx)(t.p,{children:"Admonition body"})]}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(t.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (directive label syntax)"]}),(0,r.jsx)(t.p,{children:"Admonition body"})]}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["Admonition alias ",(0,r.jsx)(t.code,{children:":::important"})," should have Important title"]})}),"\n",(0,r.jsxs)(t.admonition,{title:"title",type:"note",children:[(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]}),(0,r.jsxs)(t.admonition,{title:"nested Title",type:"note",children:[(0,r.jsx)(t.admonition,{title:"very nested Title",type:"tip",children:(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]})}),(0,r.jsxs)(t.p,{children:["Some ",(0,r.jsx)(t.strong,{children:"content"})," with ",(0,r.jsx)(t.em,{children:"Markdown"})," ",(0,r.jsx)(t.code,{children:"syntax"}),"."]})]}),(0,r.jsx)(t.p,{children:"hey"})]}),"\n",(0,r.jsxs)(t.admonition,{title:"Use tabs in admonitions",type:"tip",children:[(0,r.jsx)(t.admonition,{title:"Admonition nested",type:"info",children:(0,r.jsx)(t.p,{children:"test"})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(c.Z,{value:"apple",label:"Apple",children:(0,r.jsx)(t.admonition,{title:"Admonition in tab",type:"note",children:(0,r.jsx)(t.p,{children:"test"})})}),(0,r.jsx)(c.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,r.jsx)(c.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})]}),"\n","\n","\n",(0,r.jsx)(y,{}),"\n",(0,r.jsx)(t.h2,{id:"linking",children:"Linking"}),"\n",(0,r.jsx)(t.p,{children:"This is a test page to see if Docusaurus Markdown features are working properly"}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-assets",children:"Linking to assets"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3337",children:"#3337"})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(9947).Z+"",children:"/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(4090).Z+"",children:"/someFile.xyz"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(9947).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(4090).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.xyz"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-non-spa-page-hosted-within-website",children:"Linking to non-SPA page hosted within website"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3309",children:"#3309"})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname:///dogfooding/javadoc",children:"pathname:///dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname:///dogfooding/javadoc/index.html",children:"pathname:///dogfooding/javadoc/index.html"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname://../dogfooding/javadoc",children:"pathname://../dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"pathname://../dogfooding/javadoc/index.html",children:"pathname://../dogfooding/javadoc/index.html"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-non-spa-page-with-link-component",children:"Linking to non-SPA page with Link component"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9758",children:"#9758"}),", these external urls should not be reported by the broken links checker:"]}),"\n","\n","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"pathname:///dogfooding/javadoc#goodlink1"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"pathname:///dogfooding/javadoc#goodlink2"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#goodlink3",target:"_blank"}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#goodlink4",target:"_blank"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"These links are broken (try to single click on them) and should be reported. We need to explicitly disable the broken link checker for them:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#badlink1",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#badlink2",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{to:"/dogfooding/javadoc#badlink3",target:"_self",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(O,{href:"/dogfooding/javadoc#badlink4",target:"_self",noCheck:!0}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"linking-to-json",children:"Linking to JSON"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(36261).Z+"",children:"./script.js"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(76804).Z+"",children:"./data.json"})}),"\n"]}),"\n"]})]})}function v(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(w,{...e})}):w(e)}}}]); \ No newline at end of file diff --git a/assets/js/2d0d74c6.b5e9b4aa.js b/assets/js/2d0d74c6.b5e9b4aa.js deleted file mode 100644 index 4946a192ed5f..000000000000 --- a/assets/js/2d0d74c6.b5e9b4aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96318],{55104:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var t=n(24246),o=n(71670);const r={},i="What's next?",a={id:"guides/whats-next",title:"What's next?",description:"Congratulations! You have understood most core features of Docusaurus now. You have:",source:"@site/docs/guides/whats-next.mdx",sourceDirName:"guides",slug:"/guides/whats-next",permalink:"/docs/guides/whats-next",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"docs",previous:{title:"Using Crowdin",permalink:"/docs/i18n/crowdin"},next:{title:"Advanced Tutorials",permalink:"/docs/advanced/"}},d={},c=[];function l(e){const s={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"whats-next",children:"What's next?"})}),"\n",(0,t.jsx)(s.p,{children:"Congratulations! You have understood most core features of Docusaurus now. You have:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/creating-pages",children:"Used the pages plugin"})," to create a standalone React / Markdown page"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/docs-introduction",children:"Used the docs plugin"})," to create documentation pages. This includes ",(0,t.jsx)(s.a,{href:"/docs/sidebar",children:"configuring the sidebar"}),", and even ",(0,t.jsx)(s.a,{href:"/docs/versioning",children:"versioning"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/blog",children:"Used the blog plugin"})," to create a fully featured blog"]}),"\n",(0,t.jsxs)(s.li,{children:["Tried your hands on ",(0,t.jsx)(s.a,{href:"/docs/markdown-features",children:"a range of Markdown features"}),", which are useful for all content plugins"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/styling-layout",children:"Used stylesheets"})," or ",(0,t.jsx)(s.a,{href:"/docs/swizzling",children:"swizzling"})," to customize your site's appearance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/static-assets",children:"Included images and other assets"})," in your pages"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/search",children:"Added search"})," to your site"]}),"\n",(0,t.jsxs)(s.li,{children:["Understood how ",(0,t.jsx)(s.a,{href:"/docs/browser-support",children:"browser support"})," and ",(0,t.jsx)(s.a,{href:"/docs/seo",children:"SEO"})," are done through standard Docusaurus APIs"]}),"\n",(0,t.jsxs)(s.li,{children:["Learned about how ",(0,t.jsx)(s.a,{href:"/docs/using-plugins",children:"individual plugins"})," are installed and configured"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/deployment",children:"Deployed"})," your site to a content host"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/i18n/tutorial",children:"Internationalized"})," your site to include multiple languages"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["At this point, you probably have a big ",(0,t.jsx)(s.code,{children:"docusaurus.config.js"})," already\ud83d\ude04 However, you haven't written much code yet! Most of the features are implemented through calling encapsulated Docusaurus APIs. As you continue your journey, you can take three paths:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Learn more advanced Docusaurus concepts. This will help you gain a deeper understand of what the APIs do."}),"\n",(0,t.jsxs)(s.li,{children:["Read about ",(0,t.jsx)(s.a,{href:"/docs/docusaurus-core",children:"all existing APIs"}),". Many of them have not been covered in the Guides!"]}),"\n",(0,t.jsxs)(s.li,{children:["Learn to ",(0,t.jsx)(s.a,{href:"/docs/api/plugin-methods/",children:"develop a plugin"})," to extend the functionality of your site."]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var t=n(27378);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d0d74c6.cc3d2f3e.js b/assets/js/2d0d74c6.cc3d2f3e.js new file mode 100644 index 000000000000..623a26db41a5 --- /dev/null +++ b/assets/js/2d0d74c6.cc3d2f3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96318],{55104:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var t=n(24246),o=n(71670);const r={},a="What's next?",i={id:"guides/whats-next",title:"What's next?",description:"Congratulations! You have understood most core features of Docusaurus now. You have:",source:"@site/docs/guides/whats-next.mdx",sourceDirName:"guides",slug:"/guides/whats-next",permalink:"/docs/guides/whats-next",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"docs",previous:{title:"Using Crowdin",permalink:"/docs/i18n/crowdin"},next:{title:"Advanced Tutorials",permalink:"/docs/advanced/"}},d={},c=[];function l(e){const s={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"whats-next",children:"What's next?"})}),"\n",(0,t.jsx)(s.p,{children:"Congratulations! You have understood most core features of Docusaurus now. You have:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/creating-pages",children:"Used the pages plugin"})," to create a standalone React / Markdown page"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/docs-introduction",children:"Used the docs plugin"})," to create documentation pages. This includes ",(0,t.jsx)(s.a,{href:"/docs/sidebar",children:"configuring the sidebar"}),", and even ",(0,t.jsx)(s.a,{href:"/docs/versioning",children:"versioning"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/blog",children:"Used the blog plugin"})," to create a fully featured blog"]}),"\n",(0,t.jsxs)(s.li,{children:["Tried your hands on ",(0,t.jsx)(s.a,{href:"/docs/markdown-features",children:"a range of Markdown features"}),", which are useful for all content plugins"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/styling-layout",children:"Used stylesheets"})," or ",(0,t.jsx)(s.a,{href:"/docs/swizzling",children:"swizzling"})," to customize your site's appearance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/static-assets",children:"Included images and other assets"})," in your pages"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/search",children:"Added search"})," to your site"]}),"\n",(0,t.jsxs)(s.li,{children:["Understood how ",(0,t.jsx)(s.a,{href:"/docs/browser-support",children:"browser support"})," and ",(0,t.jsx)(s.a,{href:"/docs/seo",children:"SEO"})," are done through standard Docusaurus APIs"]}),"\n",(0,t.jsxs)(s.li,{children:["Learned about how ",(0,t.jsx)(s.a,{href:"/docs/using-plugins",children:"individual plugins"})," are installed and configured"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/deployment",children:"Deployed"})," your site to a content host"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/i18n/tutorial",children:"Internationalized"})," your site to include multiple languages"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["At this point, you probably have a big ",(0,t.jsx)(s.code,{children:"docusaurus.config.js"})," already\ud83d\ude04 However, you haven't written much code yet! Most of the features are implemented through calling encapsulated Docusaurus APIs. As you continue your journey, you can take three paths:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Learn more advanced Docusaurus concepts. This will help you gain a deeper understand of what the APIs do."}),"\n",(0,t.jsxs)(s.li,{children:["Read about ",(0,t.jsx)(s.a,{href:"/docs/docusaurus-core",children:"all existing APIs"}),". Many of them have not been covered in the Guides!"]}),"\n",(0,t.jsxs)(s.li,{children:["Learn to ",(0,t.jsx)(s.a,{href:"/docs/api/plugin-methods/",children:"develop a plugin"})," to extend the functionality of your site."]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>i,a:()=>a});var t=n(27378);const o={},r=t.createContext(o);function a(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f283cc0.386d1a82.js b/assets/js/2f283cc0.386d1a82.js deleted file mode 100644 index bab3844f4414..000000000000 --- a/assets/js/2f283cc0.386d1a82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27762],{17798:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var d=s(24246),o=s(71670);const t={id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},r="Create a doc",i={id:"guides/docs/create-doc",title:"Create a doc",description:"Create a Markdown Document",source:"@site/docs/guides/docs/docs-create-doc.mdx",sourceDirName:"guides/docs",slug:"/create-doc",permalink:"/docs/create-doc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/docs-introduction"},next:{title:"Sidebar",permalink:"/docs/sidebar"}},c={},a=[{value:"Doc front matter",id:"doc-front-matter",level:2},{value:"Doc tags",id:"doc-tags",level:2},{value:"Organizing folder structure",id:"organizing-folder-structure",level:2},{value:"Document ID",id:"document-id",level:3},{value:"Doc URLs",id:"doc-urls",level:3},{value:"Sidebars",id:"sidebars",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"create-a-doc",children:"Create a doc"})}),"\n",(0,d.jsxs)(n.p,{children:["Create a Markdown file, ",(0,d.jsx)(n.code,{children:"greeting.md"}),", and place it under the ",(0,d.jsx)(n.code,{children:"docs"})," directory."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # root directory of your site\n\u251c\u2500\u2500 docs\n\u2502 \u2514\u2500\u2500 greeting.md\n\u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 pages\n\u251c\u2500\u2500 docusaurus.config.js\n\u251c\u2500\u2500 ...\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\ndescription: Create a doc page with rich content.\n---\n\n# Hello from Docusaurus\n\nAre you ready to create the documentation site for your open source project?\n\n## Headers\n\nwill show up on the table of contents on the upper right\n\nSo that your users will know what this page is all about without scrolling down or even without reading too much.\n\n## Only h2 and h3 will be in the TOC by default.\n\nYou can configure the TOC heading levels either per-document or in the theme configuration.\n\nThe headers are well-spaced so that the hierarchy is clear.\n\n- lists will help you\n- present the key points\n- that you want your users to remember\n - and you may nest them\n - multiple times\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsxs)(n.p,{children:["All files prefixed with an underscore (",(0,d.jsx)(n.code,{children:"_"}),") under the ",(0,d.jsx)(n.code,{children:"docs"}),' directory are treated as "partial" pages and will be ignored by default.']}),(0,d.jsxs)(n.p,{children:["Read more about ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/react#importing-markdown",children:"importing partial pages"}),"."]})]}),"\n",(0,d.jsx)(n.h2,{id:"doc-front-matter",children:"Doc front matter"}),"\n",(0,d.jsxs)(n.p,{children:["The ",(0,d.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," is used to provide additional metadata for your doc page. Front matter is optional\u2014Docusaurus will be able to infer all necessary metadata without the front matter. For example, the ",(0,d.jsx)(n.a,{href:"#doc-tags",children:"doc tags"})," feature introduced below requires using front matter. For all possible fields, see ",(0,d.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"the API documentation"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"doc-tags",children:"Doc tags"}),"\n",(0,d.jsxs)(n.p,{children:["Tags are declared in the front matter and introduce another dimension of categorization in addition to the ",(0,d.jsx)(n.a,{href:"/docs/sidebar",children:"docs sidebar"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:["It is possible to define tags inline, or to reference predefined tags declared in a ",(0,d.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#tags-file",children:(0,d.jsx)(n.code,{children:"tags file"})})," (optional, usually ",(0,d.jsx)(n.code,{children:"docs/tags.yml"}),")."]}),"\n",(0,d.jsx)(n.p,{children:"In the following example:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.code,{children:"docusaurus"})," references a predefined tag key declared in ",(0,d.jsx)(n.code,{children:"docs/tags.yml"})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.code,{children:"Releases"})," is an inline tag, because it does not exist in ",(0,d.jsx)(n.code,{children:"docs/tags.yml"})]}),"\n"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",metastring:'title="docs/my-doc.md"',children:"---\ntags:\n - Releases\n - docusaurus\n---\n\n# Title\n\nContent\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-yml",metastring:'title="docs/tags.yml"',children:"docusaurus:\n label: 'Docusaurus'\n permalink: '/docusaurus'\n description: 'Docs related to the Docusaurus framework'\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"tip",children:[(0,d.jsxs)(n.p,{children:["Tags can also be declared with ",(0,d.jsx)(n.code,{children:"tags: [Demo, Getting started]"}),"."]}),(0,d.jsxs)(n.p,{children:["Read more about all the possible ",(0,d.jsx)(n.a,{href:"https://www.w3schools.io/file/yaml-arrays/",children:"Yaml array syntaxes"}),"."]})]}),"\n",(0,d.jsx)(n.h2,{id:"organizing-folder-structure",children:"Organizing folder structure"}),"\n",(0,d.jsxs)(n.p,{children:["How the Markdown files are arranged under the ",(0,d.jsx)(n.code,{children:"docs"})," folder can have multiple impacts on Docusaurus content generation. However, most of them can be decoupled from the file structure."]}),"\n",(0,d.jsx)(n.h3,{id:"document-id",children:"Document ID"}),"\n",(0,d.jsxs)(n.p,{children:["Every document has a unique ",(0,d.jsx)(n.code,{children:"id"}),". By default, a document ",(0,d.jsx)(n.code,{children:"id"})," is the name of the document (without the extension) relative to the root docs directory."]}),"\n",(0,d.jsxs)(n.p,{children:["For example, the ID of ",(0,d.jsx)(n.code,{children:"greeting.md"})," is ",(0,d.jsx)(n.code,{children:"greeting"}),", and the ID of ",(0,d.jsx)(n.code,{children:"guide/hello.md"})," is ",(0,d.jsx)(n.code,{children:"guide/hello"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u251c\u2500\u2500 greeting.md\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,d.jsxs)(n.p,{children:["However, the ",(0,d.jsx)(n.strong,{children:"last part"})," of the ",(0,d.jsx)(n.code,{children:"id"})," can be defined by the user in the front matter. For example, if ",(0,d.jsx)(n.code,{children:"guide/hello.md"}),"'s content is defined as below, its final ",(0,d.jsx)(n.code,{children:"id"})," is ",(0,d.jsx)(n.code,{children:"guide/part1"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nid: part1\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsx)(n.p,{children:"The ID is used to refer to a document when hand-writing sidebars, or when using docs-related layout components or hooks."}),"\n",(0,d.jsx)(n.h3,{id:"doc-urls",children:"Doc URLs"}),"\n",(0,d.jsxs)(n.p,{children:["By default, a document's URL location is its file path relative to the ",(0,d.jsx)(n.code,{children:"docs"})," folder, with a few exceptions. Namely, if a file is named one the following, the file name won't be included in the URL:"]}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["Named as ",(0,d.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,d.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,d.jsxs)(n.li,{children:["Named as ",(0,d.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,d.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,d.jsxs)(n.li,{children:["Same name as parent folder: ",(0,d.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,d.jsxs)(n.p,{children:["In all cases, the default slug would only be ",(0,d.jsx)(n.code,{children:"/Guides"}),", without the ",(0,d.jsx)(n.code,{children:"/index"}),", ",(0,d.jsx)(n.code,{children:"/README"}),", or duplicate ",(0,d.jsx)(n.code,{children:"/Guides"})," segment."]}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsxs)(n.p,{children:["This convention is exactly the same as ",(0,d.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-index-convention",children:"the category index convention"}),". However, the ",(0,d.jsx)(n.code,{children:"isCategoryIndex"})," configuration does ",(0,d.jsx)(n.em,{children:"not"})," affect the document URL."]})}),"\n",(0,d.jsxs)(n.p,{children:["Use the ",(0,d.jsx)(n.code,{children:"slug"})," front matter to change a document's URL."]}),"\n",(0,d.jsx)(n.p,{children:"For example, suppose your site structure looks like this:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,d.jsxs)(n.p,{children:["By default ",(0,d.jsx)(n.code,{children:"hello.md"})," will be available at ",(0,d.jsx)(n.code,{children:"/docs/guide/hello"}),". You can change its URL location to ",(0,d.jsx)(n.code,{children:"/docs/bonjour"}),":"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nslug: /bonjour\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"slug"})," will be appended to the doc plugin's ",(0,d.jsx)(n.code,{children:"routeBasePath"}),", which is ",(0,d.jsx)(n.code,{children:"/docs"})," by default. See ",(0,d.jsx)(n.a,{href:"/docs/docs-introduction#docs-only-mode",children:"Docs-only mode"})," for how to remove the ",(0,d.jsx)(n.code,{children:"/docs"})," part from the URL."]}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsx)(n.p,{children:"It is possible to use:"}),(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["absolute slugs: ",(0,d.jsx)(n.code,{children:"slug: /mySlug"}),", ",(0,d.jsx)(n.code,{children:"slug: /"}),"..."]}),"\n",(0,d.jsxs)(n.li,{children:["relative slugs: ",(0,d.jsx)(n.code,{children:"slug: mySlug"}),", ",(0,d.jsx)(n.code,{children:"slug: ./../mySlug"}),"..."]}),"\n"]})]}),"\n",(0,d.jsxs)(n.p,{children:["If you want a document to be available at the root, and have a path like ",(0,d.jsx)(n.code,{children:"https://docusaurus.io/docs/"}),", you can use the slug front matter:"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nid: my-home-doc\nslug: /\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsx)(n.h3,{id:"sidebars",children:"Sidebars"}),"\n",(0,d.jsxs)(n.p,{children:["When using ",(0,d.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),", the file structure will determine the sidebar structure."]}),"\n",(0,d.jsxs)(n.p,{children:["Our recommendation for file system organization is: make your file system mirror the sidebar structure (so you don't need to handwrite your ",(0,d.jsx)(n.code,{children:"sidebars.js"})," file), and use the ",(0,d.jsx)(n.code,{children:"slug"})," front matter to customize URLs of each document."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>r});var d=s(27378);const o={},t=d.createContext(o);function r(e){const n=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),d.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f283cc0.c46d8806.js b/assets/js/2f283cc0.c46d8806.js new file mode 100644 index 000000000000..952c2dbac212 --- /dev/null +++ b/assets/js/2f283cc0.c46d8806.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27762],{17798:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var d=s(24246),o=s(71670);const t={id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},r="Create a doc",i={id:"guides/docs/create-doc",title:"Create a doc",description:"Create a Markdown Document",source:"@site/docs/guides/docs/docs-create-doc.mdx",sourceDirName:"guides/docs",slug:"/create-doc",permalink:"/docs/create-doc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/docs-introduction"},next:{title:"Sidebar",permalink:"/docs/sidebar"}},c={},a=[{value:"Doc front matter",id:"doc-front-matter",level:2},{value:"Doc tags",id:"doc-tags",level:2},{value:"Organizing folder structure",id:"organizing-folder-structure",level:2},{value:"Document ID",id:"document-id",level:3},{value:"Doc URLs",id:"doc-urls",level:3},{value:"Sidebars",id:"sidebars",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"create-a-doc",children:"Create a doc"})}),"\n",(0,d.jsxs)(n.p,{children:["Create a Markdown file, ",(0,d.jsx)(n.code,{children:"greeting.md"}),", and place it under the ",(0,d.jsx)(n.code,{children:"docs"})," directory."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # root directory of your site\n\u251c\u2500\u2500 docs\n\u2502 \u2514\u2500\u2500 greeting.md\n\u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 pages\n\u251c\u2500\u2500 docusaurus.config.js\n\u251c\u2500\u2500 ...\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\ndescription: Create a doc page with rich content.\n---\n\n# Hello from Docusaurus\n\nAre you ready to create the documentation site for your open source project?\n\n## Headers\n\nwill show up on the table of contents on the upper right\n\nSo that your users will know what this page is all about without scrolling down or even without reading too much.\n\n## Only h2 and h3 will be in the TOC by default.\n\nYou can configure the TOC heading levels either per-document or in the theme configuration.\n\nThe headers are well-spaced so that the hierarchy is clear.\n\n- lists will help you\n- present the key points\n- that you want your users to remember\n - and you may nest them\n - multiple times\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsxs)(n.p,{children:["All files prefixed with an underscore (",(0,d.jsx)(n.code,{children:"_"}),") under the ",(0,d.jsx)(n.code,{children:"docs"}),' directory are treated as "partial" pages and will be ignored by default.']}),(0,d.jsxs)(n.p,{children:["Read more about ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/react#importing-markdown",children:"importing partial pages"}),"."]})]}),"\n",(0,d.jsx)(n.h2,{id:"doc-front-matter",children:"Doc front matter"}),"\n",(0,d.jsxs)(n.p,{children:["The ",(0,d.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," is used to provide additional metadata for your doc page. Front matter is optional\u2014Docusaurus will be able to infer all necessary metadata without the front matter. For example, the ",(0,d.jsx)(n.a,{href:"#doc-tags",children:"doc tags"})," feature introduced below requires using front matter. For all possible fields, see ",(0,d.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"the API documentation"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"doc-tags",children:"Doc tags"}),"\n",(0,d.jsxs)(n.p,{children:["Tags are declared in the front matter and introduce another dimension of categorization in addition to the ",(0,d.jsx)(n.a,{href:"/docs/sidebar",children:"docs sidebar"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:["It is possible to define tags inline, or to reference predefined tags declared in a ",(0,d.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#tags-file",children:(0,d.jsx)(n.code,{children:"tags file"})})," (optional, usually ",(0,d.jsx)(n.code,{children:"docs/tags.yml"}),")."]}),"\n",(0,d.jsx)(n.p,{children:"In the following example:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.code,{children:"docusaurus"})," references a predefined tag key declared in ",(0,d.jsx)(n.code,{children:"docs/tags.yml"})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.code,{children:"Releases"})," is an inline tag, because it does not exist in ",(0,d.jsx)(n.code,{children:"docs/tags.yml"})]}),"\n"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",metastring:'title="docs/my-doc.md"',children:"---\ntags:\n - Releases\n - docusaurus\n---\n\n# Title\n\nContent\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-yml",metastring:'title="docs/tags.yml"',children:"docusaurus:\n label: 'Docusaurus'\n permalink: '/docusaurus'\n description: 'Docs related to the Docusaurus framework'\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"tip",children:[(0,d.jsxs)(n.p,{children:["Tags can also be declared with ",(0,d.jsx)(n.code,{children:"tags: [Demo, Getting started]"}),"."]}),(0,d.jsxs)(n.p,{children:["Read more about all the possible ",(0,d.jsx)(n.a,{href:"https://www.w3schools.io/file/yaml-arrays/",children:"Yaml array syntaxes"}),"."]})]}),"\n",(0,d.jsx)(n.h2,{id:"organizing-folder-structure",children:"Organizing folder structure"}),"\n",(0,d.jsxs)(n.p,{children:["How the Markdown files are arranged under the ",(0,d.jsx)(n.code,{children:"docs"})," folder can have multiple impacts on Docusaurus content generation. However, most of them can be decoupled from the file structure."]}),"\n",(0,d.jsx)(n.h3,{id:"document-id",children:"Document ID"}),"\n",(0,d.jsxs)(n.p,{children:["Every document has a unique ",(0,d.jsx)(n.code,{children:"id"}),". By default, a document ",(0,d.jsx)(n.code,{children:"id"})," is the name of the document (without the extension) relative to the root docs directory."]}),"\n",(0,d.jsxs)(n.p,{children:["For example, the ID of ",(0,d.jsx)(n.code,{children:"greeting.md"})," is ",(0,d.jsx)(n.code,{children:"greeting"}),", and the ID of ",(0,d.jsx)(n.code,{children:"guide/hello.md"})," is ",(0,d.jsx)(n.code,{children:"guide/hello"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u251c\u2500\u2500 greeting.md\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,d.jsxs)(n.p,{children:["However, the ",(0,d.jsx)(n.strong,{children:"last part"})," of the ",(0,d.jsx)(n.code,{children:"id"})," can be defined by the user in the front matter. For example, if ",(0,d.jsx)(n.code,{children:"guide/hello.md"}),"'s content is defined as below, its final ",(0,d.jsx)(n.code,{children:"id"})," is ",(0,d.jsx)(n.code,{children:"guide/part1"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nid: part1\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsx)(n.p,{children:"The ID is used to refer to a document when hand-writing sidebars, or when using docs-related layout components or hooks."}),"\n",(0,d.jsx)(n.h3,{id:"doc-urls",children:"Doc URLs"}),"\n",(0,d.jsxs)(n.p,{children:["By default, a document's URL location is its file path relative to the ",(0,d.jsx)(n.code,{children:"docs"})," folder, with a few exceptions. Namely, if a file is named one the following, the file name won't be included in the URL:"]}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["Named as ",(0,d.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,d.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,d.jsxs)(n.li,{children:["Named as ",(0,d.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,d.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,d.jsxs)(n.li,{children:["Same name as parent folder: ",(0,d.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,d.jsxs)(n.p,{children:["In all cases, the default slug would only be ",(0,d.jsx)(n.code,{children:"/Guides"}),", without the ",(0,d.jsx)(n.code,{children:"/index"}),", ",(0,d.jsx)(n.code,{children:"/README"}),", or duplicate ",(0,d.jsx)(n.code,{children:"/Guides"})," segment."]}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsxs)(n.p,{children:["This convention is exactly the same as ",(0,d.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-index-convention",children:"the category index convention"}),". However, the ",(0,d.jsx)(n.code,{children:"isCategoryIndex"})," configuration does ",(0,d.jsx)(n.em,{children:"not"})," affect the document URL."]})}),"\n",(0,d.jsxs)(n.p,{children:["Use the ",(0,d.jsx)(n.code,{children:"slug"})," front matter to change a document's URL."]}),"\n",(0,d.jsx)(n.p,{children:"For example, suppose your site structure looks like this:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,d.jsxs)(n.p,{children:["By default ",(0,d.jsx)(n.code,{children:"hello.md"})," will be available at ",(0,d.jsx)(n.code,{children:"/docs/guide/hello"}),". You can change its URL location to ",(0,d.jsx)(n.code,{children:"/docs/bonjour"}),":"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nslug: /bonjour\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"slug"})," will be appended to the doc plugin's ",(0,d.jsx)(n.code,{children:"routeBasePath"}),", which is ",(0,d.jsx)(n.code,{children:"/docs"})," by default. See ",(0,d.jsx)(n.a,{href:"/docs/docs-introduction#docs-only-mode",children:"Docs-only mode"})," for how to remove the ",(0,d.jsx)(n.code,{children:"/docs"})," part from the URL."]}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsx)(n.p,{children:"It is possible to use:"}),(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["absolute slugs: ",(0,d.jsx)(n.code,{children:"slug: /mySlug"}),", ",(0,d.jsx)(n.code,{children:"slug: /"}),"..."]}),"\n",(0,d.jsxs)(n.li,{children:["relative slugs: ",(0,d.jsx)(n.code,{children:"slug: mySlug"}),", ",(0,d.jsx)(n.code,{children:"slug: ./../mySlug"}),"..."]}),"\n"]})]}),"\n",(0,d.jsxs)(n.p,{children:["If you want a document to be available at the root, and have a path like ",(0,d.jsx)(n.code,{children:"https://docusaurus.io/docs/"}),", you can use the slug front matter:"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-md",children:"---\nid: my-home-doc\nslug: /\n---\n\nLorem ipsum\n"})}),"\n",(0,d.jsx)(n.h3,{id:"sidebars",children:"Sidebars"}),"\n",(0,d.jsxs)(n.p,{children:["When using ",(0,d.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),", the file structure will determine the sidebar structure."]}),"\n",(0,d.jsxs)(n.p,{children:["Our recommendation for file system organization is: make your file system mirror the sidebar structure (so you don't need to handwrite your ",(0,d.jsx)(n.code,{children:"sidebars.js"})," file), and use the ",(0,d.jsx)(n.code,{children:"slug"})," front matter to customize URLs of each document."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>r});var d=s(27378);const o={},t=d.createContext(o);function r(e){const n=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),d.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/305daa1e.06e12546.js b/assets/js/305daa1e.06e12546.js new file mode 100644 index 000000000000..2dc1aed501aa --- /dev/null +++ b/assets/js/305daa1e.06e12546.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43144],{25943:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/local-image-05286ebd44ab198d038adbeee9544858.png"},58154:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var o=s(24246),n=s(71670);const i={title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},c="SEO tests",a={type:"mdx",permalink:"/tests/pages/seo",source:"@site/_dogfooding/_pages tests/seo.md",title:"custom SEO title",description:"custom SEO description",frontMatter:{title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md",unlisted:!1},r={image:s(25943).Z},d=[];function m(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"seo-tests",children:"SEO tests"})}),"\n",(0,o.jsx)(t.p,{children:"Using page SEO front matter:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"title: custom SEO title\ndescription: custom SEO description\nkeywords: [custom, keywords]\nimage: ./local-image.png\n"})})]})}function p(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>c});var o=s(27378);const n={},i=o.createContext(n);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/305daa1e.8a6622f1.js b/assets/js/305daa1e.8a6622f1.js deleted file mode 100644 index 9ed5c207cc60..000000000000 --- a/assets/js/305daa1e.8a6622f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43144],{25943:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/local-image-05286ebd44ab198d038adbeee9544858.png"},58154:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var o=s(24246),n=s(71670);const i={title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},c="SEO tests",r={type:"mdx",permalink:"/tests/pages/seo",source:"@site/_dogfooding/_pages tests/seo.md",title:"custom SEO title",description:"custom SEO description",frontMatter:{title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md",unlisted:!1},a={image:s(25943).Z},d=[];function p(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"seo-tests",children:"SEO tests"})}),"\n",(0,o.jsx)(t.p,{children:"Using page SEO front matter:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"title: custom SEO title\ndescription: custom SEO description\nkeywords: [custom, keywords]\nimage: ./local-image.png\n"})})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>c});var o=s(27378);const n={},i=o.createContext(n);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3103a69b.0e0851f1.js b/assets/js/3103a69b.0e0851f1.js new file mode 100644 index 000000000000..93b229f8c3e5 --- /dev/null +++ b/assets/js/3103a69b.0e0851f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38012],{33873:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var i=s(24246),n=s(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},d="Only Unlisteds - Unlisted 2",o={id:"tests/visibility/only-unlisteds/unlisted2",title:"Only Unlisteds - Unlisted 2",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx",sourceDirName:"tests/visibility/only-unlisteds",slug:"/tests/visibility/only-unlisteds/unlisted2",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted2",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},a=[];function u(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"only-unlisteds---unlisted-2",children:"Only Unlisteds - Unlisted 2"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>o,a:()=>d});var i=s(27378);const n={},l=i.createContext(n);function d(t){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:d(t.components),i.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3103a69b.65d58c79.js b/assets/js/3103a69b.65d58c79.js deleted file mode 100644 index 5cf0357b565c..000000000000 --- a/assets/js/3103a69b.65d58c79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38012],{33873:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var i=s(24246),n=s(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},d="Only Unlisteds - Unlisted 2",o={id:"tests/visibility/only-unlisteds/unlisted2",title:"Only Unlisteds - Unlisted 2",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx",sourceDirName:"tests/visibility/only-unlisteds",slug:"/tests/visibility/only-unlisteds/unlisted2",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted2",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},a=[];function u(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"only-unlisteds---unlisted-2",children:"Only Unlisteds - Unlisted 2"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>o,a:()=>d});var i=s(27378);const n={},l=i.createContext(n);function d(t){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:d(t.components),i.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/32a09314.87c58ad4.js b/assets/js/32a09314.87c58ad4.js deleted file mode 100644 index dcb74de97b9c..000000000000 --- a/assets/js/32a09314.87c58ad4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15958],{70547:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>a});var i=s(24246),n=s(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},o="Some Unlisteds - Unlisted 1",d={id:"tests/visibility/some-unlisteds/unlisted1",title:"Some Unlisteds - Unlisted 1",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx",sourceDirName:"tests/visibility/some-unlisteds",slug:"/tests/visibility/some-unlisteds/unlisted1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted1",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},a=[];function u(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"some-unlisteds---unlisted-1",children:"Some Unlisteds - Unlisted 1"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>d,a:()=>o});var i=s(27378);const n={},l=i.createContext(n);function o(t){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function d(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:o(t.components),i.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/32a09314.abcbdb0a.js b/assets/js/32a09314.abcbdb0a.js new file mode 100644 index 000000000000..2ca6ad4358bf --- /dev/null +++ b/assets/js/32a09314.abcbdb0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15958],{70547:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>c,frontMatter:()=>d,metadata:()=>o,toc:()=>a});var i=s(24246),n=s(71670);const d={unlisted:!0,tags:["visibility","unlisted"]},l="Some Unlisteds - Unlisted 1",o={id:"tests/visibility/some-unlisteds/unlisted1",title:"Some Unlisteds - Unlisted 1",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx",sourceDirName:"tests/visibility/some-unlisteds",slug:"/tests/visibility/some-unlisteds/unlisted1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted1",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},a=[];function u(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"some-unlisteds---unlisted-1",children:"Some Unlisteds - Unlisted 1"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>o,a:()=>l});var i=s(27378);const n={},d=i.createContext(n);function l(t){const e=i.useContext(d);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:l(t.components),i.createElement(d.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/33a17176.5ab7cf5f.js b/assets/js/33a17176.1cc471ed.js similarity index 55% rename from assets/js/33a17176.5ab7cf5f.js rename to assets/js/33a17176.1cc471ed.js index 90dcd88f843a..6329b6d2a7db 100644 --- a/assets/js/33a17176.5ab7cf5f.js +++ b/assets/js/33a17176.1cc471ed.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66058],{70539:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},98969:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},1149:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:t(70539).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(98969).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66058],{70539:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},98969:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},1149:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:t(70539).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(98969).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33bfb584.9bf96cb8.js b/assets/js/33bfb584.01fe6a89.js similarity index 53% rename from assets/js/33bfb584.9bf96cb8.js rename to assets/js/33bfb584.01fe6a89.js index ffb48a5e2f5f..fcc49eba4c18 100644 --- a/assets/js/33bfb584.9bf96cb8.js +++ b/assets/js/33bfb584.01fe6a89.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20393],{61132:(e,n,r)=>{r.d(n,{Z:()=>a});var t=r(24246),s=(r(27378),r(40624));const l={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(l.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>P});var t=r(24246),s=r(27378),l=r(40624),a=r(75527),i=r(3620),o=r(44479),u=r(62821),c=r(52196),d=r(53589);function p(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function m(e){var n,r;return null!==(r=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function f(e){const{values:n,children:r}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,i.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),l=(0,u._X)(t),a=(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(h(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){p(e,n,r[n])}))}return e}({},r.location),{search:n.toString()}))}),[t,r]);return[l,a]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,l=f(e),[a,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:l}))),[u,c]=b({queryString:r,groupId:t}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,d.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=u?u:p;return g({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{m&&i(m)}),[m]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),c(e),h(e)}),[c,h,l]),tabValues:l}}var x=r(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){y(e,n,r[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function k({className:e,block:n,selectedValue:r,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:u}=(0,a.o5)(),c=e=>{const n=e.currentTarget,t=o.indexOf(n),l=i[t].value;l!==r&&(u(n),s(l))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[o.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:s})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>o.push(e),onKeyDown:d,onClick:c},s),{className:(0,l.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function E({lazy:e,children:n,selectedValue:r}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:(0,l.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function S(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,l.Z)("tabs-container",v.tabList),children:[(0,t.jsx)(k,w({},n,e)),(0,t.jsx)(E,w({},n,e))]})}function P(e){const n=(0,x.Z)();return(0,t.jsx)(S,O(w({},e),{children:m(e.children)}),String(n))}},9182:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>d});var t=r(24246),s=r(71670),l=r(97555),a=r(61132);const i={sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},o="\ud83d\udce6 eslint-plugin",u={id:"api/misc/eslint-plugin/README",title:"\ud83d\udce6 eslint-plugin",description:"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.",source:"@site/docs/api/misc/eslint-plugin/README.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},sidebar:"api",previous:{title:"\ud83d\udce6 create-docusaurus",permalink:"/docs/api/misc/create-docusaurus"},next:{title:"no-html-links",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Recommended config",id:"recommended-config",level:3},{value:"Manual config",id:"manual-config",level:3},{value:"Supported configs",id:"supported-configs",level:2},{value:"Supported rules",id:"supported-rules",level:2},{value:"Example configuration",id:"example-configuration",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"-eslint-plugin",children:"\ud83d\udce6 eslint-plugin"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://eslint.org/",children:"ESLint"})," is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices."]}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(l.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(a.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install --save-dev @docusaurus/eslint-plugin\n"})})}),(0,t.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn add --dev @docusaurus/eslint-plugin\n"})})}),(0,t.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add --save-dev @docusaurus/eslint-plugin\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.h3,{id:"recommended-config",children:"Recommended config"}),"\n",(0,t.jsxs)(n.p,{children:["Add ",(0,t.jsx)(n.code,{children:"plugin:@docusaurus/recommended"})," to the ",(0,t.jsx)(n.code,{children:"extends"})," section of your ",(0,t.jsx)(n.code,{children:".eslintrc"})," configuration file:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "extends": ["plugin:@docusaurus/recommended"]\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["This will enable the ",(0,t.jsx)(n.code,{children:"@docusaurus"})," eslint plugin and use the ",(0,t.jsx)(n.code,{children:"recommended"})," config. See ",(0,t.jsx)(n.a,{href:"#supported-rules",children:"Supported rules"})," below for a list of rules that this will enable."]}),"\n",(0,t.jsx)(n.h3,{id:"manual-config",children:"Manual config"}),"\n",(0,t.jsx)(n.p,{children:"For more fine-grained control, you can also enable the plugin manually and configure the rules you want to use directly:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "plugins": ["@docusaurus"],\n "rules": {\n "@docusaurus/string-literal-i18n-messages": "error",\n "@docusaurus/no-untranslated-text": "warn"\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"supported-configs",children:"Supported configs"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Recommended: recommended rule set for most Docusaurus sites that should be extended from."}),"\n",(0,t.jsxs)(n.li,{children:["All: ",(0,t.jsx)(n.strong,{children:"all"})," rules enabled. This will change between minor versions, so you should not use this if you want to avoid unexpected breaking changes."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"supported-rules",children:"Supported rules"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text",children:(0,t.jsx)(n.code,{children:"@docusaurus/no-untranslated-text"})})}),(0,t.jsx)(n.td,{children:"Enforce text labels in JSX to be wrapped by translate calls"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages",children:(0,t.jsx)(n.code,{children:"@docusaurus/string-literal-i18n-messages"})})}),(0,t.jsx)(n.td,{children:"Enforce translate APIs to be called on plain text labels"}),(0,t.jsx)(n.td,{children:"\u2705"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,t.jsx)(n.code,{children:"@docusaurus/no-html-links"})})}),(0,t.jsxs)(n.td,{children:["Ensures @docusaurus/Link is used instead of ",(0,t.jsx)(n.code,{children:"<a>"})," tags"]}),(0,t.jsx)(n.td,{children:"\u2705"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,t.jsx)(n.code,{children:"@docusaurus/prefer-docusaurus-heading"})})}),(0,t.jsxs)(n.td,{children:["Ensures @theme/Heading is used instead of ",(0,t.jsx)(n.code,{children:"<hn>"})," tags for headings"]}),(0,t.jsx)(n.td,{children:"\u2705"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"\u2705 = recommended"}),"\n",(0,t.jsx)(n.h2,{id:"example-configuration",children:"Example configuration"}),"\n",(0,t.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title=".eslintrc.js"',children:"module.exports = {\n extends: ['plugin:@docusaurus/recommended'],\n rules: {\n '@docusaurus/no-untranslated-text': [\n 'warn',\n {ignoredStrings: ['\xb7', '\u2014', '\xd7']},\n ],\n },\n};\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var t=r(27378);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20393],{61132:(e,n,r)=>{r.d(n,{Z:()=>a});var t=r(24246),s=(r(27378),r(40624));const l={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(l.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>P});var t=r(24246),s=r(27378),l=r(40624),a=r(75527),i=r(3620),o=r(44479),u=r(62821),c=r(52196),d=r(53589);function p(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function m(e){var n,r;return null!==(r=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function f(e){const{values:n,children:r}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,i.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),l=(0,u._X)(t),a=(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(h(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){p(e,n,r[n])}))}return e}({},r.location),{search:n.toString()}))}),[t,r]);return[l,a]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,l=f(e),[a,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:l}))),[u,c]=b({queryString:r,groupId:t}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,d.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=u?u:p;return g({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{m&&i(m)}),[m]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),c(e),h(e)}),[c,h,l]),tabValues:l}}var x=r(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){y(e,n,r[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function k({className:e,block:n,selectedValue:r,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:u}=(0,a.o5)(),c=e=>{const n=e.currentTarget,t=o.indexOf(n),l=i[t].value;l!==r&&(u(n),s(l))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[o.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:s})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>o.push(e),onKeyDown:d,onClick:c},s),{className:(0,l.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function E({lazy:e,children:n,selectedValue:r}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:(0,l.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function S(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,l.Z)("tabs-container",v.tabList),children:[(0,t.jsx)(k,w({},n,e)),(0,t.jsx)(E,w({},n,e))]})}function P(e){const n=(0,x.Z)();return(0,t.jsx)(S,O(w({},e),{children:m(e.children)}),String(n))}},9182:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>d});var t=r(24246),s=r(71670),l=r(97555),a=r(61132);const i={sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},o="\ud83d\udce6 eslint-plugin",u={id:"api/misc/eslint-plugin/README",title:"\ud83d\udce6 eslint-plugin",description:"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.",source:"@site/docs/api/misc/eslint-plugin/README.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},sidebar:"api",previous:{title:"\ud83d\udce6 create-docusaurus",permalink:"/docs/api/misc/create-docusaurus"},next:{title:"no-html-links",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Recommended config",id:"recommended-config",level:3},{value:"Manual config",id:"manual-config",level:3},{value:"Supported configs",id:"supported-configs",level:2},{value:"Supported rules",id:"supported-rules",level:2},{value:"Example configuration",id:"example-configuration",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"-eslint-plugin",children:"\ud83d\udce6 eslint-plugin"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://eslint.org/",children:"ESLint"})," is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices."]}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(l.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(a.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install --save-dev @docusaurus/eslint-plugin\n"})})}),(0,t.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn add --dev @docusaurus/eslint-plugin\n"})})}),(0,t.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add --save-dev @docusaurus/eslint-plugin\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.h3,{id:"recommended-config",children:"Recommended config"}),"\n",(0,t.jsxs)(n.p,{children:["Add ",(0,t.jsx)(n.code,{children:"plugin:@docusaurus/recommended"})," to the ",(0,t.jsx)(n.code,{children:"extends"})," section of your ",(0,t.jsx)(n.code,{children:".eslintrc"})," configuration file:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "extends": ["plugin:@docusaurus/recommended"]\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["This will enable the ",(0,t.jsx)(n.code,{children:"@docusaurus"})," eslint plugin and use the ",(0,t.jsx)(n.code,{children:"recommended"})," config. See ",(0,t.jsx)(n.a,{href:"#supported-rules",children:"Supported rules"})," below for a list of rules that this will enable."]}),"\n",(0,t.jsx)(n.h3,{id:"manual-config",children:"Manual config"}),"\n",(0,t.jsx)(n.p,{children:"For more fine-grained control, you can also enable the plugin manually and configure the rules you want to use directly:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "plugins": ["@docusaurus"],\n "rules": {\n "@docusaurus/string-literal-i18n-messages": "error",\n "@docusaurus/no-untranslated-text": "warn"\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"supported-configs",children:"Supported configs"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Recommended: recommended rule set for most Docusaurus sites that should be extended from."}),"\n",(0,t.jsxs)(n.li,{children:["All: ",(0,t.jsx)(n.strong,{children:"all"})," rules enabled. This will change between minor versions, so you should not use this if you want to avoid unexpected breaking changes."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"supported-rules",children:"Supported rules"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text",children:(0,t.jsx)(n.code,{children:"@docusaurus/no-untranslated-text"})})}),(0,t.jsx)(n.td,{children:"Enforce text labels in JSX to be wrapped by translate calls"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages",children:(0,t.jsx)(n.code,{children:"@docusaurus/string-literal-i18n-messages"})})}),(0,t.jsx)(n.td,{children:"Enforce translate APIs to be called on plain text labels"}),(0,t.jsx)(n.td,{children:"\u2705"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,t.jsx)(n.code,{children:"@docusaurus/no-html-links"})})}),(0,t.jsxs)(n.td,{children:["Ensures @docusaurus/Link is used instead of ",(0,t.jsx)(n.code,{children:"<a>"})," tags"]}),(0,t.jsx)(n.td,{children:"\u2705"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,t.jsx)(n.code,{children:"@docusaurus/prefer-docusaurus-heading"})})}),(0,t.jsxs)(n.td,{children:["Ensures @theme/Heading is used instead of ",(0,t.jsx)(n.code,{children:"<hn>"})," tags for headings"]}),(0,t.jsx)(n.td,{children:"\u2705"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"\u2705 = recommended"}),"\n",(0,t.jsx)(n.h2,{id:"example-configuration",children:"Example configuration"}),"\n",(0,t.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title=".eslintrc.js"',children:"module.exports = {\n extends: ['plugin:@docusaurus/recommended'],\n rules: {\n '@docusaurus/no-untranslated-text': [\n 'warn',\n {ignoredStrings: ['\xb7', '\u2014', '\xd7']},\n ],\n },\n};\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var t=r(27378);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/35123c02.1c5fa6f5.js b/assets/js/35123c02.1c5fa6f5.js deleted file mode 100644 index 1459f4a4e897..000000000000 --- a/assets/js/35123c02.1c5fa6f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2148],{88898:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var i=s(24246),n=s(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},d="Only Unlisteds - Unlisted 3",o={id:"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",title:"Only Unlisteds - Unlisted 3",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx",sourceDirName:"tests/visibility/only-unlisteds/unlisted-subcategory",slug:"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},u=[];function a(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"only-unlisteds---unlisted-3",children:"Only Unlisteds - Unlisted 3"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(a,{...t})}):a(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>o,a:()=>d});var i=s(27378);const n={},l=i.createContext(n);function d(t){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:d(t.components),i.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/35123c02.a8793fee.js b/assets/js/35123c02.a8793fee.js new file mode 100644 index 000000000000..36a64fa2a051 --- /dev/null +++ b/assets/js/35123c02.a8793fee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2148],{88898:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var i=s(24246),n=s(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},d="Only Unlisteds - Unlisted 3",o={id:"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",title:"Only Unlisteds - Unlisted 3",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx",sourceDirName:"tests/visibility/only-unlisteds/unlisted-subcategory",slug:"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},u=[];function a(t){const e={h1:"h1",header:"header",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"only-unlisteds---unlisted-3",children:"Only Unlisteds - Unlisted 3"})}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(a,{...t})}):a(t)}c.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>o,a:()=>d});var i=s(27378);const n={},l=i.createContext(n);function d(t){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:d(t.components),i.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3716f59c.4ee61080.js b/assets/js/3716f59c.099aa99c.js similarity index 85% rename from assets/js/3716f59c.4ee61080.js rename to assets/js/3716f59c.099aa99c.js index 335b5010a851..cd92a08b7460 100644 --- a/assets/js/3716f59c.4ee61080.js +++ b/assets/js/3716f59c.099aa99c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59904],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:d;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),q=n.n($);function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),G=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},W),F=null!=(F={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?F:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(F)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(F)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(F,e))})),z);var z,F;const X=Object.keys(W);function U(e,t){const n=e.map((e=>{const{start:n,end:r}=H[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&G.test(c)){const e=c.match(G).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return U(["js","jsBlock"],t);case"jsx":case"tsx":return U(["js","jsBlock","jsx"],t);case"html":return U(["js","jsBlock","html"],t);case"python":case"py":case"bash":return U(["bash"],t);case"markdown":case"md":return U(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return U(["tex"],t);case"lua":case"haskell":case"sql":return U(["lua"],t);case"wasm":return U(["wasm"],t);case"vb":case"vba":case"visual-basic":return U(["vb","rem"],t);case"vbnet":return U(["vbnet","rem"],t);case"batch":return U(["rem"],t);case"basic":return U(["rem","f90"],t);case"fsharp":return U(["js","ml"],t);case"ocaml":case"sml":return U(["ml"],t);case"fortran":return U(["f90"],t);case"cobol":return U(["cobol"],t);default:return U(X,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:p[t]&&(l[p[t]].range+=`${l[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(l).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var n;null!==(n=(A=d)[_=t])&&void 0!==n||(A[_]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,Q.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:a),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(R))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=J(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const Te=(Ze=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Be({scope:L},e)):(0,o.jsx)(Ze,Be({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},2179:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>a,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},u="\ud83d\udce6 plugin-google-gtag",p={id:"api/plugins/plugin-google-gtag",title:"\ud83d\udce6 plugin-google-gtag",description:"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.",source:"@site/docs/api/plugins/plugin-google-gtag.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:7,frontMatter:{sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"},next:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-gtag",children:"\ud83d\udce6 plugin-google-gtag"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/tag-platform/gtagjs",children:"Global Site Tag (gtag.js)"})," plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if your gtag is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-gtag\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:"string | string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your gtag service. It is possible to provide multiple ids."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-gtag",presetOptionName:"gtag",code:"{\n trackingID: 'G-999X9XX9XX',\n anonymizeIP: true,\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59904],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:d;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",C(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),M=n.n($);function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),G=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){q(e,t,n[t])}))}return e}({},W),F=null!=(F={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?F:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(F)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(F)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(F,e))})),z);var z,F;const X=Object.keys(W);function U(e,t){const n=e.map((e=>{const{start:n,end:r}=H[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&G.test(c)){const e=c.match(G).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return U(["js","jsBlock"],t);case"jsx":case"tsx":return U(["js","jsBlock","jsx"],t);case"html":return U(["js","jsBlock","html"],t);case"python":case"py":case"bash":return U(["bash"],t);case"markdown":case"md":return U(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return U(["tex"],t);case"lua":case"haskell":case"sql":return U(["lua"],t);case"wasm":return U(["wasm"],t);case"vb":case"vba":case"visual-basic":return U(["vb","rem"],t);case"vbnet":return U(["vbnet","rem"],t);case"batch":return U(["rem"],t);case"basic":return U(["rem","f90"],t);case"fsharp":return U(["js","ml"],t);case"ocaml":case"sml":return U(["ml"],t);case"fortran":return U(["f90"],t);case"cobol":return U(["cobol"],t);default:return U(X,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:p[t]&&(l[p[t]].range+=`${l[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(l).forEach((([e,{range:t}])=>{M()(t).forEach((t=>{var n;null!==(n=(A=d)[_=t])&&void 0!==n||(A[_]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,Q.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:a),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(R))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=J(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const Te=(Ze=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ce({scope:L},e)):(0,o.jsx)(Ze,Ce({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},2179:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>a,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},u="\ud83d\udce6 plugin-google-gtag",p={id:"api/plugins/plugin-google-gtag",title:"\ud83d\udce6 plugin-google-gtag",description:"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.",source:"@site/docs/api/plugins/plugin-google-gtag.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:7,frontMatter:{sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"},next:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-gtag",children:"\ud83d\udce6 plugin-google-gtag"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/tag-platform/gtagjs",children:"Global Site Tag (gtag.js)"})," plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if your gtag is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-gtag\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:"string | string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your gtag service. It is possible to provide multiple ids."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-gtag",presetOptionName:"gtag",code:"{\n trackingID: 'G-999X9XX9XX',\n anonymizeIP: true,\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/38dd9662.a4cd3930.js b/assets/js/38dd9662.1b2f48f9.js similarity index 50% rename from assets/js/38dd9662.a4cd3930.js rename to assets/js/38dd9662.1b2f48f9.js index 3587c29b1e55..c3f50fa45050 100644 --- a/assets/js/38dd9662.a4cd3930.js +++ b/assets/js/38dd9662.1b2f48f9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39391],{80282:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},61132:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(24246),s=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>S});var r=n(24246),s=n(27378),a=n(40624),o=n(75527),i=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[a,o]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,a=b(e),[o,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,u]=f({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,s.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){w(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),a=i[r].value;a!==n&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function I(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,v({},t,e)),(0,r.jsx)(P,v({},t,e))]})}function S(e){const t=(0,x.Z)();return(0,r.jsx)(I,O(v({},e),{children:g(e.children)}),String(t))}},6698:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),s=(n(27378),n(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}function l(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c({children:e,minHeight:t,url:n="http://localhost:3000",style:o,bodyStyle:c}){return(0,r.jsxs)("div",{className:a.browserWindow,style:l(i({},o),{minHeight:t}),children:[(0,r.jsxs)("div",{className:a.browserWindowHeader,children:[(0,r.jsxs)("div",{className:a.buttons,children:[(0,r.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar})]})})]}),(0,r.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},76398:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},32537:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=n(24246),s=n(71670),a=n(6698),o=n(97555),i=n(61132);const l={title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-01-27T00:00:00.000Z")},c=void 0,u={permalink:"/blog/releases/2.3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx",source:"@site/blog/releases/2.3/index.mdx",title:"Docusaurus 2.3",description:"We are happy to announce Docusaurus 2.3.",date:"2023-01-27T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.89,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-01-27T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"},nextItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"}},d={image:n(80282).Z,authorsImageUrls:[void 0]},h=[{value:"Highlights",id:"highlights",level:2},{value:"Google Tag Manager plugin",id:"google-tag-manager-plugin",level:3},{value:"Tabs Query String Support",id:"tabs-query-string-support",level:3},{value:"Nested admonitions",id:"nested-admonitions",level:3},{value:"Blog <code>createFeedItems</code>",id:"blog-createfeeditems",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["We are happy to announce ",(0,r.jsx)(t.strong,{children:"Docusaurus 2.3"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(t.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(t.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Docusaurus 2.2 social card",src:n(76398).Z+"",width:"1200",height:"600"})}),"\n",(0,r.jsx)(t.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsx)(t.h3,{id:"google-tag-manager-plugin",children:"Google Tag Manager plugin"}),"\n",(0,r.jsx)(t.p,{children:"Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags."}),"\n",(0,r.jsxs)(t.p,{children:["We now have a ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-tag-manager"})})," package that you can use alongside or as an alternative to the existing ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"})," (refer to ",(0,r.jsx)(t.a,{href:"https://support.google.com/tagmanager/answer/7582054",children:"this doc"})," to understand when to use which solution)."]}),"\n",(0,r.jsxs)(t.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})," on ",(0,r.jsx)(t.strong,{children:"July 1, 2023"}),", and ask users to migrate to ",(0,r.jsx)(t.strong,{children:"Google Analytics 4"}),"."]}),(0,r.jsxs)(t.p,{children:["Therefore, we are also ",(0,r.jsxs)(t.strong,{children:["deprecating our existing ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-analytics",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-analytics"})})]})," package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"}),", or the ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:"Google Tag Manager plugin"}),". Refer to the ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated Docusaurus issue"})," for details and questions."]})]}),"\n",(0,r.jsx)(t.h3,{id:"tabs-query-string-support",children:"Tabs Query String Support"}),"\n",(0,r.jsxs)(t.p,{children:["It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ",(0,r.jsx)(t.code,{children:"?qs-param=tab-value"})," search parameter."]}),"\n",(0,r.jsx)(t.p,{children:"This feature allows deep-linking to a specific documentation tab that will pre-selected on page load."}),"\n",(0,r.jsxs)(t.p,{children:["When used alongside the ",(0,r.jsx)(t.code,{children:"groupId"})," prop, the query string tab value takes precedence over the ",(0,r.jsx)(t.code,{children:"localStorage"})," value."]}),"\n",(0,r.jsxs)(t.p,{children:["Make sure to check the ",(0,r.jsx)(t.a,{href:"/docs/markdown-features/tabs#query-string",children:"documentation"})," and the demo below to understand how it works:"]}),"\n","\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-tsx",children:'<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsxs)(o.Z,{groupId:"current-os",queryString:!0,children:[(0,r.jsx)(i.Z,{value:"android",label:"Android",children:(0,r.jsx)(t.p,{children:"Android"})}),(0,r.jsx)(i.Z,{value:"ios",label:"iOS",children:(0,r.jsx)(t.p,{children:"iOS"})})]})}),"\n",(0,r.jsx)(t.h3,{id:"nested-admonitions",children:"Nested admonitions"}),"\n",(0,r.jsx)(t.p,{children:"It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-md",children:"::::tip[nested admonitions]\n\nYou can now nest one admonition within another!\n\n:::danger\n\nUse this sparingly when it makes sense.\n\n:::\n\n::::\n"})}),"\n",(0,r.jsxs)(t.admonition,{title:"nested admonitions",type:"tip",children:[(0,r.jsx)(t.p,{children:"You can now nest one admonition within another!"}),(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"Use this sparingly when it makes sense."})})]}),"\n",(0,r.jsxs)(t.h3,{id:"blog-createfeeditems",children:["Blog ",(0,r.jsx)(t.code,{children:"createFeedItems"})]}),"\n",(0,r.jsxs)(t.p,{children:["A new blog plugin option ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn",children:(0,r.jsx)(t.code,{children:"feedOptions.createFeedItems"})})," gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-tsx",metastring:'title="docusaurus.config.js"',children:"[\n '@docusaurus/preset-classic',\n {\n blog: {\n feedOptions: {\n // highlight-start\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n // highlight-end\n },\n },\n },\n];\n"})}),"\n",(0,r.jsx)(t.h3,{id:"translations",children:"Translations"}),"\n",(0,r.jsx)(t.p,{children:"We added or completed the default theme translation support for multiple languages:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf8\ud83c\uddee ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8541",children:"#8541"})," Slovenian"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8289",children:"#8289"})," Turkish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddee\ud83c\uddf7 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8406",children:"#8406"})," Farsi"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf5\ud83c\uddf1 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8525",children:"#8525"})," Polish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\udde8\ud83c\uddf3 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8423",children:"#8423"})," Chinese"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf8\ud83c\uddea ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8312",children:"#8312"})," Swedish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddfb\ud83c\uddf3 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8450",children:"#8450"})," Vietnamese"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Completing theme translations is an ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,r.jsx)(t.p,{children:"Other notable changes include:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8463",children:"#8463"})," and ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8328",children:"#8328"}),": fix some annoying Docusaurus layout issues"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8539",children:"#8539"}),": Algolia plugin ",(0,r.jsx)(t.code,{children:"options.searchPagePath"})," should be correctly applied to search modal footer"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8462",children:"#8462"}),": Algolia plugin now makes it easier to transform displayed search results with custom logic"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8397",children:"#8397"}),": the ",(0,r.jsx)(t.code,{children:"deploy"})," CLI now understands git url ",(0,r.jsx)(t.code,{children:"insteadOf"})," config"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Check the ",(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"/changelog/2.3.0",children:"2.3.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function g(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var r=n(27378);const s={},a=r.createContext(s);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39391],{80282:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},61132:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(24246),s=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>S});var r=n(24246),s=n(27378),a=n(40624),o=n(75527),i=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[a,o]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,a=b(e),[o,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,u]=f({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,s.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){w(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),a=i[r].value;a!==n&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function I(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,v({},t,e)),(0,r.jsx)(P,v({},t,e))]})}function S(e){const t=(0,x.Z)();return(0,r.jsx)(I,O(v({},e),{children:g(e.children)}),String(t))}},6698:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),s=(n(27378),n(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}function l(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c({children:e,minHeight:t,url:n="http://localhost:3000",style:o,bodyStyle:c}){return(0,r.jsxs)("div",{className:a.browserWindow,style:l(i({},o),{minHeight:t}),children:[(0,r.jsxs)("div",{className:a.browserWindowHeader,children:[(0,r.jsxs)("div",{className:a.buttons,children:[(0,r.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar})]})})]}),(0,r.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},76398:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},32537:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=n(24246),s=n(71670),a=n(6698),o=n(97555),i=n(61132);const l={title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-01-27T00:00:00.000Z")},c=void 0,u={permalink:"/blog/releases/2.3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx",source:"@site/blog/releases/2.3/index.mdx",title:"Docusaurus 2.3",description:"We are happy to announce Docusaurus 2.3.",date:"2023-01-27T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.89,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-01-27T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"},nextItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"}},d={image:n(80282).Z,authorsImageUrls:[void 0]},h=[{value:"Highlights",id:"highlights",level:2},{value:"Google Tag Manager plugin",id:"google-tag-manager-plugin",level:3},{value:"Tabs Query String Support",id:"tabs-query-string-support",level:3},{value:"Nested admonitions",id:"nested-admonitions",level:3},{value:"Blog <code>createFeedItems</code>",id:"blog-createfeeditems",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["We are happy to announce ",(0,r.jsx)(t.strong,{children:"Docusaurus 2.3"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(t.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(t.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Docusaurus 2.2 social card",src:n(76398).Z+"",width:"1200",height:"600"})}),"\n",(0,r.jsx)(t.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsx)(t.h3,{id:"google-tag-manager-plugin",children:"Google Tag Manager plugin"}),"\n",(0,r.jsx)(t.p,{children:"Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags."}),"\n",(0,r.jsxs)(t.p,{children:["We now have a ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-tag-manager"})})," package that you can use alongside or as an alternative to the existing ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"})," (refer to ",(0,r.jsx)(t.a,{href:"https://support.google.com/tagmanager/answer/7582054",children:"this doc"})," to understand when to use which solution)."]}),"\n",(0,r.jsxs)(t.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})," on ",(0,r.jsx)(t.strong,{children:"July 1, 2023"}),", and ask users to migrate to ",(0,r.jsx)(t.strong,{children:"Google Analytics 4"}),"."]}),(0,r.jsxs)(t.p,{children:["Therefore, we are also ",(0,r.jsxs)(t.strong,{children:["deprecating our existing ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-analytics",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-analytics"})})]})," package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"}),", or the ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:"Google Tag Manager plugin"}),". Refer to the ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated Docusaurus issue"})," for details and questions."]})]}),"\n",(0,r.jsx)(t.h3,{id:"tabs-query-string-support",children:"Tabs Query String Support"}),"\n",(0,r.jsxs)(t.p,{children:["It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ",(0,r.jsx)(t.code,{children:"?qs-param=tab-value"})," search parameter."]}),"\n",(0,r.jsx)(t.p,{children:"This feature allows deep-linking to a specific documentation tab that will pre-selected on page load."}),"\n",(0,r.jsxs)(t.p,{children:["When used alongside the ",(0,r.jsx)(t.code,{children:"groupId"})," prop, the query string tab value takes precedence over the ",(0,r.jsx)(t.code,{children:"localStorage"})," value."]}),"\n",(0,r.jsxs)(t.p,{children:["Make sure to check the ",(0,r.jsx)(t.a,{href:"/docs/markdown-features/tabs#query-string",children:"documentation"})," and the demo below to understand how it works:"]}),"\n","\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-tsx",children:'<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsxs)(o.Z,{groupId:"current-os",queryString:!0,children:[(0,r.jsx)(i.Z,{value:"android",label:"Android",children:(0,r.jsx)(t.p,{children:"Android"})}),(0,r.jsx)(i.Z,{value:"ios",label:"iOS",children:(0,r.jsx)(t.p,{children:"iOS"})})]})}),"\n",(0,r.jsx)(t.h3,{id:"nested-admonitions",children:"Nested admonitions"}),"\n",(0,r.jsx)(t.p,{children:"It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-md",children:"::::tip[nested admonitions]\n\nYou can now nest one admonition within another!\n\n:::danger\n\nUse this sparingly when it makes sense.\n\n:::\n\n::::\n"})}),"\n",(0,r.jsxs)(t.admonition,{title:"nested admonitions",type:"tip",children:[(0,r.jsx)(t.p,{children:"You can now nest one admonition within another!"}),(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"Use this sparingly when it makes sense."})})]}),"\n",(0,r.jsxs)(t.h3,{id:"blog-createfeeditems",children:["Blog ",(0,r.jsx)(t.code,{children:"createFeedItems"})]}),"\n",(0,r.jsxs)(t.p,{children:["A new blog plugin option ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn",children:(0,r.jsx)(t.code,{children:"feedOptions.createFeedItems"})})," gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-tsx",metastring:'title="docusaurus.config.js"',children:"[\n '@docusaurus/preset-classic',\n {\n blog: {\n feedOptions: {\n // highlight-start\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n // highlight-end\n },\n },\n },\n];\n"})}),"\n",(0,r.jsx)(t.h3,{id:"translations",children:"Translations"}),"\n",(0,r.jsx)(t.p,{children:"We added or completed the default theme translation support for multiple languages:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf8\ud83c\uddee ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8541",children:"#8541"})," Slovenian"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8289",children:"#8289"})," Turkish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddee\ud83c\uddf7 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8406",children:"#8406"})," Farsi"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf5\ud83c\uddf1 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8525",children:"#8525"})," Polish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\udde8\ud83c\uddf3 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8423",children:"#8423"})," Chinese"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddf8\ud83c\uddea ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8312",children:"#8312"})," Swedish"]}),"\n",(0,r.jsxs)(t.li,{children:["\ud83c\uddfb\ud83c\uddf3 ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8450",children:"#8450"})," Vietnamese"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Completing theme translations is an ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,r.jsx)(t.p,{children:"Other notable changes include:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8463",children:"#8463"})," and ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8328",children:"#8328"}),": fix some annoying Docusaurus layout issues"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8539",children:"#8539"}),": Algolia plugin ",(0,r.jsx)(t.code,{children:"options.searchPagePath"})," should be correctly applied to search modal footer"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8462",children:"#8462"}),": Algolia plugin now makes it easier to transform displayed search results with custom logic"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/8397",children:"#8397"}),": the ",(0,r.jsx)(t.code,{children:"deploy"})," CLI now understands git url ",(0,r.jsx)(t.code,{children:"insteadOf"})," config"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Check the ",(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"/changelog/2.3.0",children:"2.3.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function g(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var r=n(27378);const s={},a=r.createContext(s);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/39485f13.22fab085.js b/assets/js/39485f13.22fab085.js deleted file mode 100644 index 38430f9a3ef8..000000000000 --- a/assets/js/39485f13.22fab085.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41219],{65200:(e,t,a)=>{a.d(t,{Z:()=>s});const s=a.p+"assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg"},28950:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>n,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var s=a(24246),r=a(71670);const o={title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},n=void 0,i={permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",source:"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",title:"Happy 1st Birthday Slash!",description:"Docusaurus makes 1 year! Happy Birthday Slash!",date:"2018-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Birth",permalink:"/blog/tags/birth"}],readingTime:.615,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Co-creator of Docusaurus",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"},nextItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"}},u={authorsImageUrls:[void 0]},c=[];function h(e){const t={a:"a",blockquote:"blockquote",img:"img",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Docusaurus makes 1 year! Happy Birthday Slash!",src:a(65200).Z+"",width:"1805",height:"741"})}),"\n",(0,s.jsxs)(t.p,{children:["Docusaurus ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"went live"})," on December 14, 2017. At the time, we had ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements",children:"8 early adopters"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["We now have nearly ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users",children:"60 known users of Docusaurus"}),", and probably more that we don't know about. We have ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"9K GitHub stars"})," and an active community, particularly ",(0,s.jsx)(t.a,{href:"https://twitter.com/yangshunz",children:"Yangshun Tay"})," and ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Endilie Yacop Sucipto"}),", both of whom are the lead maintainers helping keep this project ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"moving forward"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["Special thanks to ",(0,s.jsx)(t.a,{href:"https://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>n});var s=a(27378);const r={},o=s.createContext(r);function n(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/39485f13.c3fc6f5b.js b/assets/js/39485f13.c3fc6f5b.js new file mode 100644 index 000000000000..125cfd93f6d2 --- /dev/null +++ b/assets/js/39485f13.c3fc6f5b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41219],{65200:(e,t,a)=>{a.d(t,{Z:()=>s});const s=a.p+"assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg"},28950:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>n,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var s=a(24246),r=a(71670);const o={title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},n=void 0,i={permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",source:"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",title:"Happy 1st Birthday Slash!",description:"Docusaurus makes 1 year! Happy Birthday Slash!",date:"2018-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Birth",permalink:"/blog/tags/birth"}],readingTime:.615,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Co-creator of Docusaurus",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"},nextItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"}},u={authorsImageUrls:[void 0]},c=[];function h(e){const t={a:"a",blockquote:"blockquote",img:"img",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Docusaurus makes 1 year! Happy Birthday Slash!",src:a(65200).Z+"",width:"1805",height:"741"})}),"\n",(0,s.jsxs)(t.p,{children:["Docusaurus ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"went live"})," on December 14, 2017. At the time, we had ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements",children:"8 early adopters"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["We now have nearly ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users",children:"60 known users of Docusaurus"}),", and probably more that we don't know about. We have ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"9K GitHub stars"})," and an active community, particularly ",(0,s.jsx)(t.a,{href:"https://twitter.com/yangshunz",children:"Yangshun Tay"})," and ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Endilie Yacop Sucipto"}),", both of whom are the lead maintainers helping keep this project ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"moving forward"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["Special thanks to ",(0,s.jsx)(t.a,{href:"https://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>n});var s=a(27378);const r={},o=s.createContext(r);function n(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3955af78.28350c84.js b/assets/js/3955af78.28350c84.js new file mode 100644 index 000000000000..df79610c46fe --- /dev/null +++ b/assets/js/3955af78.28350c84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1418],{35949:(t,s,o)=>{o.r(s),o.d(s,{assets:()=>u,contentTitle:()=>n,default:()=>a,frontMatter:()=>c,metadata:()=>p,toc:()=>i});var e=o(24246),r=o(71670);const c={},n="Doc Without Custom Props",p={id:"tests/custom-props/doc-without-custom-props",title:"Doc Without Custom Props",description:"This doc doesn't have custom props.",source:"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx",sourceDirName:"tests/custom-props",slug:"/tests/custom-props/doc-without-custom-props",permalink:"/tests/docs/tests/custom-props/doc-without-custom-props",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Doc with Custom Props",permalink:"/tests/docs/tests/custom-props/doc-with-custom-props"},next:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"}},u={},i=[];function d(t){const s={h1:"h1",header:"header",p:"p",...(0,r.a)(),...t.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(s.header,{children:(0,e.jsx)(s.h1,{id:"doc-without-custom-props",children:"Doc Without Custom Props"})}),"\n",(0,e.jsx)(s.p,{children:"This doc doesn't have custom props."})]})}function a(t={}){const{wrapper:s}={...(0,r.a)(),...t.components};return s?(0,e.jsx)(s,{...t,children:(0,e.jsx)(d,{...t})}):d(t)}a.displayName="MDXContent(_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx)"},71670:(t,s,o)=>{o.d(s,{Z:()=>p,a:()=>n});var e=o(27378);const r={},c=e.createContext(r);function n(t){const s=e.useContext(c);return e.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function p(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:n(t.components),e.createElement(c.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3955af78.67b994ab.js b/assets/js/3955af78.67b994ab.js deleted file mode 100644 index a0a9cc91d499..000000000000 --- a/assets/js/3955af78.67b994ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1418],{35949:(t,s,o)=>{o.r(s),o.d(s,{assets:()=>i,contentTitle:()=>n,default:()=>a,frontMatter:()=>c,metadata:()=>p,toc:()=>u});var e=o(24246),r=o(71670);const c={},n="Doc Without Custom Props",p={id:"tests/custom-props/doc-without-custom-props",title:"Doc Without Custom Props",description:"This doc doesn't have custom props.",source:"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx",sourceDirName:"tests/custom-props",slug:"/tests/custom-props/doc-without-custom-props",permalink:"/tests/docs/tests/custom-props/doc-without-custom-props",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Doc with Custom Props",permalink:"/tests/docs/tests/custom-props/doc-with-custom-props"},next:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"}},i={},u=[];function d(t){const s={h1:"h1",header:"header",p:"p",...(0,r.a)(),...t.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(s.header,{children:(0,e.jsx)(s.h1,{id:"doc-without-custom-props",children:"Doc Without Custom Props"})}),"\n",(0,e.jsx)(s.p,{children:"This doc doesn't have custom props."})]})}function a(t={}){const{wrapper:s}={...(0,r.a)(),...t.components};return s?(0,e.jsx)(s,{...t,children:(0,e.jsx)(d,{...t})}):d(t)}a.displayName="MDXContent(_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx)"},71670:(t,s,o)=>{o.d(s,{Z:()=>p,a:()=>n});var e=o(27378);const r={},c=e.createContext(r);function n(t){const s=e.useContext(c);return e.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function p(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:n(t.components),e.createElement(c.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c03c7ff.5bff0ea3.js b/assets/js/3c03c7ff.f2fabf4a.js similarity index 51% rename from assets/js/3c03c7ff.5bff0ea3.js rename to assets/js/3c03c7ff.f2fabf4a.js index 5f1fc6cb2cff..c5be0eab89ed 100644 --- a/assets/js/3c03c7ff.5bff0ea3.js +++ b/assets/js/3c03c7ff.f2fabf4a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87834],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>_});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),a=t(3620),l=t(44479),c=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,c._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=f(e),[i,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{g&&a(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:a}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function C(e){const n=m(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,v({},n,e)),(0,r.jsx)(P,v({},n,e))]})}function _(e){const n=(0,w.Z)();return(0,r.jsx)(C,O(v({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ze});var r={};t.r(r),t.d(r,{ButtonExample:()=>T});var o=t(24246),s=t(27378),i=t(40624),a=t(29088),l=t(32711),c=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){m(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function y(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,w({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function C(){const e=(0,a.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function _(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(C,{})]})}const D=e=>`${e};`;function S(e){var n,{children:t,transformCode:r}=e,s=y(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:a}}=i,c=f();var u;const h=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(w({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:D,theme:c},s),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(_,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(_,{}),(0,o.jsx)(P,{})]})}))})}function N(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function I(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){N(e,n,t[n])}))}return e}function E(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function T(e){return(0,o.jsx)("button",E(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const B=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var Z,M,A=t(89583),U=t(6324),R=t.n(U);function W(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=($=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){W(e,n,t[n])}))}return e}({},H),F=null!=(F={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?F:{},Object.getOwnPropertyDescriptors?Object.defineProperties($,Object.getOwnPropertyDescriptors(F)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(F)).forEach((function(e){Object.defineProperty($,e,Object.getOwnPropertyDescriptor(F,e))})),$);var $,F;const G=Object.keys(H);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=z[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function J(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(G,n)}}(r,o),a=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),c=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<a.length;){const e=a[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));c[n]?l[c[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),a.splice(p,1)}t=a.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(Z=h)[M=n])&&void 0!==t||(Z[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ce(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e})),n)));return(0,o.jsxs)("span",ue(de({},a),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function we(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ye({code:e,className:n}){const[t,r]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),a.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,c.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,c.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,c.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(we,{className:xe.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ce({className:e,onClick:n,isEnabled:t}){const r=(0,c.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function _e({children:e,className:n="",metastring:t,title:r,showLineNumbers:a,language:l}){const{prism:{defaultLanguage:c,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:c),p=f(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),a=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,a),(0,s.useEffect)((()=>{a()}),[e,a]),(0,s.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(q))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:m,code:w}=J(e,{metastring:t,language:h,magicComments:d}),x=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:p,code:w,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:m[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ce,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ye,{className:te.codeButton,code:w})]})]})]})}function De(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Se(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ne(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ee(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}const Te=(Le=function(e){var{children:n}=e,t=Ne(e,["children"]);const r=(0,a.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?_e:re;return(0,o.jsx)(l,Se(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){De(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(S,Ee({scope:B},e)):(0,o.jsx)(Le,Ee({},e))});var Le;function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ze(e){return(0,o.jsx)(Te,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}({},e))}},30636:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png"},77561:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png"},96976:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png"},77414:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png"},15369:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png"},69277:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png"},64518:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png"},59527:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png"},98321:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png"},7016:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png"},68317:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),s=t(97555),i=t(61132);const a='#\n# Your Crowdin credentials\n#\nproject_id: \'428890\'\napi_token_env: CROWDIN_PERSONAL_TOKEN\n# base_path: \'.\'\n# base_url: https://api.crowdin.com\n\n#\n# Choose file structure in Crowdin\n# e.g. true or false\n#\npreserve_hierarchy: true\n\n# We generally want to use the "two-letters-code" of a locale (ie the language)\n# But not for all locales!\n# "pt-BR" may be better to remain as "pt-BR" instead of being transformed to "pt"\n# Note: &/* is Yaml anchor syntax: https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/\nlanguages_mapping: &languages_mapping\n two_letters_code:\n pt-BR: pt-BR\n\n#\n# Files configuration\n#\nfiles:\n - source: /website/i18n/en/**/*\n translation: /website/i18n/%two_letters_code%/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/community/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs-community/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/versioned_docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/blog/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/src/pages/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-pages/**/%original_file_name%\n ignore: [/**/*.js, /**/*.jsx, /**/*.ts, /**/*.tsx, /**/*.css]\n languages_mapping: *languages_mapping\n#\n# Source files filter\n# e.g. "/resources/en/*.json"\n#\n#"source" : "/website/docs/**/*.md",\n#\n# Where translations will be placed\n# e.g. "/resources/docs/%two_letters_code%/%original_file_name%"\n#\n#"translation" : "/website/i18n/%language%/docs/current/%original_file_name%",\n#\n# Files or directories for ignore\n# e.g. ["/**/?.txt", "/**/[0-9].txt", "/**/*\\?*.txt"]\n#\n#"ignore" : [],\n#\n# The dest allows you to specify a file name in Crowdin\n# e.g. "/messages.json"\n#\n#"dest" : "",\n#\n# File type\n# e.g. "json"\n#\n#"type" : "",\n#\n# The parameter "update_option" is optional. If it is not set, after the files update the translations for changed strings will be removed. Use to fix typos and for minor changes in the source strings\n# e.g. "update_as_unapproved" or "update_without_changes"\n#\n#"update_option" : "",\n#\n# Start block (for XML only)\n#\n#\n# Defines whether to translate tags attributes.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_attributes" : 1,\n#\n# Defines whether to translate texts placed inside the tags.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_content" : 1,\n#\n# This is an array of strings, where each item is the XPaths to DOM element that should be imported\n# e.g. ["/content/text", "/content/text[@value]"]\n#\n# "translatable_elements" : [],\n#\n# Defines whether to split long texts into smaller text segments\n# e.g. 0 or 1 (Default is 1)\n#\n# "content_segmentation" : 1,\n#\n# End block (for XML only)\n#\n#\n# Start .properties block\n#\n#\n# Defines whether single quote should be escaped by another single quote or backslash in exported translations\n# e.g. 0 or 1 or 2 or 3 (Default is 3)\n# 0 - do not escape single quote;\n# 1 - escape single quote by another single quote;\n# 2 - escape single quote by backslash;\n# 3 - escape single quote by another single quote only in strings containing variables ( {0} ).\n#\n# "escape_quotes" : 3,\n#\n# Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations.\n# e.g. 0 or 1 (Default is 0)\n# 0 - do not escape special characters\n# 1 - escape special characters by a backslash\n#\n# "escape_special_characters": 0\n#\n#\n# End .properties block\n#\n#\n# Often software projects have custom names for the directories where translations are placed. crowdin-cli allows you to map your own languages to be understandable by Crowdin.\n#\n#"languages_mapping" : {\n# "two_letters_code" : {\n# "crowdin_language_code" : "local_name"\n# }\n#},\n#\n# Does the first line contain header?\n# e.g. true or false\n#\n#"first_line_contains_header" : true,\n#\n# for spreadsheets\n# e.g. "identifier,source_phrase,context,uk,ru,fr"\n#\n# "scheme" : "",\n';var l=t(38112);const c={id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},d="i18n - Using Crowdin",u={id:"i18n/crowdin",title:"i18n - Using Crowdin",description:"The i18n system of Docusaurus is decoupled from any translation software.",source:"@site/docs/i18n/i18n-crowdin.mdx",sourceDirName:"i18n",slug:"/i18n/crowdin",permalink:"/docs/i18n/crowdin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},sidebar:"docs",previous:{title:"Using Git",permalink:"/docs/i18n/git"},next:{title:"What's next?",permalink:"/docs/guides/whats-next"}},h={},p=[{value:"Crowdin overview",id:"crowdin-overview",level:2},{value:"Crowdin tutorial",id:"crowdin-tutorial",level:2},{value:"Prepare the Docusaurus site",id:"prepare-the-docusaurus-site",level:3},{value:"Create a Crowdin project",id:"create-a-crowdin-project",level:3},{value:"Create the Crowdin configuration",id:"create-the-crowdin-configuration",level:3},{value:"Access token",id:"access-token",level:4},{value:"Other configuration fields",id:"other-configuration-fields",level:4},{value:"Install the Crowdin CLI",id:"install-the-crowdin-cli",level:3},{value:"Upload the sources",id:"upload-the-sources",level:3},{value:"Translate the sources",id:"translate-the-sources",level:3},{value:"Download the translations",id:"download-the-translations",level:3},{value:"Automate with CI",id:"automate-with-ci",level:3},{value:"Advanced Crowdin topics",id:"advanced-crowdin-topics",level:2},{value:"MDX",id:"mdx",level:3},{value:"MDX problems",id:"mdx-problems",level:4},{value:"MDX solutions",id:"mdx-solutions",level:4},{value:"Docs versioning",id:"docs-versioning",level:3},{value:"Multi-instance plugins",id:"multi-instance-plugins",level:3},{value:"Maintaining your site",id:"maintaining-your-site",level:3},{value:"VCS (Git) integrations",id:"vcs-git-integrations",level:3},{value:"In-Context localization",id:"in-context-localization",level:3},{value:"Localize edit URLs",id:"localize-edit-urls",level:3},{value:"Example configuration",id:"example-configuration",level:3},{value:"Machine Translation (MT) issue: links/image handling",id:"machine-translation-mt-issue-linksimage-handling",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"i18n---using-crowdin",children:"i18n - Using Crowdin"})}),"\n",(0,r.jsxs)(n.p,{children:["The i18n system of Docusaurus is ",(0,r.jsx)(n.strong,{children:"decoupled from any translation software"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can integrate Docusaurus with the ",(0,r.jsx)(n.strong,{children:"tools and SaaS of your choice"}),", as long as you put the ",(0,r.jsx)(n.strong,{children:"translation files at the correct location"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We document the usage of ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", as ",(0,r.jsx)(n.strong,{children:"one"})," possible ",(0,r.jsx)(n.strong,{children:"integration example"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This is ",(0,r.jsx)(n.strong,{children:"not an endorsement of Crowdin"})," as the unique choice to translate a Docusaurus site, but it is successfully used by Facebook to translate documentation projects such as ",(0,r.jsx)(n.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),", and ",(0,r.jsx)(n.a,{href:"https://reasonml.github.io/",children:"ReasonML"}),"."]}),(0,r.jsxs)(n.p,{children:["Refer to the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"Crowdin documentation"})})," and ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"mailto:support@crowdin.com",children:"Crowdin support"})})," for help."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use this ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/4052",children:"community-driven GitHub discussion"})})," to discuss anything related to Docusaurus + Crowdin."]})}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-overview",children:"Crowdin overview"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin is a translation SaaS, offering a ",(0,r.jsx)(n.a,{href:"https://crowdin.com/page/open-source-project-setup-request",children:"free plan for open-source projects"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"We recommend the following translation workflow:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Upload sources"})," to Crowdin (untranslated files)"]}),"\n",(0,r.jsxs)(n.li,{children:["Use Crowdin to ",(0,r.jsx)(n.strong,{children:"translate the content"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Download translations"})," from Crowdin (localized translation files)"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/cli-tool/",children:"CLI"})," to ",(0,r.jsx)(n.strong,{children:"upload sources"})," and ",(0,r.jsx)(n.strong,{children:"download translations"}),", allowing you to automate the translation process."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:[(0,r.jsx)(n.code,{children:"crowdin.yml"})," configuration file"]})," is convenient for Docusaurus, and permits to ",(0,r.jsx)(n.strong,{children:"download the localized translation files at the expected location"})," (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]/.."}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"official documentation"})})," to know more about advanced features and different translation workflows."]}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-tutorial",children:"Crowdin tutorial"}),"\n",(0,r.jsxs)(n.p,{children:["This is a walk-through of using Crowdin to translate a newly initialized English Docusaurus website into French, and assume you already followed the ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"i18n tutorial"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The end result can be seen at ",(0,r.jsx)(n.a,{href:"https://docusaurus-crowdin-example.netlify.app/",children:"docusaurus-crowdin-example.netlify.app"})," (",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-crowdin-example",children:"repository"}),")."]}),"\n",(0,r.jsx)(n.h3,{id:"prepare-the-docusaurus-site",children:"Prepare the Docusaurus site"}),"\n",(0,r.jsx)(n.p,{children:"Initialize a new Docusaurus site:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx create-docusaurus@latest website classic\n"})}),"\n",(0,r.jsx)(n.p,{children:"Add the site configuration for the French language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n i18n: {\n defaultLocale: 'en',\n locales: ['en', 'fr'],\n },\n themeConfig: {\n navbar: {\n items: [\n // ...\n {\n type: 'localeDropdown',\n position: 'left',\n },\n // ...\n ],\n },\n },\n // ...\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Translate the homepage:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Translate from '@docusaurus/Translate';\nimport Layout from '@theme/Layout';\n\nexport default function Home() {\n return (\n <Layout>\n <h1 style={{margin: 20}}>\n <Translate description=\"The homepage main heading\">\n Welcome to my Docusaurus translated site!\n </Translate>\n </h1>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"create-a-crowdin-project",children:"Create a Crowdin project"}),"\n",(0,r.jsxs)(n.p,{children:["Sign up on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", and create a project."]}),"\n",(0,r.jsx)(n.p,{children:"Use English as the source language, and French as the target language."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Create a Crowdin project with english as source language, and french as target language",src:t(30636).Z+"",width:"1868",height:"1576"})}),"\n",(0,r.jsx)(n.p,{children:"Your project is created, but it is empty for now. We will upload the files to translate in the next steps."}),"\n",(0,r.jsx)(n.h3,{id:"create-the-crowdin-configuration",children:"Create the Crowdin configuration"}),"\n",(0,r.jsxs)(n.p,{children:["This configuration (",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:"doc"}),") provides a mapping for the Crowdin CLI to understand:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Where to find the source files to upload (JSON and Markdown)"}),"\n",(0,r.jsxs)(n.li,{children:["Where to download the files after translation (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," in ",(0,r.jsx)(n.code,{children:"website"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="crowdin.yml"',children:"project_id: '123456'\napi_token_env: CROWDIN_PERSONAL_TOKEN\npreserve_hierarchy: true\nfiles:\n # JSON translation files\n - source: /i18n/en/**/*\n translation: /i18n/%two_letters_code%/**/%original_file_name%\n # Docs Markdown files\n - source: /docs/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n # Blog Markdown files\n - source: /blog/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n"})}),"\n",(0,r.jsx)(n.p,{children:"Crowdin has its own syntax for declaring source/translation paths:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/*"}),": everything in a subfolder"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"%two_letters_code%"}),": the 2-letters variant of Crowdin target languages (",(0,r.jsx)(n.code,{children:"fr"})," in our case)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/%original_file_name%"}),": the translations will preserve the original folder/file hierarchy"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"The Crowdin CLI warnings are not always easy to understand."}),(0,r.jsx)(n.p,{children:"We advise to:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"change one thing at a time"}),"\n",(0,r.jsx)(n.li,{children:"re-upload sources after any configuration change"}),"\n",(0,r.jsxs)(n.li,{children:["use paths starting with ",(0,r.jsx)(n.code,{children:"/"})," (",(0,r.jsx)(n.code,{children:"./"})," does not work)"]}),"\n",(0,r.jsxs)(n.li,{children:["avoid fancy globbing patterns like ",(0,r.jsx)(n.code,{children:"/docs/**/*.(md|mdx)"})," (does not work)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"access-token",children:"Access token"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"api_token_env"})," attribute defines the ",(0,r.jsx)(n.strong,{children:"env variable name"})," read by the Crowdin CLI."]}),"\n",(0,r.jsxs)(n.p,{children:["You can obtain a ",(0,r.jsx)(n.code,{children:"Personal Access Token"})," on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/settings#api-key",children:"your personal profile page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can keep the default value ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"}),", and set this environment variable and on your computer and on the CI server to the generated access token."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["A Personal Access Tokens grant ",(0,r.jsx)(n.strong,{children:"read-write access to all your Crowdin projects"}),"."]}),(0,r.jsxs)(n.p,{children:["You should ",(0,r.jsx)(n.strong,{children:"not commit"})," it, and it may be a good idea to create a dedicated ",(0,r.jsx)(n.strong,{children:"Crowdin profile for your company"})," instead of using a personal account."]})]}),"\n",(0,r.jsx)(n.h4,{id:"other-configuration-fields",children:"Other configuration fields"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"project_id"}),": can be hardcoded, and is found on ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#api"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"preserve_hierarchy"}),": preserve the folder's hierarchy of your docs on Crowdin UI instead of flattening everything"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"install-the-crowdin-cli",children:"Install the Crowdin CLI"}),"\n",(0,r.jsxs)(n.p,{children:["This tutorial uses the CLI version ",(0,r.jsx)(n.code,{children:"3.5.2"}),", but we expect ",(0,r.jsx)(n.code,{children:"3.x"})," releases to keep working."]}),"\n",(0,r.jsx)(n.p,{children:"Install the Crowdin CLI as an npm package to your Docusaurus site:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @crowdin/cli@3\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"crowdin"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n // ...\n "write-translations": "docusaurus write-translations",\n "crowdin": "crowdin"\n }\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Test that you can run the Crowdin CLI:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin -- --version\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin --version\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin --version\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your computer, to allow the CLI to authenticate with the Crowdin API."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Temporarily, you can hardcode your personal token in ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," with ",(0,r.jsx)(n.code,{children:"api_token: 'MY-TOKEN'"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"upload-the-sources",children:"Upload the sources"}),"\n",(0,r.jsxs)(n.p,{children:["Generate the JSON translation files for the default language in ",(0,r.jsx)(n.code,{children:"website/i18n/en"}),":"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run write-translations\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Upload all the JSON and Markdown translation files:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin upload\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI uploading Docusaurus source files",src:t(7016).Z+"",width:"1156",height:"682"})}),"\n",(0,r.jsxs)(n.p,{children:["Your source files are now visible on the Crowdin interface: ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#files"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing Docusaurus source files",src:t(64518).Z+"",width:"2462",height:"1048"})}),"\n",(0,r.jsx)(n.h3,{id:"translate-the-sources",children:"Translate the sources"}),"\n",(0,r.jsxs)(n.p,{children:["On ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>"}),", click on the French target language."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing French translation files",src:t(77414).Z+"",width:"2430",height:"1736"})}),"\n",(0,r.jsx)(n.p,{children:"Translate some Markdown files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a Markdown file",src:t(98321).Z+"",width:"3044",height:"1586"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"Hide String"})," to make sure translators ",(0,r.jsx)(n.strong,{children:"don't translate things that should not be"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Front matter: ",(0,r.jsx)(n.code,{children:"id"}),", ",(0,r.jsx)(n.code,{children:"slug"}),", ",(0,r.jsx)(n.code,{children:"tags"})," ..."]}),"\n",(0,r.jsxs)(n.li,{children:["Admonitions: ",(0,r.jsx)(n.code,{children:":::"}),", ",(0,r.jsx)(n.code,{children:":::note"}),", ",(0,r.jsx)(n.code,{children:":::tip"})," ..."]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI hide string",src:t(15369).Z+"",width:"1518",height:"698"})})]}),"\n",(0,r.jsx)(n.p,{children:"Translate some JSON files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a JSON file",src:t(59527).Z+"",width:"2868",height:"1490"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"description"})," attribute of JSON translation files is visible on Crowdin to help translate the strings."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/pre-translation-via-machine/",children:"Pre-translate"})})," your site, and ",(0,r.jsx)(n.strong,{children:"fix pre-translation mistakes manually"})," (enable the Global Translation Memory in settings first)."]}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"Hide String"})," feature first, as Crowdin is pre-translating things too optimistically."]})]}),"\n",(0,r.jsx)(n.h3,{id:"download-the-translations",children:"Download the translations"}),"\n",(0,r.jsx)(n.p,{children:"Use the Crowdin CLI to download the translated JSON and Markdown files."}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin download\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The translated content should be downloaded in ",(0,r.jsx)(n.code,{children:"i18n/fr"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Start your site on the French locale:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run start -- --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn run start --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run start --locale fr\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure that your website is now translated in French at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/fr/",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/fr/"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"automate-with-ci",children:"Automate with CI"}),"\n",(0,r.jsxs)(n.p,{children:["We will configure the CI to ",(0,r.jsx)(n.strong,{children:"download the Crowdin translations at build time"})," and keep them outside of Git."]}),"\n",(0,r.jsxs)(n.p,{children:["Add ",(0,r.jsx)(n.code,{children:"website/i18n"})," to ",(0,r.jsx)(n.code,{children:".gitignore"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your CI."]}),"\n",(0,r.jsxs)(n.p,{children:["Create an npm script to ",(0,r.jsx)(n.code,{children:"sync"})," Crowdin (extract sources, upload sources, download translations):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Call the ",(0,r.jsx)(n.code,{children:"npm run crowdin:sync"})," script in your CI, just before building the Docusaurus site."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Keep your deploy-previews fast: don't download translations, and use ",(0,r.jsx)(n.code,{children:"npm run build -- --locale en"})," for feature branches."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Crowdin does not support well multiple concurrent uploads/downloads: it is preferable to only include translations to your production deployment, and keep deploy previews untranslated."})}),"\n",(0,r.jsx)(n.h2,{id:"advanced-crowdin-topics",children:"Advanced Crowdin topics"}),"\n",(0,r.jsx)(n.h3,{id:"mdx",children:"MDX"}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Pay special attention to the JSX fragments in MDX documents!"})}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin ",(0,r.jsx)(n.strong,{children:"does not support officially MDX"}),", but they added ",(0,r.jsxs)(n.strong,{children:["support for the ",(0,r.jsx)(n.code,{children:".mdx"})," extension"]}),", and interpret such files as Markdown (instead of plain text)."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-problems",children:"MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"Crowdin thinks that the JSX syntax is embedded HTML and can mess up with the JSX markup when you download the translations, leading to a site that fails to build due to invalid JSX."}),"\n",(0,r.jsxs)(n.p,{children:["Simple JSX fragments using simple string props like ",(0,r.jsx)(n.code,{children:'<Username name="Sebastien"/>'})," will work fine; more complex JSX fragments using object/array props like ",(0,r.jsx)(n.code,{children:'<User person={{name: "Sebastien"}}/>'})," are more likely to fail due to a syntax that does not look like HTML."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-solutions",children:"MDX solutions"}),"\n",(0,r.jsxs)(n.p,{children:["We recommend extracting the complex embedded JSX code as separate standalone components. We also added an ",(0,r.jsx)(n.code,{children:"mdx-code-block"})," escape hatch syntax:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'# How to deploy Docusaurus\n\nTo deploy Docusaurus, run the following command:\n\n````mdx-code-block\xa0\n\nimport Tabs from \'@theme/Tabs\';\n\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="bash" label="Bash">\n\n ```bash\n GIT_USER=<GITHUB_USERNAME> yarn deploy\n ```\n\n </TabItem>\n <TabItem value="windows" label="Windows">\n\n ```batch\n cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n ```\n\n </TabItem>\n</Tabs>\n````\n'})}),"\n",(0,r.jsx)(n.p,{children:"This will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"be interpreted by Crowdin as code blocks (and not mess-up with the markup on download)"}),"\n",(0,r.jsx)(n.li,{children:"be interpreted by Docusaurus as regular JSX (as if it was not wrapped by any code block)"}),"\n",(0,r.jsx)(n.li,{children:"unfortunately opt-out of MDX tooling (IDE syntax highlighting, Prettier...)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"docs-versioning",children:"Docs versioning"}),"\n",(0,r.jsxs)(n.p,{children:["Configure translation files for the ",(0,r.jsx)(n.code,{children:"website/versioned_docs"})," folder."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating a new version, the source strings will generally be quite similar to the current version (",(0,r.jsx)(n.code,{children:"website/docs"}),"), and you don't want to translate the new version docs again and again."]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.code,{children:"Duplicate Strings"})," setting."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin Duplicate Strings option setting",src:t(69277).Z+"",width:"1422",height:"368"})}),"\n",(0,r.jsxs)(n.p,{children:["We recommend using ",(0,r.jsx)(n.code,{children:"Hide"}),", but the ideal setting depends on how much your versions are different."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Not using ",(0,r.jsx)(n.code,{children:"Hide"})," leads to a much larger amount of ",(0,r.jsx)(n.code,{children:"source strings"})," in quotas, and will affect the pricing."]})}),"\n",(0,r.jsx)(n.h3,{id:"multi-instance-plugins",children:"Multi-instance plugins"}),"\n",(0,r.jsx)(n.p,{children:"You need to configure translation files for each plugin instance."}),"\n",(0,r.jsxs)(n.p,{children:["If you have a docs plugin instance with ",(0,r.jsx)(n.code,{children:"id=ios"}),", you will need to configure those source files as well"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"website/ios"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"website/ios_versioned_docs"})," (if versioned)"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"maintaining-your-site",children:"Maintaining your site"}),"\n",(0,r.jsxs)(n.p,{children:["Sometimes, you will ",(0,r.jsx)(n.strong,{children:"remove or rename a source file"})," on Git, and Crowdin will display CLI warnings:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI: download translation warning",src:t(77561).Z+"",width:"2268",height:"886"})}),"\n",(0,r.jsxs)(n.p,{children:["When your sources are refactored, you should use the Crowdin UI to ",(0,r.jsx)(n.strong,{children:"update your Crowdin files manually"}),":"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI: renaming a file",src:t(96976).Z+"",width:"2472",height:"1186"})}),"\n",(0,r.jsx)(n.h3,{id:"vcs-git-integrations",children:"VCS (Git) integrations"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has multiple VCS integrations for ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/github-integration/",children:"GitHub"}),", GitLab, Bitbucket."]}),"\n",(0,r.jsx)(n.admonition,{title:"TL;DR",type:"warning",children:(0,r.jsx)(n.p,{children:"We recommend avoiding them."})}),"\n",(0,r.jsxs)(n.p,{children:["It could have been helpful to be able to edit the translations in both Git and Crowdin, and have a ",(0,r.jsx)(n.strong,{children:"bi-directional sync"})," between the 2 systems."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice, ",(0,r.jsx)(n.strong,{children:"it didn't work very reliably"})," for a few reasons:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The Crowdin -> Git sync works fine (with a pull request)"}),"\n",(0,r.jsx)(n.li,{children:"The Git -> Crowdin sync is manual (you have to press a button)"}),"\n",(0,r.jsx)(n.li,{children:"The heuristics used by Crowdin to match existing Markdown translations to existing Markdown sources are not 100% reliable, and you have to verify the result on Crowdin UI after any sync from Git"}),"\n",(0,r.jsx)(n.li,{children:"2 users concurrently editing on Git and Crowdin can lead to a translation loss"}),"\n",(0,r.jsxs)(n.li,{children:["It requires the ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," file to be at the root of the repository"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"in-context-localization",children:"In-Context localization"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has an ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/in-context-localization/",children:"In-Context localization"})," feature."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"Unfortunately, it does not work yet for technical reasons, but we have good hope it can be solved."}),(0,r.jsxs)(n.p,{children:["Crowdin replaces Markdown strings with technical IDs such as ",(0,r.jsx)(n.code,{children:"crowdin:id12345"}),", but it does so too aggressively, including hidden strings, and messes up with front matter, admonitions, JSX..."]})]}),"\n",(0,r.jsx)(n.h3,{id:"localize-edit-urls",children:"Localize edit URLs"}),"\n",(0,r.jsxs)(n.p,{children:["When the user is browsing a page at ",(0,r.jsx)(n.code,{children:"/fr/doc1"}),", the edit button will link by default to the unlocalized doc at ",(0,r.jsx)(n.code,{children:"website/docs/doc1.md"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You may prefer the edit button to link to the Crowdin interface instead by using the ",(0,r.jsx)(n.code,{children:"editUrl"})," function to customize the edit URLs on a per-locale basis."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const DefaultLocale = 'en';\n\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n editUrl: ({locale, versionDocsDirPath, docPath}) => {\n // Link to Crowdin for French docs\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n // Link to GitHub for English docs\n return `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`;\n },\n // highlight-end\n },\n blog: {\n // highlight-start\n editUrl: ({locale, blogDirPath, blogPath}) => {\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n return `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`;\n },\n // highlight-start\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["It is currently ",(0,r.jsx)(n.strong,{children:"not possible to link to a specific file"})," in Crowdin."]})}),"\n",(0,r.jsx)(n.h3,{id:"example-configuration",children:"Example configuration"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Docusaurus configuration file"})," is a good example of using versioning and multi-instance:"]}),"\n","\n",(0,r.jsx)(l.Z,{className:"language-yaml",title:"crowdin.yml",children:a.split("\n").map((e=>!e.startsWith("#")&&e)).filter(Boolean).join("\n")}),"\n",(0,r.jsx)(n.h3,{id:"machine-translation-mt-issue-linksimage-handling",children:"Machine Translation (MT) issue: links/image handling"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin recently rolled out some major changes to the markdown file format and now the links are treated differently than they were before. Before they were considered as tags, but now they appear as plain text. Because of these changes the plain text links are passed to the MT engine which attempts to translate the target, thus breaking the translation (for instance: this string ",(0,r.jsx)(n.code,{children:"Allez voir [ma merveilleuse page](/ma-merveilleuse-page)"})," is translated ",(0,r.jsx)(n.code,{children:"Check out [my wonderful page](/my-wonderful-page)"}),", and this breaks docusaurus i18n workflow as the page name should not be translated)."]}),"\n",(0,r.jsx)(n.p,{children:"As of 2023 Dec.7, they are not planning to change the logic of how links are treated, so you should have this in mind if you plan to use Crowdin with MT."})]})}function f(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87834],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>_});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),a=t(3620),l=t(44479),c=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,c._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=f(e),[i,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{g&&a(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:a}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function C(e){const n=m(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,v({},n,e)),(0,r.jsx)(P,v({},n,e))]})}function _(e){const n=(0,w.Z)();return(0,r.jsx)(C,O(v({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ze});var r={};t.r(r),t.d(r,{ButtonExample:()=>T});var o=t(24246),s=t(27378),i=t(40624),a=t(29088),l=t(32711),c=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){m(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function y(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,w({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function C(){const e=(0,a.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function _(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(C,{})]})}const D=e=>`${e};`;function S(e){var n,{children:t,transformCode:r}=e,s=y(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:a}}=i,c=f();var u;const h=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(w({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:D,theme:c},s),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(_,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(_,{}),(0,o.jsx)(P,{})]})}))})}function N(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function I(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){N(e,n,t[n])}))}return e}function E(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function T(e){return(0,o.jsx)("button",E(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const B=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var Z,M,A=t(89583),U=t(6324),R=t.n(U);function W(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},$=(z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){W(e,n,t[n])}))}return e}({},H),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(G)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(G)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(G,e))})),z);var z,G;const F=Object.keys(H);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=$[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function J(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(F,n)}}(r,o),a=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),c=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<a.length;){const e=a[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));c[n]?l[c[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),a.splice(p,1)}t=a.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(Z=h)[M=n])&&void 0!==t||(Z[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ce(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e})),n)));return(0,o.jsxs)("span",ue(de({},a),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function we(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ye({code:e,className:n}){const[t,r]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),a.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,c.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,c.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,c.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(we,{className:xe.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ce({className:e,onClick:n,isEnabled:t}){const r=(0,c.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function _e({children:e,className:n="",metastring:t,title:r,showLineNumbers:a,language:l}){const{prism:{defaultLanguage:c,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:c),p=f(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),a=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,a),(0,s.useEffect)((()=>{a()}),[e,a]),(0,s.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(q))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:m,code:w}=J(e,{metastring:t,language:h,magicComments:d}),x=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:p,code:w,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:m[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ce,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ye,{className:te.codeButton,code:w})]})]})]})}function De(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Se(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ne(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ee(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}const Te=(Le=function(e){var{children:n}=e,t=Ne(e,["children"]);const r=(0,a.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?_e:re;return(0,o.jsx)(l,Se(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){De(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(S,Ee({scope:B},e)):(0,o.jsx)(Le,Ee({},e))});var Le;function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ze(e){return(0,o.jsx)(Te,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}({},e))}},30636:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png"},77561:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png"},96976:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png"},77414:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png"},15369:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png"},69277:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png"},64518:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png"},59527:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png"},98321:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png"},7016:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png"},68317:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),s=t(97555),i=t(61132);const a='#\n# Your Crowdin credentials\n#\nproject_id: \'428890\'\napi_token_env: CROWDIN_PERSONAL_TOKEN\n# base_path: \'.\'\n# base_url: https://api.crowdin.com\n\n#\n# Choose file structure in Crowdin\n# e.g. true or false\n#\npreserve_hierarchy: true\n\n# We generally want to use the "two-letters-code" of a locale (ie the language)\n# But not for all locales!\n# "pt-BR" may be better to remain as "pt-BR" instead of being transformed to "pt"\n# Note: &/* is Yaml anchor syntax: https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/\nlanguages_mapping: &languages_mapping\n two_letters_code:\n pt-BR: pt-BR\n\n#\n# Files configuration\n#\nfiles:\n - source: /website/i18n/en/**/*\n translation: /website/i18n/%two_letters_code%/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/community/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs-community/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/versioned_docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/blog/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/src/pages/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-pages/**/%original_file_name%\n ignore: [/**/*.js, /**/*.jsx, /**/*.ts, /**/*.tsx, /**/*.css]\n languages_mapping: *languages_mapping\n#\n# Source files filter\n# e.g. "/resources/en/*.json"\n#\n#"source" : "/website/docs/**/*.md",\n#\n# Where translations will be placed\n# e.g. "/resources/docs/%two_letters_code%/%original_file_name%"\n#\n#"translation" : "/website/i18n/%language%/docs/current/%original_file_name%",\n#\n# Files or directories for ignore\n# e.g. ["/**/?.txt", "/**/[0-9].txt", "/**/*\\?*.txt"]\n#\n#"ignore" : [],\n#\n# The dest allows you to specify a file name in Crowdin\n# e.g. "/messages.json"\n#\n#"dest" : "",\n#\n# File type\n# e.g. "json"\n#\n#"type" : "",\n#\n# The parameter "update_option" is optional. If it is not set, after the files update the translations for changed strings will be removed. Use to fix typos and for minor changes in the source strings\n# e.g. "update_as_unapproved" or "update_without_changes"\n#\n#"update_option" : "",\n#\n# Start block (for XML only)\n#\n#\n# Defines whether to translate tags attributes.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_attributes" : 1,\n#\n# Defines whether to translate texts placed inside the tags.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_content" : 1,\n#\n# This is an array of strings, where each item is the XPaths to DOM element that should be imported\n# e.g. ["/content/text", "/content/text[@value]"]\n#\n# "translatable_elements" : [],\n#\n# Defines whether to split long texts into smaller text segments\n# e.g. 0 or 1 (Default is 1)\n#\n# "content_segmentation" : 1,\n#\n# End block (for XML only)\n#\n#\n# Start .properties block\n#\n#\n# Defines whether single quote should be escaped by another single quote or backslash in exported translations\n# e.g. 0 or 1 or 2 or 3 (Default is 3)\n# 0 - do not escape single quote;\n# 1 - escape single quote by another single quote;\n# 2 - escape single quote by backslash;\n# 3 - escape single quote by another single quote only in strings containing variables ( {0} ).\n#\n# "escape_quotes" : 3,\n#\n# Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations.\n# e.g. 0 or 1 (Default is 0)\n# 0 - do not escape special characters\n# 1 - escape special characters by a backslash\n#\n# "escape_special_characters": 0\n#\n#\n# End .properties block\n#\n#\n# Often software projects have custom names for the directories where translations are placed. crowdin-cli allows you to map your own languages to be understandable by Crowdin.\n#\n#"languages_mapping" : {\n# "two_letters_code" : {\n# "crowdin_language_code" : "local_name"\n# }\n#},\n#\n# Does the first line contain header?\n# e.g. true or false\n#\n#"first_line_contains_header" : true,\n#\n# for spreadsheets\n# e.g. "identifier,source_phrase,context,uk,ru,fr"\n#\n# "scheme" : "",\n';var l=t(38112);const c={id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},d="i18n - Using Crowdin",u={id:"i18n/crowdin",title:"i18n - Using Crowdin",description:"The i18n system of Docusaurus is decoupled from any translation software.",source:"@site/docs/i18n/i18n-crowdin.mdx",sourceDirName:"i18n",slug:"/i18n/crowdin",permalink:"/docs/i18n/crowdin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},sidebar:"docs",previous:{title:"Using Git",permalink:"/docs/i18n/git"},next:{title:"What's next?",permalink:"/docs/guides/whats-next"}},h={},p=[{value:"Crowdin overview",id:"crowdin-overview",level:2},{value:"Crowdin tutorial",id:"crowdin-tutorial",level:2},{value:"Prepare the Docusaurus site",id:"prepare-the-docusaurus-site",level:3},{value:"Create a Crowdin project",id:"create-a-crowdin-project",level:3},{value:"Create the Crowdin configuration",id:"create-the-crowdin-configuration",level:3},{value:"Access token",id:"access-token",level:4},{value:"Other configuration fields",id:"other-configuration-fields",level:4},{value:"Install the Crowdin CLI",id:"install-the-crowdin-cli",level:3},{value:"Upload the sources",id:"upload-the-sources",level:3},{value:"Translate the sources",id:"translate-the-sources",level:3},{value:"Download the translations",id:"download-the-translations",level:3},{value:"Automate with CI",id:"automate-with-ci",level:3},{value:"Advanced Crowdin topics",id:"advanced-crowdin-topics",level:2},{value:"MDX",id:"mdx",level:3},{value:"MDX problems",id:"mdx-problems",level:4},{value:"MDX solutions",id:"mdx-solutions",level:4},{value:"Docs versioning",id:"docs-versioning",level:3},{value:"Multi-instance plugins",id:"multi-instance-plugins",level:3},{value:"Maintaining your site",id:"maintaining-your-site",level:3},{value:"VCS (Git) integrations",id:"vcs-git-integrations",level:3},{value:"In-Context localization",id:"in-context-localization",level:3},{value:"Localize edit URLs",id:"localize-edit-urls",level:3},{value:"Example configuration",id:"example-configuration",level:3},{value:"Machine Translation (MT) issue: links/image handling",id:"machine-translation-mt-issue-linksimage-handling",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"i18n---using-crowdin",children:"i18n - Using Crowdin"})}),"\n",(0,r.jsxs)(n.p,{children:["The i18n system of Docusaurus is ",(0,r.jsx)(n.strong,{children:"decoupled from any translation software"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can integrate Docusaurus with the ",(0,r.jsx)(n.strong,{children:"tools and SaaS of your choice"}),", as long as you put the ",(0,r.jsx)(n.strong,{children:"translation files at the correct location"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We document the usage of ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", as ",(0,r.jsx)(n.strong,{children:"one"})," possible ",(0,r.jsx)(n.strong,{children:"integration example"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This is ",(0,r.jsx)(n.strong,{children:"not an endorsement of Crowdin"})," as the unique choice to translate a Docusaurus site, but it is successfully used by Facebook to translate documentation projects such as ",(0,r.jsx)(n.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),", and ",(0,r.jsx)(n.a,{href:"https://reasonml.github.io/",children:"ReasonML"}),"."]}),(0,r.jsxs)(n.p,{children:["Refer to the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"Crowdin documentation"})})," and ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"mailto:support@crowdin.com",children:"Crowdin support"})})," for help."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use this ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/4052",children:"community-driven GitHub discussion"})})," to discuss anything related to Docusaurus + Crowdin."]})}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-overview",children:"Crowdin overview"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin is a translation SaaS, offering a ",(0,r.jsx)(n.a,{href:"https://crowdin.com/page/open-source-project-setup-request",children:"free plan for open-source projects"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"We recommend the following translation workflow:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Upload sources"})," to Crowdin (untranslated files)"]}),"\n",(0,r.jsxs)(n.li,{children:["Use Crowdin to ",(0,r.jsx)(n.strong,{children:"translate the content"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Download translations"})," from Crowdin (localized translation files)"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/cli-tool/",children:"CLI"})," to ",(0,r.jsx)(n.strong,{children:"upload sources"})," and ",(0,r.jsx)(n.strong,{children:"download translations"}),", allowing you to automate the translation process."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:[(0,r.jsx)(n.code,{children:"crowdin.yml"})," configuration file"]})," is convenient for Docusaurus, and permits to ",(0,r.jsx)(n.strong,{children:"download the localized translation files at the expected location"})," (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]/.."}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"official documentation"})})," to know more about advanced features and different translation workflows."]}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-tutorial",children:"Crowdin tutorial"}),"\n",(0,r.jsxs)(n.p,{children:["This is a walk-through of using Crowdin to translate a newly initialized English Docusaurus website into French, and assume you already followed the ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"i18n tutorial"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The end result can be seen at ",(0,r.jsx)(n.a,{href:"https://docusaurus-crowdin-example.netlify.app/",children:"docusaurus-crowdin-example.netlify.app"})," (",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-crowdin-example",children:"repository"}),")."]}),"\n",(0,r.jsx)(n.h3,{id:"prepare-the-docusaurus-site",children:"Prepare the Docusaurus site"}),"\n",(0,r.jsx)(n.p,{children:"Initialize a new Docusaurus site:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx create-docusaurus@latest website classic\n"})}),"\n",(0,r.jsx)(n.p,{children:"Add the site configuration for the French language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n i18n: {\n defaultLocale: 'en',\n locales: ['en', 'fr'],\n },\n themeConfig: {\n navbar: {\n items: [\n // ...\n {\n type: 'localeDropdown',\n position: 'left',\n },\n // ...\n ],\n },\n },\n // ...\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Translate the homepage:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Translate from '@docusaurus/Translate';\nimport Layout from '@theme/Layout';\n\nexport default function Home() {\n return (\n <Layout>\n <h1 style={{margin: 20}}>\n <Translate description=\"The homepage main heading\">\n Welcome to my Docusaurus translated site!\n </Translate>\n </h1>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"create-a-crowdin-project",children:"Create a Crowdin project"}),"\n",(0,r.jsxs)(n.p,{children:["Sign up on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", and create a project."]}),"\n",(0,r.jsx)(n.p,{children:"Use English as the source language, and French as the target language."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Create a Crowdin project with english as source language, and french as target language",src:t(30636).Z+"",width:"1868",height:"1576"})}),"\n",(0,r.jsx)(n.p,{children:"Your project is created, but it is empty for now. We will upload the files to translate in the next steps."}),"\n",(0,r.jsx)(n.h3,{id:"create-the-crowdin-configuration",children:"Create the Crowdin configuration"}),"\n",(0,r.jsxs)(n.p,{children:["This configuration (",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:"doc"}),") provides a mapping for the Crowdin CLI to understand:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Where to find the source files to upload (JSON and Markdown)"}),"\n",(0,r.jsxs)(n.li,{children:["Where to download the files after translation (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," in ",(0,r.jsx)(n.code,{children:"website"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="crowdin.yml"',children:"project_id: '123456'\napi_token_env: CROWDIN_PERSONAL_TOKEN\npreserve_hierarchy: true\nfiles:\n # JSON translation files\n - source: /i18n/en/**/*\n translation: /i18n/%two_letters_code%/**/%original_file_name%\n # Docs Markdown files\n - source: /docs/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n # Blog Markdown files\n - source: /blog/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n"})}),"\n",(0,r.jsx)(n.p,{children:"Crowdin has its own syntax for declaring source/translation paths:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/*"}),": everything in a subfolder"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"%two_letters_code%"}),": the 2-letters variant of Crowdin target languages (",(0,r.jsx)(n.code,{children:"fr"})," in our case)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/%original_file_name%"}),": the translations will preserve the original folder/file hierarchy"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"The Crowdin CLI warnings are not always easy to understand."}),(0,r.jsx)(n.p,{children:"We advise to:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"change one thing at a time"}),"\n",(0,r.jsx)(n.li,{children:"re-upload sources after any configuration change"}),"\n",(0,r.jsxs)(n.li,{children:["use paths starting with ",(0,r.jsx)(n.code,{children:"/"})," (",(0,r.jsx)(n.code,{children:"./"})," does not work)"]}),"\n",(0,r.jsxs)(n.li,{children:["avoid fancy globbing patterns like ",(0,r.jsx)(n.code,{children:"/docs/**/*.(md|mdx)"})," (does not work)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"access-token",children:"Access token"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"api_token_env"})," attribute defines the ",(0,r.jsx)(n.strong,{children:"env variable name"})," read by the Crowdin CLI."]}),"\n",(0,r.jsxs)(n.p,{children:["You can obtain a ",(0,r.jsx)(n.code,{children:"Personal Access Token"})," on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/settings#api-key",children:"your personal profile page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can keep the default value ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"}),", and set this environment variable and on your computer and on the CI server to the generated access token."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["A Personal Access Tokens grant ",(0,r.jsx)(n.strong,{children:"read-write access to all your Crowdin projects"}),"."]}),(0,r.jsxs)(n.p,{children:["You should ",(0,r.jsx)(n.strong,{children:"not commit"})," it, and it may be a good idea to create a dedicated ",(0,r.jsx)(n.strong,{children:"Crowdin profile for your company"})," instead of using a personal account."]})]}),"\n",(0,r.jsx)(n.h4,{id:"other-configuration-fields",children:"Other configuration fields"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"project_id"}),": can be hardcoded, and is found on ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#api"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"preserve_hierarchy"}),": preserve the folder's hierarchy of your docs on Crowdin UI instead of flattening everything"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"install-the-crowdin-cli",children:"Install the Crowdin CLI"}),"\n",(0,r.jsxs)(n.p,{children:["This tutorial uses the CLI version ",(0,r.jsx)(n.code,{children:"3.5.2"}),", but we expect ",(0,r.jsx)(n.code,{children:"3.x"})," releases to keep working."]}),"\n",(0,r.jsx)(n.p,{children:"Install the Crowdin CLI as an npm package to your Docusaurus site:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @crowdin/cli@3\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"crowdin"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n // ...\n "write-translations": "docusaurus write-translations",\n "crowdin": "crowdin"\n }\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Test that you can run the Crowdin CLI:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin -- --version\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin --version\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin --version\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your computer, to allow the CLI to authenticate with the Crowdin API."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Temporarily, you can hardcode your personal token in ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," with ",(0,r.jsx)(n.code,{children:"api_token: 'MY-TOKEN'"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"upload-the-sources",children:"Upload the sources"}),"\n",(0,r.jsxs)(n.p,{children:["Generate the JSON translation files for the default language in ",(0,r.jsx)(n.code,{children:"website/i18n/en"}),":"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run write-translations\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Upload all the JSON and Markdown translation files:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin upload\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI uploading Docusaurus source files",src:t(7016).Z+"",width:"1156",height:"682"})}),"\n",(0,r.jsxs)(n.p,{children:["Your source files are now visible on the Crowdin interface: ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#files"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing Docusaurus source files",src:t(64518).Z+"",width:"2462",height:"1048"})}),"\n",(0,r.jsx)(n.h3,{id:"translate-the-sources",children:"Translate the sources"}),"\n",(0,r.jsxs)(n.p,{children:["On ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>"}),", click on the French target language."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing French translation files",src:t(77414).Z+"",width:"2430",height:"1736"})}),"\n",(0,r.jsx)(n.p,{children:"Translate some Markdown files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a Markdown file",src:t(98321).Z+"",width:"3044",height:"1586"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"Hide String"})," to make sure translators ",(0,r.jsx)(n.strong,{children:"don't translate things that should not be"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Front matter: ",(0,r.jsx)(n.code,{children:"id"}),", ",(0,r.jsx)(n.code,{children:"slug"}),", ",(0,r.jsx)(n.code,{children:"tags"})," ..."]}),"\n",(0,r.jsxs)(n.li,{children:["Admonitions: ",(0,r.jsx)(n.code,{children:":::"}),", ",(0,r.jsx)(n.code,{children:":::note"}),", ",(0,r.jsx)(n.code,{children:":::tip"})," ..."]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI hide string",src:t(15369).Z+"",width:"1518",height:"698"})})]}),"\n",(0,r.jsx)(n.p,{children:"Translate some JSON files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a JSON file",src:t(59527).Z+"",width:"2868",height:"1490"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"description"})," attribute of JSON translation files is visible on Crowdin to help translate the strings."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/pre-translation-via-machine/",children:"Pre-translate"})})," your site, and ",(0,r.jsx)(n.strong,{children:"fix pre-translation mistakes manually"})," (enable the Global Translation Memory in settings first)."]}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"Hide String"})," feature first, as Crowdin is pre-translating things too optimistically."]})]}),"\n",(0,r.jsx)(n.h3,{id:"download-the-translations",children:"Download the translations"}),"\n",(0,r.jsx)(n.p,{children:"Use the Crowdin CLI to download the translated JSON and Markdown files."}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin download\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The translated content should be downloaded in ",(0,r.jsx)(n.code,{children:"i18n/fr"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Start your site on the French locale:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run start -- --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn run start --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run start --locale fr\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure that your website is now translated in French at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/fr/",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/fr/"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"automate-with-ci",children:"Automate with CI"}),"\n",(0,r.jsxs)(n.p,{children:["We will configure the CI to ",(0,r.jsx)(n.strong,{children:"download the Crowdin translations at build time"})," and keep them outside of Git."]}),"\n",(0,r.jsxs)(n.p,{children:["Add ",(0,r.jsx)(n.code,{children:"website/i18n"})," to ",(0,r.jsx)(n.code,{children:".gitignore"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your CI."]}),"\n",(0,r.jsxs)(n.p,{children:["Create an npm script to ",(0,r.jsx)(n.code,{children:"sync"})," Crowdin (extract sources, upload sources, download translations):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Call the ",(0,r.jsx)(n.code,{children:"npm run crowdin:sync"})," script in your CI, just before building the Docusaurus site."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Keep your deploy-previews fast: don't download translations, and use ",(0,r.jsx)(n.code,{children:"npm run build -- --locale en"})," for feature branches."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Crowdin does not support well multiple concurrent uploads/downloads: it is preferable to only include translations to your production deployment, and keep deploy previews untranslated."})}),"\n",(0,r.jsx)(n.h2,{id:"advanced-crowdin-topics",children:"Advanced Crowdin topics"}),"\n",(0,r.jsx)(n.h3,{id:"mdx",children:"MDX"}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Pay special attention to the JSX fragments in MDX documents!"})}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin ",(0,r.jsx)(n.strong,{children:"does not support officially MDX"}),", but they added ",(0,r.jsxs)(n.strong,{children:["support for the ",(0,r.jsx)(n.code,{children:".mdx"})," extension"]}),", and interpret such files as Markdown (instead of plain text)."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-problems",children:"MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"Crowdin thinks that the JSX syntax is embedded HTML and can mess up with the JSX markup when you download the translations, leading to a site that fails to build due to invalid JSX."}),"\n",(0,r.jsxs)(n.p,{children:["Simple JSX fragments using simple string props like ",(0,r.jsx)(n.code,{children:'<Username name="Sebastien"/>'})," will work fine; more complex JSX fragments using object/array props like ",(0,r.jsx)(n.code,{children:'<User person={{name: "Sebastien"}}/>'})," are more likely to fail due to a syntax that does not look like HTML."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-solutions",children:"MDX solutions"}),"\n",(0,r.jsxs)(n.p,{children:["We recommend extracting the complex embedded JSX code as separate standalone components. We also added an ",(0,r.jsx)(n.code,{children:"mdx-code-block"})," escape hatch syntax:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'# How to deploy Docusaurus\n\nTo deploy Docusaurus, run the following command:\n\n````mdx-code-block\xa0\n\nimport Tabs from \'@theme/Tabs\';\n\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="bash" label="Bash">\n\n ```bash\n GIT_USER=<GITHUB_USERNAME> yarn deploy\n ```\n\n </TabItem>\n <TabItem value="windows" label="Windows">\n\n ```batch\n cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n ```\n\n </TabItem>\n</Tabs>\n````\n'})}),"\n",(0,r.jsx)(n.p,{children:"This will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"be interpreted by Crowdin as code blocks (and not mess-up with the markup on download)"}),"\n",(0,r.jsx)(n.li,{children:"be interpreted by Docusaurus as regular JSX (as if it was not wrapped by any code block)"}),"\n",(0,r.jsx)(n.li,{children:"unfortunately opt-out of MDX tooling (IDE syntax highlighting, Prettier...)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"docs-versioning",children:"Docs versioning"}),"\n",(0,r.jsxs)(n.p,{children:["Configure translation files for the ",(0,r.jsx)(n.code,{children:"website/versioned_docs"})," folder."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating a new version, the source strings will generally be quite similar to the current version (",(0,r.jsx)(n.code,{children:"website/docs"}),"), and you don't want to translate the new version docs again and again."]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.code,{children:"Duplicate Strings"})," setting."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin Duplicate Strings option setting",src:t(69277).Z+"",width:"1422",height:"368"})}),"\n",(0,r.jsxs)(n.p,{children:["We recommend using ",(0,r.jsx)(n.code,{children:"Hide"}),", but the ideal setting depends on how much your versions are different."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Not using ",(0,r.jsx)(n.code,{children:"Hide"})," leads to a much larger amount of ",(0,r.jsx)(n.code,{children:"source strings"})," in quotas, and will affect the pricing."]})}),"\n",(0,r.jsx)(n.h3,{id:"multi-instance-plugins",children:"Multi-instance plugins"}),"\n",(0,r.jsx)(n.p,{children:"You need to configure translation files for each plugin instance."}),"\n",(0,r.jsxs)(n.p,{children:["If you have a docs plugin instance with ",(0,r.jsx)(n.code,{children:"id=ios"}),", you will need to configure those source files as well"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"website/ios"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"website/ios_versioned_docs"})," (if versioned)"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"maintaining-your-site",children:"Maintaining your site"}),"\n",(0,r.jsxs)(n.p,{children:["Sometimes, you will ",(0,r.jsx)(n.strong,{children:"remove or rename a source file"})," on Git, and Crowdin will display CLI warnings:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI: download translation warning",src:t(77561).Z+"",width:"2268",height:"886"})}),"\n",(0,r.jsxs)(n.p,{children:["When your sources are refactored, you should use the Crowdin UI to ",(0,r.jsx)(n.strong,{children:"update your Crowdin files manually"}),":"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI: renaming a file",src:t(96976).Z+"",width:"2472",height:"1186"})}),"\n",(0,r.jsx)(n.h3,{id:"vcs-git-integrations",children:"VCS (Git) integrations"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has multiple VCS integrations for ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/github-integration/",children:"GitHub"}),", GitLab, Bitbucket."]}),"\n",(0,r.jsx)(n.admonition,{title:"TL;DR",type:"warning",children:(0,r.jsx)(n.p,{children:"We recommend avoiding them."})}),"\n",(0,r.jsxs)(n.p,{children:["It could have been helpful to be able to edit the translations in both Git and Crowdin, and have a ",(0,r.jsx)(n.strong,{children:"bi-directional sync"})," between the 2 systems."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice, ",(0,r.jsx)(n.strong,{children:"it didn't work very reliably"})," for a few reasons:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The Crowdin -> Git sync works fine (with a pull request)"}),"\n",(0,r.jsx)(n.li,{children:"The Git -> Crowdin sync is manual (you have to press a button)"}),"\n",(0,r.jsx)(n.li,{children:"The heuristics used by Crowdin to match existing Markdown translations to existing Markdown sources are not 100% reliable, and you have to verify the result on Crowdin UI after any sync from Git"}),"\n",(0,r.jsx)(n.li,{children:"2 users concurrently editing on Git and Crowdin can lead to a translation loss"}),"\n",(0,r.jsxs)(n.li,{children:["It requires the ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," file to be at the root of the repository"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"in-context-localization",children:"In-Context localization"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has an ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/in-context-localization/",children:"In-Context localization"})," feature."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"Unfortunately, it does not work yet for technical reasons, but we have good hope it can be solved."}),(0,r.jsxs)(n.p,{children:["Crowdin replaces Markdown strings with technical IDs such as ",(0,r.jsx)(n.code,{children:"crowdin:id12345"}),", but it does so too aggressively, including hidden strings, and messes up with front matter, admonitions, JSX..."]})]}),"\n",(0,r.jsx)(n.h3,{id:"localize-edit-urls",children:"Localize edit URLs"}),"\n",(0,r.jsxs)(n.p,{children:["When the user is browsing a page at ",(0,r.jsx)(n.code,{children:"/fr/doc1"}),", the edit button will link by default to the unlocalized doc at ",(0,r.jsx)(n.code,{children:"website/docs/doc1.md"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You may prefer the edit button to link to the Crowdin interface instead by using the ",(0,r.jsx)(n.code,{children:"editUrl"})," function to customize the edit URLs on a per-locale basis."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const DefaultLocale = 'en';\n\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n editUrl: ({locale, versionDocsDirPath, docPath}) => {\n // Link to Crowdin for French docs\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n // Link to GitHub for English docs\n return `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`;\n },\n // highlight-end\n },\n blog: {\n // highlight-start\n editUrl: ({locale, blogDirPath, blogPath}) => {\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n return `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`;\n },\n // highlight-start\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["It is currently ",(0,r.jsx)(n.strong,{children:"not possible to link to a specific file"})," in Crowdin."]})}),"\n",(0,r.jsx)(n.h3,{id:"example-configuration",children:"Example configuration"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Docusaurus configuration file"})," is a good example of using versioning and multi-instance:"]}),"\n","\n",(0,r.jsx)(l.Z,{className:"language-yaml",title:"crowdin.yml",children:a.split("\n").map((e=>!e.startsWith("#")&&e)).filter(Boolean).join("\n")}),"\n",(0,r.jsx)(n.h3,{id:"machine-translation-mt-issue-linksimage-handling",children:"Machine Translation (MT) issue: links/image handling"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin recently rolled out some major changes to the markdown file format and now the links are treated differently than they were before. Before they were considered as tags, but now they appear as plain text. Because of these changes the plain text links are passed to the MT engine which attempts to translate the target, thus breaking the translation (for instance: this string ",(0,r.jsx)(n.code,{children:"Allez voir [ma merveilleuse page](/ma-merveilleuse-page)"})," is translated ",(0,r.jsx)(n.code,{children:"Check out [my wonderful page](/my-wonderful-page)"}),", and this breaks docusaurus i18n workflow as the page name should not be translated)."]}),"\n",(0,r.jsx)(n.p,{children:"As of 2023 Dec.7, they are not planning to change the logic of how links are treated, so you should have this in mind if you plan to use Crowdin with MT."})]})}function f(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/3c0a97de.2c136b71.js b/assets/js/3c0a97de.2c136b71.js deleted file mode 100644 index 96b39fdd3a1b..000000000000 --- a/assets/js/3c0a97de.2c136b71.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35528],{13950:e=>{e.exports=JSON.parse('{"allContent":{"docusaurus-plugin-content-docs":{"default":{"loadedVersions":[{"versionName":"current","label":"Canary \ud83d\udea7","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/docs","tagsPath":"/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/sidebars.ts","contentPath":"/home/runner/work/docusaurus/docusaurus/website/docs","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs/current","docs":[{"id":"advanced/architecture","title":"Architecture","description":"How Docusaurus works to build your app","source":"@site/docs/advanced/architecture.mdx","sourceDirName":"advanced","slug":"/advanced/architecture","permalink":"/docs/advanced/architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/architecture.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"How Docusaurus works to build your app"},"sidebar":"docs","previous":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"},"next":{"title":"Plugins","permalink":"/docs/advanced/plugins"}},{"id":"advanced/client","title":"Client architecture","description":"How the Docusaurus client is structured","source":"@site/docs/advanced/client.mdx","sourceDirName":"advanced","slug":"/advanced/client","permalink":"/docs/advanced/client","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"How the Docusaurus client is structured"},"sidebar":"docs","previous":{"title":"Static site generation","permalink":"/docs/advanced/ssg"},"next":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"}},{"id":"advanced/index","title":"Advanced Tutorials","description":"This section is not going to be very structured, but we will cover the following topics:","source":"@site/docs/advanced/index.mdx","sourceDirName":"advanced","slug":"/advanced/","permalink":"/docs/advanced/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"docs","previous":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"},"next":{"title":"Architecture","permalink":"/docs/advanced/architecture"}},{"id":"advanced/plugins","title":"Plugins","description":"Plugins are the building blocks of features in a Docusaurus site. Each plugin handles its own individual feature. Plugins may work and be distributed as part of a bundle via presets.","source":"@site/docs/advanced/plugins.mdx","sourceDirName":"advanced","slug":"/advanced/plugins","permalink":"/docs/advanced/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Architecture","permalink":"/docs/advanced/architecture"},"next":{"title":"Routing","permalink":"/docs/advanced/routing"}},{"id":"advanced/routing","title":"Routing","description":"Docusaurus\' routing system follows single-page application conventions: one route, one component.","source":"@site/docs/advanced/routing.mdx","sourceDirName":"advanced","slug":"/advanced/routing","permalink":"/docs/advanced/routing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/routing.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Docusaurus\' routing system follows single-page application conventions: one route, one component."},"sidebar":"docs","previous":{"title":"Plugins","permalink":"/docs/advanced/plugins"},"next":{"title":"Static site generation","permalink":"/docs/advanced/ssg"}},{"id":"advanced/ssg","title":"Static site generation (SSG)","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.","source":"@site/docs/advanced/ssg.mdx","sourceDirName":"advanced","slug":"/advanced/ssg","permalink":"/docs/advanced/ssg","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"sidebar_label":"Static site generation","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},"sidebar":"docs","previous":{"title":"Routing","permalink":"/docs/advanced/routing"},"next":{"title":"Client architecture","permalink":"/docs/advanced/client"}},{"id":"api/docusaurus.config.js","title":"docusaurus.config.js","description":"API reference for Docusaurus configuration file.","source":"@site/docs/api/docusaurus.config.js.mdx","sourceDirName":"api","slug":"/api/docusaurus-config","permalink":"/docs/api/docusaurus-config","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/docusaurus.config.js.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"description":"API reference for Docusaurus configuration file.","slug":"/api/docusaurus-config"},"sidebar":"api","previous":{"title":"Client API","permalink":"/docs/docusaurus-core"},"next":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"}},{"id":"api/misc/create-docusaurus","title":"\ud83d\udce6 create-docusaurus","description":"A scaffolding utility to help you instantly set up a functional Docusaurus app.","source":"@site/docs/api/misc/create-docusaurus.mdx","sourceDirName":"api/misc","slug":"/api/misc/create-docusaurus","permalink":"/docs/api/misc/create-docusaurus","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"slug":"/api/misc/create-docusaurus"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"},"next":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"}},{"id":"api/misc/eslint-plugin/no-html-links","title":"no-html-links","description":"Ensure that the Docusaurus ` component is used instead of ` tags.","source":"@site/docs/api/misc/eslint-plugin/no-html-links.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-html-links.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links"},"sidebar":"api","previous":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"},"next":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"}},{"id":"api/misc/eslint-plugin/no-untranslated-text","title":"no-untranslated-text","description":"Enforce text labels in JSX to be wrapped by translate calls.","source":"@site/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"sidebar":"api","previous":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"},"next":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"}},{"id":"api/misc/eslint-plugin/prefer-docusaurus-heading","title":"prefer-docusaurus-heading","description":"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.","source":"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"sidebar":"api","previous":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"next":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/misc/eslint-plugin/README","title":"\ud83d\udce6 eslint-plugin","description":"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.","source":"@site/docs/api/misc/eslint-plugin/README.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/misc/@docusaurus/eslint-plugin"},"sidebar":"api","previous":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"},"next":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},{"id":"api/misc/eslint-plugin/string-literal-i18n-messages","title":"string-literal-i18n-messages","description":"Enforce translate APIs to be called on plain text labels.","source":"@site/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"},"sidebar":"api","previous":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"next":{"title":"\ud83d\udce6 logger","permalink":"/docs/api/misc/@docusaurus/logger"}},{"id":"api/misc/logger/logger","title":"\ud83d\udce6 logger","description":"An encapsulated logger for semantically formatting console messages.","source":"@site/docs/api/misc/logger/logger.mdx","sourceDirName":"api/misc/logger","slug":"/api/misc/@docusaurus/logger","permalink":"/docs/api/misc/@docusaurus/logger","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/misc/@docusaurus/logger"},"sidebar":"api","previous":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/plugin-methods/extend-infrastructure","title":"Extending infrastructure","description":"Docusaurus has some infrastructure like hot reloading, CLI, and swizzling, that can be extended by external plugins.","source":"@site/docs/api/plugin-methods/extend-infrastructure.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/extend-infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/extend-infrastructure.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"api","previous":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"},"next":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"}},{"id":"api/plugin-methods/i18n-lifecycles","title":"I18n lifecycles","description":"Plugins use these lifecycles to load i18n-related data.","source":"@site/docs/api/plugin-methods/i18n-lifecycles.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/i18n-lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"api","previous":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"},"next":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"}},{"id":"api/plugin-methods/lifecycle-apis","title":"Lifecycle APIs","description":"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.","source":"@site/docs/api/plugin-methods/lifecycle-apis.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/lifecycle-apis","permalink":"/docs/api/plugin-methods/lifecycle-apis","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"},"next":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"}},{"id":"api/plugin-methods/README","title":"Plugin Method References","description":"This section is a work in progress. Anchor links or even URLs are not guaranteed to be stable.","source":"@site/docs/api/plugin-methods/README.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/","permalink":"/docs/api/plugin-methods/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"api","previous":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"},"next":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"}},{"id":"api/plugin-methods/static-methods","title":"Static methods","description":"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.","source":"@site/docs/api/plugin-methods/static-methods.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/static-methods","permalink":"/docs/api/plugin-methods/static-methods","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4},"sidebar":"api","previous":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"},"next":{"title":"Plugins overview","permalink":"/docs/api/plugins"}},{"id":"api/plugins/plugin-client-redirects","title":"\ud83d\udce6 plugin-client-redirects","description":"Docusaurus Plugin to generate client-side redirects.","source":"@site/docs/api/plugins/plugin-client-redirects.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/plugins/@docusaurus/plugin-client-redirects"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"},"next":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"}},{"id":"api/plugins/plugin-content-blog","title":"\ud83d\udce6 plugin-content-blog","description":"Provides the Blog feature and is the default blog plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-blog.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/plugins/@docusaurus/plugin-content-blog"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"},"next":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"}},{"id":"api/plugins/plugin-content-docs","title":"\ud83d\udce6 plugin-content-docs","description":"Provides the Docs functionality and is the default docs plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-docs.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/plugins/@docusaurus/plugin-content-docs"},"sidebar":"api","previous":{"title":"Plugins overview","permalink":"/docs/api/plugins"},"next":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"}},{"id":"api/plugins/plugin-content-pages","title":"\ud83d\udce6 plugin-content-pages","description":"The default pages plugin for Docusaurus. The classic template ships with this plugin with default configurations. This plugin provides creating pages functionality.","source":"@site/docs/api/plugins/plugin-content-pages.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/plugins/@docusaurus/plugin-content-pages"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"},"next":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"}},{"id":"api/plugins/plugin-debug","title":"\ud83d\udce6 plugin-debug","description":"The debug plugin will display useful debug information at http3000/docusaurus/debug.","source":"@site/docs/api/plugins/plugin-debug.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/plugins/@docusaurus/plugin-debug"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"},"next":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},{"id":"api/plugins/plugin-google-analytics","title":"\ud83d\udce6 plugin-google-analytics","description":"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.","source":"@site/docs/api/plugins/plugin-google-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":6,"frontMatter":{"sidebar_position":6,"slug":"/api/plugins/@docusaurus/plugin-google-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"},"next":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},{"id":"api/plugins/plugin-google-gtag","title":"\ud83d\udce6 plugin-google-gtag","description":"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.","source":"@site/docs/api/plugins/plugin-google-gtag.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":7,"frontMatter":{"sidebar_position":7,"slug":"/api/plugins/@docusaurus/plugin-google-gtag"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"},"next":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},{"id":"api/plugins/plugin-google-tag-manager","title":"\ud83d\udce6 plugin-google-tag-manager","description":"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.","source":"@site/docs/api/plugins/plugin-google-tag-manager.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-google-tag-manager"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"},"next":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},{"id":"api/plugins/plugin-ideal-image","title":"\ud83d\udce6 plugin-ideal-image","description":"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).","source":"@site/docs/api/plugins/plugin-ideal-image.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-ideal-image"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},"next":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"}},{"id":"api/plugins/plugin-pwa","title":"\ud83d\udce6 plugin-pwa","description":"Docusaurus Plugin to add PWA support using Workbox. This plugin generates a Service Worker in production build only, and allows you to create fully PWA-compliant documentation site with offline and installation support.","source":"@site/docs/api/plugins/plugin-pwa.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-pwa.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":9,"frontMatter":{"sidebar_position":9,"slug":"/api/plugins/@docusaurus/plugin-pwa"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"},"next":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"}},{"id":"api/plugins/plugin-sitemap","title":"\ud83d\udce6 plugin-sitemap","description":"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.","source":"@site/docs/api/plugins/plugin-sitemap.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":10,"frontMatter":{"sidebar_position":10,"slug":"/api/plugins/@docusaurus/plugin-sitemap"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"},"next":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},{"id":"api/plugins/plugin-vercel-analytics","title":"\ud83d\udce6 plugin-vercel-analytics","description":"Vercel Analytics provides comprehensive insights into your website\'s visitors, tracking top pages, referrers, and demographics like location, operating systems, and browser info.","source":"@site/docs/api/plugins/plugin-vercel-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-vercel-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":11,"frontMatter":{"sidebar_position":11,"slug":"/api/plugins/@docusaurus/plugin-vercel-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"},"next":{"title":"Themes overview","permalink":"/docs/api/themes"}},{"id":"api/plugins/plugins-overview","title":"Docusaurus plugins","description":"We provide official Docusaurus plugins.","source":"@site/docs/api/plugins/overview.mdx","sourceDirName":"api/plugins","slug":"/api/plugins","permalink":"/docs/api/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"plugins-overview","sidebar_label":"Plugins overview","slug":"/api/plugins"},"sidebar":"api","previous":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"},"next":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"}},{"id":"api/themes/theme-classic","title":"\ud83d\udce6 theme-classic","description":"The classic theme for Docusaurus.","source":"@site/docs/api/themes/theme-classic.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/themes/@docusaurus/theme-classic"},"sidebar":"api","previous":{"title":"Configuration","permalink":"/docs/api/themes/configuration"},"next":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"}},{"id":"api/themes/theme-configuration","title":"Theme configuration","description":"This configuration applies to all main themes.","source":"@site/docs/api/themes/theme-configuration.mdx","sourceDirName":"api/themes","slug":"/api/themes/configuration","permalink":"/docs/api/themes/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"sidebar_label":"Configuration","slug":"/api/themes/configuration","toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Themes overview","permalink":"/docs/api/themes"},"next":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"}},{"id":"api/themes/theme-live-codeblock","title":"\ud83d\udce6 theme-live-codeblock","description":"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.","source":"@site/docs/api/themes/theme-live-codeblock.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/themes/@docusaurus/theme-live-codeblock"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"},"next":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"}},{"id":"api/themes/theme-mermaid","title":"\ud83d\udce6 theme-mermaid","description":"This theme provides a @theme/Mermaid component that is powered by mermaid. You can read more on diagrams documentation.","source":"@site/docs/api/themes/theme-mermaid.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-mermaid.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/themes/@docusaurus/theme-mermaid"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"},"next":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"}},{"id":"api/themes/theme-search-algolia","title":"\ud83d\udce6 theme-search-algolia","description":"This theme provides a @theme/SearchBar component that integrates with Algolia DocSearch easily. Combined with @docusaurus/theme-classic, it provides a very easy search integration. You can read more on search documentation.","source":"@site/docs/api/themes/theme-search-algolia.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-search-algolia.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/themes/@docusaurus/theme-search-algolia"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"},"next":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"}},{"id":"api/themes/themes-overview","title":"Docusaurus themes","description":"We provide official Docusaurus themes.","source":"@site/docs/api/themes/overview.mdx","sourceDirName":"api/themes","slug":"/api/themes","permalink":"/docs/api/themes","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"themes-overview","sidebar_label":"Themes overview","slug":"/api/themes"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},"next":{"title":"Configuration","permalink":"/docs/api/themes/configuration"}},{"id":"blog","title":"Blog","description":"Deploy a full-featured blog in no time with Docusaurus.","source":"@site/docs/blog.mdx","sourceDirName":".","slug":"/blog","permalink":"/docs/blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/blog.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Deploy a full-featured blog in no time with Docusaurus."},"sidebar":"docs","previous":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"},"next":{"title":"Markdown Features","permalink":"/docs/markdown-features"}},{"id":"browser-support","title":"Browser support","description":"How to keep a reasonable bundle size while ensuring sufficient browser support.","source":"@site/docs/browser-support.mdx","sourceDirName":".","slug":"/browser-support","permalink":"/docs/browser-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"How to keep a reasonable bundle size while ensuring sufficient browser support."},"sidebar":"docs","previous":{"title":"Search","permalink":"/docs/search"},"next":{"title":"SEO","permalink":"/docs/seo"}},{"id":"cli","title":"CLI","description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website.","source":"@site/docs/cli.mdx","sourceDirName":".","slug":"/cli","permalink":"/docs/cli","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/cli.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website."},"sidebar":"api","next":{"title":"Client API","permalink":"/docs/docusaurus-core"}},{"id":"configuration","title":"Configuration","description":"Configuring your site\'s behavior through docusaurus.config.js and more.","source":"@site/docs/configuration.mdx","sourceDirName":".","slug":"/configuration","permalink":"/docs/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Configuring your site\'s behavior through docusaurus.config.js and more."},"sidebar":"docs","previous":{"title":"Installation","permalink":"/docs/installation"},"next":{"title":"Playground","permalink":"/docs/playground"}},{"id":"deployment","title":"Deployment","description":"Deploy your Docusaurus app for production on a range of static site hosting services.","source":"@site/docs/deployment.mdx","sourceDirName":".","slug":"/deployment","permalink":"/docs/deployment","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Deploy your Docusaurus app for production on a range of static site hosting services."},"sidebar":"docs","previous":{"title":"Using Plugins","permalink":"/docs/using-plugins"},"next":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"}},{"id":"docusaurus-core","title":"Docusaurus Client API","description":"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.","source":"@site/docs/docusaurus-core.mdx","sourceDirName":".","slug":"/docusaurus-core","permalink":"/docs/docusaurus-core","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"sidebar_label":"Client API"},"sidebar":"api","previous":{"title":"CLI","permalink":"/docs/cli"},"next":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"}},{"id":"guides/creating-pages","title":"Creating Pages","description":"In this section, we will learn about creating pages in Docusaurus.","source":"@site/docs/guides/creating-pages.mdx","sourceDirName":"guides","slug":"/creating-pages","permalink":"/docs/creating-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/creating-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/creating-pages","sidebar_label":"Pages"},"sidebar":"docs","previous":{"title":"Guides","permalink":"/docs/category/guides"},"next":{"title":"Introduction","permalink":"/docs/docs-introduction"}},{"id":"guides/docs/create-doc","title":"Create a doc","description":"Create a Markdown Document","source":"@site/docs/guides/docs/docs-create-doc.mdx","sourceDirName":"guides/docs","slug":"/create-doc","permalink":"/docs/create-doc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"create-doc","description":"Create a Markdown Document","slug":"/create-doc"},"sidebar":"docs","previous":{"title":"Introduction","permalink":"/docs/docs-introduction"},"next":{"title":"Sidebar","permalink":"/docs/sidebar"}},{"id":"guides/docs/introduction","title":"Docs Introduction","description":"The docs feature provides users with a way to organize Markdown files in a hierarchical format.","source":"@site/docs/guides/docs/docs-introduction.mdx","sourceDirName":"guides/docs","slug":"/docs-introduction","permalink":"/docs/docs-introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"introduction","sidebar_label":"Introduction","slug":"/docs-introduction"},"sidebar":"docs","previous":{"title":"Pages","permalink":"/docs/creating-pages"},"next":{"title":"Create a doc","permalink":"/docs/create-doc"}},{"id":"guides/docs/multi-instance","title":"Docs Multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","source":"@site/docs/guides/docs/docs-multi-instance.mdx","sourceDirName":"guides/docs","slug":"/docs-multi-instance","permalink":"/docs/docs-multi-instance","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","slug":"/docs-multi-instance"},"sidebar":"docs","previous":{"title":"Versioning","permalink":"/docs/versioning"},"next":{"title":"Blog","permalink":"/docs/blog"}},{"id":"guides/docs/sidebar/autogenerated","title":"Autogenerated","description":"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.","source":"@site/docs/guides/docs/sidebar/autogenerated.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/autogenerated","permalink":"/docs/sidebar/autogenerated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/sidebar/autogenerated"},"sidebar":"docs","previous":{"title":"Sidebar items","permalink":"/docs/sidebar/items"},"next":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"}},{"id":"guides/docs/sidebar/index","title":"Sidebar","description":"Creating a sidebar is useful to:","source":"@site/docs/guides/docs/sidebar/index.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar","permalink":"/docs/sidebar","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/sidebar"},"sidebar":"docs","previous":{"title":"Create a doc","permalink":"/docs/create-doc"},"next":{"title":"Sidebar items","permalink":"/docs/sidebar/items"}},{"id":"guides/docs/sidebar/items","title":"Sidebar items","description":"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.","source":"@site/docs/guides/docs/sidebar/items.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/items","permalink":"/docs/sidebar/items","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_max_heading_level":4,"slug":"/sidebar/items"},"sidebar":"docs","previous":{"title":"Sidebar","permalink":"/docs/sidebar"},"next":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"}},{"id":"guides/docs/sidebar/multiple-sidebars","title":"Using multiple sidebars","description":"You can create a sidebar for each set of Markdown files that you want to group together.","source":"@site/docs/guides/docs/sidebar/multiple-sidebars.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/multiple-sidebars","permalink":"/docs/sidebar/multiple-sidebars","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/multiple-sidebars.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/sidebar/multiple-sidebars"},"sidebar":"docs","previous":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"},"next":{"title":"Versioning","permalink":"/docs/versioning"}},{"id":"guides/docs/versioning","title":"Versioning","description":"You can use the versioning CLI to create a new documentation version based on the latest content in the docs directory. That specific set of documentation will then be preserved and accessible even as the documentation in the docs directory continues to evolve.","source":"@site/docs/guides/docs/versioning.mdx","sourceDirName":"guides/docs","slug":"/versioning","permalink":"/docs/versioning","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/versioning.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/versioning"},"sidebar":"docs","previous":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"},"next":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"}},{"id":"guides/markdown-features/admonitions","title":"Admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-admonitions.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/admonitions","permalink":"/docs/markdown-features/admonitions","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-admonitions.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","slug":"/markdown-features/admonitions"},"sidebar":"docs","previous":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"},"next":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"}},{"id":"guides/markdown-features/assets","title":"Assets","description":"Handling assets in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-assets.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/assets","permalink":"/docs/markdown-features/assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"assets","description":"Handling assets in Docusaurus Markdown","slug":"/markdown-features/assets"},"sidebar":"docs","previous":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"},"next":{"title":"Markdown links","permalink":"/docs/markdown-features/links"}},{"id":"guides/markdown-features/code-blocks","title":"Code blocks","description":"Handling code blocks in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/code-blocks","permalink":"/docs/markdown-features/code-blocks","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"code-blocks","description":"Handling code blocks in Docusaurus Markdown","slug":"/markdown-features/code-blocks"},"sidebar":"docs","previous":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"},"next":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"}},{"id":"guides/markdown-features/diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","source":"@site/docs/guides/markdown-features/markdown-features-diagrams.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/diagrams","permalink":"/docs/markdown-features/diagrams","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-diagrams.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","slug":"/markdown-features/diagrams"},"sidebar":"docs","previous":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"},"next":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"}},{"id":"guides/markdown-features/head-metadata","title":"Head metadata","description":"Declaring page-specific head metadata through MDX","source":"@site/docs/guides/markdown-features/markdown-features-head-metadata.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/head-metadata","permalink":"/docs/markdown-features/head-metadata","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-head-metadata.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"head-metadata","description":"Declaring page-specific head metadata through MDX","slug":"/markdown-features/head-metadata"},"sidebar":"docs","previous":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"},"next":{"title":"Styling and Layout","permalink":"/docs/styling-layout"}},{"id":"guides/markdown-features/introduction","title":"Markdown Features","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","source":"@site/docs/guides/markdown-features/markdown-features-intro.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features","permalink":"/docs/markdown-features","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"introduction","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","slug":"/markdown-features"},"sidebar":"docs","previous":{"title":"Blog","permalink":"/docs/blog"},"next":{"title":"MDX and React","permalink":"/docs/markdown-features/react"}},{"id":"guides/markdown-features/links","title":"Markdown links","description":"Links to other pages in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-links.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/links","permalink":"/docs/markdown-features/links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-links.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"links","description":"Links to other pages in Markdown","slug":"/markdown-features/links"},"sidebar":"docs","previous":{"title":"Assets","permalink":"/docs/markdown-features/assets"},"next":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"}},{"id":"guides/markdown-features/math-equations","title":"Math Equations","description":"Writing LaTeX Math Equations","source":"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/math-equations","permalink":"/docs/markdown-features/math-equations","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"math-equations","description":"Writing LaTeX Math Equations","slug":"/markdown-features/math-equations"},"sidebar":"docs","previous":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"},"next":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"}},{"id":"guides/markdown-features/plugins","title":"MDX Plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","source":"@site/docs/guides/markdown-features/markdown-features-plugins.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/plugins","permalink":"/docs/markdown-features/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","slug":"/markdown-features/plugins"},"sidebar":"docs","previous":{"title":"Markdown links","permalink":"/docs/markdown-features/links"},"next":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"}},{"id":"guides/markdown-features/react","title":"MDX and React","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","source":"@site/docs/guides/markdown-features/markdown-features-react.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/react","permalink":"/docs/markdown-features/react","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"react","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","slug":"/markdown-features/react"},"sidebar":"docs","previous":{"title":"Markdown Features","permalink":"/docs/markdown-features"},"next":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"}},{"id":"guides/markdown-features/tabs","title":"Tabs","description":"Using tabs inside Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-tabs.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/tabs","permalink":"/docs/markdown-features/tabs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"tabs","description":"Using tabs inside Docusaurus Markdown","slug":"/markdown-features/tabs"},"sidebar":"docs","previous":{"title":"MDX and React","permalink":"/docs/markdown-features/react"},"next":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"}},{"id":"guides/markdown-features/toc","title":"Headings and Table of contents","description":"Customizing headings and table-of-contents in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-toc.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/toc","permalink":"/docs/markdown-features/toc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"toc","description":"Customizing headings and table-of-contents in Markdown","slug":"/markdown-features/toc"},"sidebar":"docs","previous":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"},"next":{"title":"Assets","permalink":"/docs/markdown-features/assets"}},{"id":"guides/whats-next","title":"What\'s next?","description":"Congratulations! You have understood most core features of Docusaurus now. You have:","source":"@site/docs/guides/whats-next.mdx","sourceDirName":"guides","slug":"/guides/whats-next","permalink":"/docs/guides/whats-next","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"},"next":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"}},{"id":"i18n/crowdin","title":"i18n - Using Crowdin","description":"The i18n system of Docusaurus is decoupled from any translation software.","source":"@site/docs/i18n/i18n-crowdin.mdx","sourceDirName":"i18n","slug":"/i18n/crowdin","permalink":"/docs/i18n/crowdin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"crowdin","slug":"/i18n/crowdin","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Using Git","permalink":"/docs/i18n/git"},"next":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"}},{"id":"i18n/git","title":"i18n - Using git","description":"A possible translation strategy is to version control the translation files with Git (or any other VCS).","source":"@site/docs/i18n/i18n-git.mdx","sourceDirName":"i18n","slug":"/i18n/git","permalink":"/docs/i18n/git","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-git.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"git","slug":"/i18n/git"},"sidebar":"docs","previous":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"},"next":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"}},{"id":"i18n/introduction","title":"i18n - Introduction","description":"It is easy to translate a Docusaurus website with its internationalization (i18n) support.","source":"@site/docs/i18n/i18n-introduction.mdx","sourceDirName":"i18n","slug":"/i18n/introduction","permalink":"/docs/i18n/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"introduction","slug":"/i18n/introduction"},"sidebar":"docs","previous":{"title":"Deployment","permalink":"/docs/deployment"},"next":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"}},{"id":"i18n/tutorial","title":"i18n - Tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","source":"@site/docs/i18n/i18n-tutorial.mdx","sourceDirName":"i18n","slug":"/i18n/tutorial","permalink":"/docs/i18n/tutorial","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-tutorial.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"id":"tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","slug":"/i18n/tutorial"},"sidebar":"docs","previous":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"},"next":{"title":"Using Git","permalink":"/docs/i18n/git"}},{"id":"installation","title":"Installation","description":"How to install Docusaurus locally, and start a Docusaurus site in no time.","source":"@site/docs/installation.mdx","sourceDirName":".","slug":"/installation","permalink":"/docs/installation","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/installation.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"How to install Docusaurus locally, and start a Docusaurus site in no time."},"sidebar":"docs","previous":{"title":"Getting Started","permalink":"/docs/category/getting-started"},"next":{"title":"Configuration","permalink":"/docs/configuration"}},{"id":"introduction","title":"Introduction","description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","source":"@site/docs/introduction.mdx","sourceDirName":".","slug":"/","permalink":"/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","slug":"/"},"sidebar":"docs","next":{"title":"Getting Started","permalink":"/docs/category/getting-started"}},{"id":"migration/index","title":"Upgrading Docusaurus","description":"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.","source":"@site/docs/migration/index.mdx","sourceDirName":"migration","slug":"/migration","permalink":"/docs/migration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration"},"sidebar":"docs","previous":{"title":"Client architecture","permalink":"/docs/advanced/client"},"next":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"}},{"id":"migration/v2/migration-automated","title":"Automated migration","description":"The migration CLI automatically migrates your v1 website to a v2 website.","source":"@site/docs/migration/v2/migration-automated.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/automated","permalink":"/docs/migration/v2/automated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v2/automated"},"sidebar":"docs","previous":{"title":"Overview","permalink":"/docs/migration/v2"},"next":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"}},{"id":"migration/v2/migration-manual","title":"Manual migration","description":"This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.","source":"@site/docs/migration/v2/migration-manual.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/manual","permalink":"/docs/migration/v2/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-manual.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v2/manual","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"},"next":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-overview","title":"Overview","description":"This doc guides you through migrating an existing Docusaurus 1 site to Docusaurus 2.","source":"@site/docs/migration/v2/migration-overview.mdx","sourceDirName":"migration/v2","slug":"/migration/v2","permalink":"/docs/migration/v2","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v2"},"sidebar":"docs","previous":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"},"next":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"}},{"id":"migration/v2/migration-translated-sites","title":"Translated sites","description":"This page explains how migrate a translated Docusaurus v1 site to Docusaurus v2.","source":"@site/docs/migration/v2/migration-translated-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/translated-sites","permalink":"/docs/migration/v2/translated-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-translated-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v2/translated-sites"},"sidebar":"docs","previous":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-versioned-sites","title":"Versioned sites","description":"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1\'s approach.","source":"@site/docs/migration/v2/migration-versioned-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/versioned-sites","permalink":"/docs/migration/v2/versioned-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v2/versioned-sites"},"sidebar":"docs","previous":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"},"next":{"title":"Translated sites","permalink":"/docs/migration/v2/translated-sites"}},{"id":"migration/v3","title":"Upgrading to Docusaurus v3","description":"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.","source":"@site/docs/migration/v3.mdx","sourceDirName":"migration","slug":"/migration/v3","permalink":"/docs/migration/v3","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/migration/v3","sidebar_label":"To Docusaurus v3"},"sidebar":"docs","previous":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"},"next":{"title":"Overview","permalink":"/docs/migration/v2"}},{"id":"playground","title":"Playground","description":"Playgrounds allow you to run Docusaurus in your browser, without installing anything!","source":"@site/docs/playground.mdx","sourceDirName":".","slug":"/playground","permalink":"/docs/playground","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/configuration"},"next":{"title":"TypeScript Support","permalink":"/docs/typescript-support"}},{"id":"search","title":"Search","description":"There are a few options you can use to add search to your website:","source":"@site/docs/search.mdx","sourceDirName":".","slug":"/search","permalink":"/docs/search","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"keywords":["algolia","search"]},"sidebar":"docs","previous":{"title":"Static Assets","permalink":"/docs/static-assets"},"next":{"title":"Browser support","permalink":"/docs/browser-support"}},{"id":"seo","title":"Search engine optimization (SEO)","description":"How to make your Docusaurus site maximally search-engine-friendly.","source":"@site/docs/seo.mdx","sourceDirName":".","slug":"/seo","permalink":"/docs/seo","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/seo.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"How to make your Docusaurus site maximally search-engine-friendly.","sidebar_label":"SEO","keywords":["seo","positioning"]},"sidebar":"docs","previous":{"title":"Browser support","permalink":"/docs/browser-support"},"next":{"title":"Using Plugins","permalink":"/docs/using-plugins"}},{"id":"static-assets","title":"Static Assets","description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are.","source":"@site/docs/static-assets.mdx","sourceDirName":".","slug":"/static-assets","permalink":"/docs/static-assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/static-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are."},"sidebar":"docs","previous":{"title":"Swizzling","permalink":"/docs/swizzling"},"next":{"title":"Search","permalink":"/docs/search"}},{"id":"styling-layout","title":"Styling and Layout","description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.","source":"@site/docs/styling-layout.mdx","sourceDirName":".","slug":"/styling-layout","permalink":"/docs/styling-layout","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},"sidebar":"docs","previous":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"},"next":{"title":"Swizzling","permalink":"/docs/swizzling"}},{"id":"swizzling","title":"Swizzling","description":"Customize your site\'s appearance through creating your own theme components","source":"@site/docs/swizzling.mdx","sourceDirName":".","slug":"/swizzling","permalink":"/docs/swizzling","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/swizzling.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Customize your site\'s appearance through creating your own theme components"},"sidebar":"docs","previous":{"title":"Styling and Layout","permalink":"/docs/styling-layout"},"next":{"title":"Static Assets","permalink":"/docs/static-assets"}},{"id":"typescript-support","title":"TypeScript Support","description":"Docusaurus is written in TypeScript and provides first-class TypeScript support.","source":"@site/docs/typescript-support.mdx","sourceDirName":".","slug":"/typescript-support","permalink":"/docs/typescript-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/typescript-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"description":"Docusaurus is written in TypeScript and provides first-class TypeScript support."},"sidebar":"docs","previous":{"title":"Playground","permalink":"/docs/playground"},"next":{"title":"Guides","permalink":"/docs/category/guides"}},{"id":"using-plugins","title":"Using Plugins","description":"The Docusaurus core doesn\'t provide any feature of its own. All features are delegated to individual plugins: the docs feature provided by the docs plugin; the blog feature provided by the blog plugin; or individual pages provided by the pages plugin. If there are no plugins installed, the site won\'t contain any routes.","source":"@site/docs/using-plugins.mdx","sourceDirName":".","slug":"/using-plugins","permalink":"/docs/using-plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/using-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"docs","previous":{"title":"SEO","permalink":"/docs/seo"},"next":{"title":"Deployment","permalink":"/docs/deployment"}}],"drafts":[],"sidebars":{"docs":[{"type":"doc","id":"introduction"},{"type":"category","label":"Getting Started","link":{"type":"generated-index","slug":"/category/getting-started","permalink":"/docs/category/getting-started"},"collapsed":false,"items":[{"type":"doc","id":"installation"},{"type":"doc","id":"configuration"},{"type":"doc","id":"playground"},{"type":"doc","id":"typescript-support"}],"collapsible":true},{"type":"category","label":"Guides","link":{"type":"generated-index","title":"Docusaurus Guides","description":"Let\'s learn about the most important Docusaurus concepts!","keywords":["guides"],"image":"/img/docusaurus.png","slug":"/category/guides","permalink":"/docs/category/guides"},"items":[{"type":"doc","id":"guides/creating-pages"},{"type":"category","label":"Docs","link":{"type":"doc","id":"guides/docs/introduction"},"items":[{"type":"doc","id":"guides/docs/create-doc"},{"type":"category","label":"Sidebar","link":{"type":"doc","id":"guides/docs/sidebar/index"},"items":[{"type":"doc","id":"guides/docs/sidebar/items"},{"type":"doc","id":"guides/docs/sidebar/autogenerated"},{"type":"doc","id":"guides/docs/sidebar/multiple-sidebars"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/docs/versioning"},{"type":"doc","id":"guides/docs/multi-instance"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"blog"},{"type":"category","label":"Markdown Features","link":{"type":"doc","id":"guides/markdown-features/introduction"},"items":[{"type":"doc","id":"guides/markdown-features/react"},{"type":"doc","id":"guides/markdown-features/tabs"},{"type":"doc","id":"guides/markdown-features/code-blocks"},{"type":"doc","id":"guides/markdown-features/admonitions"},{"type":"doc","id":"guides/markdown-features/toc"},{"type":"doc","id":"guides/markdown-features/assets"},{"type":"doc","id":"guides/markdown-features/links"},{"type":"doc","id":"guides/markdown-features/plugins"},{"type":"doc","id":"guides/markdown-features/math-equations"},{"type":"doc","id":"guides/markdown-features/diagrams"},{"type":"doc","id":"guides/markdown-features/head-metadata"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"styling-layout"},{"type":"doc","id":"swizzling"},{"type":"doc","id":"static-assets"},{"type":"doc","id":"search"},{"type":"doc","id":"browser-support"},{"type":"doc","id":"seo"},{"type":"doc","id":"using-plugins"},{"type":"doc","id":"deployment"},{"type":"category","label":"Internationalization","link":{"type":"doc","id":"i18n/introduction"},"items":[{"type":"doc","id":"i18n/tutorial","label":"Tutorial","translatable":true},{"type":"doc","id":"i18n/git","label":"Using Git","translatable":true},{"type":"doc","id":"i18n/crowdin","label":"Using Crowdin","translatable":true}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/whats-next"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced Guides","link":{"type":"doc","id":"advanced/index"},"items":[{"type":"doc","id":"advanced/architecture"},{"type":"doc","id":"advanced/plugins"},{"type":"doc","id":"advanced/routing"},{"type":"doc","id":"advanced/ssg"},{"type":"doc","id":"advanced/client"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Upgrading","link":{"type":"doc","id":"migration/index"},"items":[{"type":"doc","id":"migration/v3"},{"type":"category","label":"To Docusaurus v2","items":[{"type":"doc","id":"migration/v2/migration-overview"},{"type":"doc","id":"migration/v2/migration-automated"},{"type":"doc","id":"migration/v2/migration-manual"},{"type":"doc","id":"migration/v2/migration-versioned-sites"},{"type":"doc","id":"migration/v2/migration-translated-sites"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"api":[{"type":"doc","id":"cli"},{"type":"doc","id":"docusaurus-core"},{"type":"doc","id":"api/docusaurus.config.js"},{"type":"category","label":"Plugin method references","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugin-methods/lifecycle-apis"},{"type":"doc","id":"api/plugin-methods/extend-infrastructure"},{"type":"doc","id":"api/plugin-methods/i18n-lifecycles"},{"type":"doc","id":"api/plugin-methods/static-methods"}],"link":{"type":"doc","id":"api/plugin-methods/README"}},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugins/plugin-content-docs"},{"type":"doc","id":"api/plugins/plugin-content-blog"},{"type":"doc","id":"api/plugins/plugin-content-pages"},{"type":"doc","id":"api/plugins/plugin-client-redirects"},{"type":"doc","id":"api/plugins/plugin-debug"},{"type":"doc","id":"api/plugins/plugin-google-analytics"},{"type":"doc","id":"api/plugins/plugin-google-gtag"},{"type":"doc","id":"api/plugins/plugin-google-tag-manager"},{"type":"doc","id":"api/plugins/plugin-ideal-image"},{"type":"doc","id":"api/plugins/plugin-pwa"},{"type":"doc","id":"api/plugins/plugin-sitemap"},{"type":"doc","id":"api/plugins/plugin-vercel-analytics"}],"link":{"type":"doc","id":"api/plugins/plugins-overview"}},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/themes/theme-configuration","label":"Configuration"},{"type":"doc","id":"api/themes/theme-classic"},{"type":"doc","id":"api/themes/theme-live-codeblock"},{"type":"doc","id":"api/themes/theme-search-algolia"},{"type":"doc","id":"api/themes/theme-mermaid"}],"link":{"type":"doc","id":"api/themes/themes-overview"}},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/create-docusaurus"},{"type":"category","label":"\ud83d\udce6 eslint-plugin","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/eslint-plugin/no-html-links"},{"type":"doc","id":"api/misc/eslint-plugin/no-untranslated-text"},{"type":"doc","id":"api/misc/eslint-plugin/prefer-docusaurus-heading"},{"type":"doc","id":"api/misc/eslint-plugin/string-literal-i18n-messages"}],"link":{"type":"doc","id":"api/misc/eslint-plugin/README"}},{"type":"doc","label":"\ud83d\udce6 logger","id":"api/misc/logger/logger"}]}]}}]},"community":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/community","tagsPath":"/community/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/sidebarsCommunity.js","contentPath":"/home/runner/work/docusaurus/docusaurus/website/community","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-community/current","docs":[{"id":"canary","title":"Canary releases","description":"Docusaurus has a canary releases system.","source":"@site/community/4-canary.mdx","sourceDirName":".","slug":"/canary","permalink":"/community/canary","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":4,"frontMatter":{},"sidebar":"community","previous":{"title":"Contributing","permalink":"/community/contributing"},"next":{"title":"Release process","permalink":"/community/release-process"}},{"id":"contributing","title":"Contributing","description":"","source":"@site/community/3-contributing.mdx","sourceDirName":".","slug":"/contributing","permalink":"/community/contributing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":3,"frontMatter":{"title":"Contributing","hide_title":true,"sidebar_label":"Contributing"},"sidebar":"community","previous":{"title":"Awesome Resources","permalink":"/community/resources"},"next":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"release-process","title":"Release process","description":"Let\'s see how Docusaurus handles versioning, releases and breaking changes.","source":"@site/community/5-release-process.mdx","sourceDirName":".","slug":"/release-process","permalink":"/community/release-process","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":5,"frontMatter":{},"sidebar":"community","previous":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"resources","title":"Awesome Resources","description":"A curated list of interesting Docusaurus community projects.","source":"@site/community/2-resources.mdx","sourceDirName":".","slug":"/resources","permalink":"/community/resources","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":2,"frontMatter":{},"sidebar":"community","previous":{"title":"Team","permalink":"/community/team"},"next":{"title":"Contributing","permalink":"/community/contributing"}},{"id":"support","title":"Support","description":"Docusaurus has a community of thousands of developers.","source":"@site/community/0-support.mdx","sourceDirName":".","slug":"/support","permalink":"/community/support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":0,"frontMatter":{},"sidebar":"community","next":{"title":"Team","permalink":"/community/team"}},{"id":"team","title":"Team","description":"Active Team","source":"@site/community/1-team.mdx","sourceDirName":".","slug":"/team","permalink":"/community/team","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx","tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"sidebarPosition":1,"frontMatter":{},"sidebar":"community","previous":{"title":"Support","permalink":"/community/support"},"next":{"title":"Awesome Resources","permalink":"/community/resources"}}],"drafts":[],"sidebars":{"community":[{"type":"doc","id":"support"},{"type":"doc","id":"team"},{"type":"doc","id":"resources"},{"type":"doc","id":"contributing","label":"Contributing"},{"type":"doc","id":"canary"},{"type":"doc","id":"release-process"},{"type":"link","href":"/changelog","label":"Changelog"},{"type":"link","href":"/showcase","label":"Showcase"},{"type":"link","href":"/feature-requests","label":"Feature Requests"},{"type":"link","label":"Chat with us on Discord","href":"https://discord.gg/docusaurus"}]}}]},"docs-tests":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":true,"className":"docs-version-current","path":"/tests/docs","tagsPath":"/tests/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/_dogfooding/docs-tests-sidebars.js","contentPath":"/home/runner/work/docusaurus/docusaurus/website/_dogfooding/_docs tests","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-docs-tests/current","docs":[{"id":"beginner\'s guide","title":"Beginner\'s guide","description":"#9160","source":"@site/_dogfooding/_docs tests/beginner\'s guide.mdx","sourceDirName":".","slug":"/beginner\'s guide","permalink":"/tests/docs/beginner\'s guide","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{}},{"id":"doc-with-another-sidebar","title":"Doc with another sidebar","description":"My link appears in a sidebar, but I want to display another sidebar...","source":"@site/_dogfooding/_docs tests/doc-with-another-sidebar.mdx","sourceDirName":".","slug":"/doc-with-another-sidebar","permalink":"/tests/docs/doc-with-another-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"displayed_sidebar":"anotherSidebar"},"sidebar":"anotherSidebar"},{"id":"doc-with-last-update","title":"Doc With Last Update Front Matter","description":"","source":"@site/_dogfooding/_docs tests/doc-with-last-update.mdx","sourceDirName":".","slug":"/doc-with-last-update","permalink":"/tests/docs/doc-with-last-update","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"custom author","lastUpdatedAt":946684800000,"frontMatter":{"last_update":{"author":"custom author","date":"1/1/2000"}},"sidebar":"sidebar","previous":{"title":"Doc with another sidebar","permalink":"/tests/docs/doc-with-another-sidebar"},"next":{"title":"Tests","permalink":"/tests/docs/category/tests"}},{"id":"doc-without-sidebar","title":"Doc without sidebar","description":"My link appears in a sidebar, but I don\'t want to display that...","source":"@site/_dogfooding/_docs tests/doc-without-sidebar.mdx","sourceDirName":".","slug":"/doc-without-sidebar","permalink":"/tests/docs/doc-without-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"displayed_sidebar":null}},{"id":"dummy","title":"Just a dummy page","description":"","source":"@site/_dogfooding/_docs tests/dummy.mdx","sourceDirName":".","slug":"/dummy.html","permalink":"/tests/docs/dummy.html","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"dummy.html"},"sidebar":"anotherSidebar"},{"id":"folder with space/doc 1","title":"Doc 1","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 1.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 1","permalink":"/tests/docs/folder with space/doc 1","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{}},{"id":"folder with space/doc 2","title":"Doc 2","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 2.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 2","permalink":"/tests/docs/folder with space/doc 2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{}},{"id":"index","title":"Docs tests","description":"This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don\'t really cover.","source":"@site/_dogfooding/_docs tests/index.mdx","sourceDirName":".","slug":"/","permalink":"/tests/docs/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"A","permalink":"/tests/docs/tags/a","description":"Description for tag a"},{"inline":false,"label":"Label for tag b","permalink":"/tests/docs/tags/b"},{"inline":false,"label":"C","permalink":"/tests/docs/tags/permalink-for-tag-c"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"/","tags":["a","b","c"],"unlisted":true,"id":"index","sidebar_label":"Docs tests"},"sidebar":"sidebar"},{"id":"more-test","title":"Another test page","description":"Test link","source":"@site/_dogfooding/_docs tests/more-test.mdx","sourceDirName":".","slug":"/more-test","permalink":"/tests/docs/more-test","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"A","permalink":"/tests/docs/tags/a","description":"Description for tag a"},{"inline":false,"label":"Label for tag e","permalink":"/tests/docs/tags/permalink-for-tag-e","description":"Description for tag e"},{"inline":false,"label":"Some-tag","permalink":"/tests/docs/tags/some-tag"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"tags":["a","e","some-tag"]},"sidebar":"sidebar","previous":{"title":"Another category with index","permalink":"/tests/docs/category/another-category-with-index"},"next":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"}},{"id":"standalone","title":"Standalone doc","description":"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar","source":"@site/_dogfooding/_docs tests/standalone.mdx","sourceDirName":".","slug":"/standalone","permalink":"/tests/docs/standalone","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Label for tag b","permalink":"/tests/docs/tags/b"},{"inline":false,"label":"D","permalink":"/tests/docs/tags/d"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"tags":["b","d"]}},{"id":"tests/admonitions","title":"Admonitions tests","description":"Empty content","source":"@site/_dogfooding/_docs tests/tests/admonitions.mdx","sourceDirName":"tests","slug":"/tests/admonitions","permalink":"/tests/docs/tests/admonitions","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Case-Sensitive doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc"},"next":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},{"id":"tests/ascii/\xe6\xf8\xe5/index","title":"index","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/\xe6\xf8\xe5/index.mdx","sourceDirName":"tests/ascii/\xe6\xf8\xe5","slug":"/tests/ascii/\xe6\xf8\xe5/","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"},"next":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"}},{"id":"tests/ascii/folder/\xe6\xf8\xe5","title":"\xe6\xf8\xe5","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx","sourceDirName":"tests/ascii/folder","slug":"/tests/ascii/folder/\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"},"next":{"title":"index","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},{"id":"tests/Case-Sentitive-Doc","title":"Case-Sensitive doc","description":"This doc has uppercase and lowercase chars in its filename, and thus in its path / slug.","source":"@site/_dogfooding/_docs tests/tests/Case-Sentitive-Doc.mdx","sourceDirName":"tests","slug":"/tests/Case-Sentitive-Doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Tests","permalink":"/tests/docs/category/tests"},"next":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"}},{"id":"tests/category-links/custom-index-convention/intro","title":"Introduction","description":"This file is called intro.md. Typically, it won\'t be selected by the convention; however, it is in this case, because we have used a custom one.","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/intro","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},{"id":"tests/category-links/custom-index-convention/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/sample-doc.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/sample-doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Introduction","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro"},"next":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"}},{"id":"tests/category-links/no-index-doc/index","title":"Index","description":"This file (index.md) is supposed to be a category index, but it isn\'t because we have set link: null in the category.json.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/index.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/","permalink":"/tests/docs/tests/category-links/no-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"}},{"id":"tests/category-links/no-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"},"next":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"}},{"id":"tests/category-links/no-subdoc/index","title":"No sub-docs","description":"The only doc of this category is the index page. It should show up as a regular doc link.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx","sourceDirName":"tests/category-links/no-subdoc","slug":"/tests/category-links/no-subdoc/","permalink":"/tests/docs/tests/category-links/no-subdoc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"},"next":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"}},{"id":"tests/category-links/readme","title":"Readme","description":"This readme.md should not be used as the category index due to the category.json link","source":"@site/_dogfooding/_docs tests/tests/category-links/readme.mdx","sourceDirName":"tests/category-links","slug":"/tests/category-links/","permalink":"/tests/docs/tests/category-links/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"}},{"id":"tests/category-links/regular-category/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/regular-category/sample-doc.mdx","sourceDirName":"tests/category-links/regular-category","slug":"/tests/category-links/regular-category/sample-doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"},"next":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"}},{"id":"tests/category-links/with-category-name-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"},"next":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"}},{"id":"tests/category-links/with-category-name-doc/with-category-name-doc","title":"Category with a doc of category\'s name","description":"You should be able to click on the category and browse this /.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/","permalink":"/tests/docs/tests/category-links/with-category-name-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/index","title":"Category with index.md doc","description":"You should be able to click on the category and browse this index.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/index.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/","permalink":"/tests/docs/tests/category-links/with-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"},"next":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"}},{"id":"tests/category-links/with-readme-doc/README","title":"Category with readme.md doc","description":"You should be able to click on the category and browse this readme.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/README.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/","permalink":"/tests/docs/tests/category-links/with-readme-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"}},{"id":"tests/category-links/with-readme-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"},"next":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"}},{"id":"tests/custom-props/doc-with-custom-props","title":"Doc with Custom Props","description":"This doc has custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-with-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-with-custom-props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"sidebar_custom_props":{"prop":"custom","number":1,"boolean":true}},"sidebar":"sidebar","previous":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"},"next":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"}},{"id":"tests/custom-props/doc-without-custom-props","title":"Doc Without Custom Props","description":"This doc doesn\'t have custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-without-custom-props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"},"next":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"}},{"id":"tests/custom-props/index","title":"Custom Props","description":"","source":"@site/_dogfooding/_docs tests/tests/custom-props/index.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/","permalink":"/tests/docs/tests/custom-props/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"},"next":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"}},{"id":"tests/img-tests","title":"Image tests","description":"URL encoded image","source":"@site/_dogfooding/_docs tests/tests/img-tests.mdx","sourceDirName":"tests","slug":"/tests/img-tests","permalink":"/tests/docs/tests/img-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"image":"./img/oss_logo.png"},"sidebar":"sidebar","previous":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"},"next":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"}},{"id":"tests/links/broken-anchors-tests","title":"Broken Anchors tests","description":"Markdown link to above anchor","source":"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx","sourceDirName":"tests/links","slug":"/tests/links/broken-anchors-tests","permalink":"/tests/docs/tests/links/broken-anchors-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"},"next":{"title":"Target doc","permalink":"/tests/docs/tests/links/target-doc-slug"}},{"id":"tests/links/target","title":"Target doc","description":"This is just a doc meant to be linked to by other docs.","source":"@site/_dogfooding/_docs tests/tests/links/target.mdx","sourceDirName":"tests/links","slug":"/tests/links/target-doc-slug","permalink":"/tests/docs/tests/links/target-doc-slug","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"slug":"target-doc-slug"},"sidebar":"sidebar","previous":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"},"next":{"title":"Test links","permalink":"/tests/docs/tests/links/test-markdown-links"}},{"id":"tests/links/test-markdown-links","title":"Test links","description":"These are dogfood tests showing that Markdown links with md/mdx file references are resolved correctly.","source":"@site/_dogfooding/_docs tests/tests/links/test-markdown-links.mdx","sourceDirName":"tests/links","slug":"/tests/links/test-markdown-links","permalink":"/tests/docs/tests/links/test-markdown-links","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Target doc","permalink":"/tests/docs/tests/links/target-doc-slug"},"next":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"}},{"id":"tests/toc-partials/index","title":"TOC partial test","description":"This page tests that MDX-imported content appears correctly in the table-of-contents","source":"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx","sourceDirName":"tests/toc-partials","slug":"/tests/toc-partials/","permalink":"/tests/docs/tests/toc-partials/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Test links","permalink":"/tests/docs/tests/links/test-markdown-links"},"next":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"}},{"id":"tests/visibility/force-unlisted","title":"force_unlisted_parseFrontMatter_test","description":"This doc is hidden despite unlisted: false","source":"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/force-unlisted","permalink":"/tests/docs/tests/visibility/force-unlisted","draft":false,"unlisted":true,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"force_unlisted_parseFrontMatter_test":true},"sidebar":"sidebar"},{"id":"tests/visibility/index","title":"Visibility","description":"A category to play with draft/unlisted front matter.","source":"@site/_dogfooding/_docs tests/tests/visibility/index.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/","permalink":"/tests/docs/tests/visibility/","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"tags":["visibility"]},"sidebar":"sidebar","previous":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"},"next":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"}},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/index","title":"Only Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","title":"Only Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted1","title":"Only Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted2","title":"Only Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-drafts/draft-subcategory/listed1","title":"Some Drafts - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"},"next":{"title":"Some Unlisteds - Listed 1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/index","title":"Some Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1","title":"Some Unlisteds - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"},"next":{"title":"Sidebar item description tests","permalink":"/tests/docs/category/sidebar-item-description-tests"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","title":"Some Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted1","title":"Some Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted2","title":"Some Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"toc/toc-_-_","title":"toc-_-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-_.mdx","sourceDirName":"toc","slug":"/toc/toc-_-_","permalink":"/tests/docs/toc/toc-_-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"},"next":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}},{"id":"toc/toc-_-5","title":"toc-_-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx","sourceDirName":"toc","slug":"/toc/toc-_-5","permalink":"/tests/docs/toc/toc-_-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"},"next":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"}},{"id":"toc/toc-2-2","title":"toc-2-2","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx","sourceDirName":"toc","slug":"/toc/toc-2-2","permalink":"/tests/docs/toc/toc-2-2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":2},"sidebar":"sidebar","previous":{"title":"Another test page","permalink":"/tests/docs/more-test"},"next":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"}},{"id":"toc/toc-2-3","title":"toc-2-3","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-3.mdx","sourceDirName":"toc","slug":"/toc/toc-2-3","permalink":"/tests/docs/toc/toc-2-3","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"},"next":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"}},{"id":"toc/toc-2-4","title":"toc-2-4","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx","sourceDirName":"toc","slug":"/toc/toc-2-4","permalink":"/tests/docs/toc/toc-2-4","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"sidebar":"sidebar","previous":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"},"next":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"}},{"id":"toc/toc-2-5","title":"toc-2-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-5.mdx","sourceDirName":"toc","slug":"/toc/toc-2-5","permalink":"/tests/docs/toc/toc-2-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"},"next":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"}},{"id":"toc/toc-3-_","title":"toc-3-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx","sourceDirName":"toc","slug":"/toc/toc-3-_","permalink":"/tests/docs/toc/toc-3-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"},"next":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"}},{"id":"toc/toc-3-5","title":"toc-3-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-5.mdx","sourceDirName":"toc","slug":"/toc/toc-3-5","permalink":"/tests/docs/toc/toc-3-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":3,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"},"next":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"}},{"id":"toc/toc-4-5","title":"toc-4-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx","sourceDirName":"toc","slug":"/toc/toc-4-5","permalink":"/tests/docs/toc/toc-4-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":4,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"},"next":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"}},{"id":"toc/toc-5-5","title":"toc-5-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx","sourceDirName":"toc","slug":"/toc/toc-5-5","permalink":"/tests/docs/toc/toc-5-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":5,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"},"next":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"}},{"id":"toc/toc-test-bad","title":"toc-test-bad","description":"Test the TOC behavior of a real-world MD doc with invalid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-bad.mdx","sourceDirName":"toc","slug":"/toc/toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"},"next":{"title":"toc-test-good","permalink":"/tests/docs/toc/toc-test-good"}},{"id":"toc/toc-test-good","title":"toc-test-good","description":"Test the TOC behavior of a real-world MD doc with valid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx","sourceDirName":"toc","slug":"/toc/toc-test-good","permalink":"/tests/docs/toc/toc-test-good","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}}],"drafts":[{"id":"tests/another-draft","title":"Another Draft","description":"This page should only be visible in local development","source":"@site/_dogfooding/_docs tests/tests/another-draft.mdx","sourceDirName":"tests","slug":"/tests/another-draft","permalink":"/tests/docs/tests/another-draft","draft":true,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true}},{"id":"tests/visibility/only-drafts/draft1","title":"Only Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft1.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft1","permalink":"/tests/docs/tests/visibility/only-drafts/draft1","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft2","title":"Only Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft2.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft2","permalink":"/tests/docs/tests/visibility/only-drafts/draft2","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["draft"]}},{"id":"tests/visibility/some-drafts/draft1","title":"Some Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft1.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft1","permalink":"/tests/docs/tests/visibility/some-drafts/draft1","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft2","title":"Some Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft2.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft2","permalink":"/tests/docs/tests/visibility/some-drafts/draft2","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/draft3","title":"Only Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/index","title":"Only Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/draft3","title":"Some Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/index","title":"Some Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}}],"sidebars":{"sidebar":[{"type":"doc","id":"index","className":"red","label":"Index","translatable":true},{"type":"doc","id":"doc-without-sidebar"},{"type":"doc","id":"doc-with-another-sidebar"},{"type":"doc","id":"doc-with-last-update"},{"type":"category","label":"Tests","link":{"type":"generated-index","slug":"/category/tests","permalink":"/tests/docs/category/tests"},"items":[{"type":"doc","id":"tests/Case-Sentitive-Doc"},{"type":"doc","id":"tests/admonitions"},{"type":"category","label":"ascii","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"folder","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/ascii/folder/\xe6\xf8\xe5"}]},{"type":"doc","label":"index","id":"tests/ascii/\xe6\xf8\xe5/index"}]},{"type":"category","label":"Category Links","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Introduction","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/custom-index-convention/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/custom-index-convention/intro"}},{"type":"category","label":"no-index-doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/no-index-doc/index"},{"type":"doc","id":"tests/category-links/no-index-doc/sample-doc"}]},{"type":"doc","label":"No sub-docs","id":"tests/category-links/no-subdoc/index"},{"type":"doc","id":"tests/category-links/readme"},{"type":"category","label":"regular-category","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/regular-category/sample-doc"}]},{"type":"category","label":"Category with a doc of category\'s name","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-category-name-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-category-name-doc/with-category-name-doc"}},{"type":"category","label":"Category with index.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-index-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-index-doc/index"}},{"type":"category","label":"Category with readme.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-readme-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-readme-doc/README"}}],"link":{"type":"generated-index","slug":"/category-links-generated-index-slug","permalink":"/tests/docs/category-links-generated-index-slug"}},{"type":"category","label":"Custom Props","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/custom-props/doc-with-custom-props","customProps":{"prop":"custom","number":1,"boolean":true}},{"type":"doc","id":"tests/custom-props/doc-without-custom-props"}],"link":{"type":"doc","id":"tests/custom-props/index"}},{"type":"doc","id":"tests/img-tests"},{"type":"category","label":"links","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/links/broken-anchors-tests"},{"type":"doc","id":"tests/links/target"},{"type":"doc","id":"tests/links/test-markdown-links"}]},{"type":"doc","label":"TOC partial test","id":"tests/toc-partials/index"},{"type":"category","label":"Visibility","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/force-unlisted"},{"type":"category","label":"only-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Only Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted2"}]},{"type":"category","label":"some-drafts","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"draft-subcategory","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-drafts/draft-subcategory/listed1"}]}]},{"type":"category","label":"some-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Some Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted2"}]}],"link":{"type":"doc","id":"tests/visibility/index"}},{"type":"link","label":"External Link test","href":"https://docusaurus.io"},{"type":"category","label":"Sidebar item description tests","link":{"type":"generated-index","slug":"/category/sidebar-item-description-tests","permalink":"/tests/docs/category/sidebar-item-description-tests"},"items":[{"type":"link","label":"Link without description","href":"https://docusaurus.io"},{"type":"link","label":"Link with description","href":"https://docusaurus.io","description":"Some link description"},{"type":"category","label":"Category without description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category with description","description":"Some category description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Another category with index","collapsible":false,"link":{"type":"generated-index","slug":"/category/another-category-with-index","permalink":"/tests/docs/category/another-category-with-index"},"items":[{"type":"doc","id":"more-test"}],"collapsed":false},{"type":"category","label":"Huge sidebar category","items":[{"type":"link","href":"/","label":"Test Test test test test test test"},{"type":"link","href":"/","label":"Link 0 (level 1)"},{"type":"link","href":"/","label":"Link 1 (level 1)"},{"type":"link","href":"/","label":"Link 2 (level 1)"},{"type":"link","href":"/","label":"Link 3 (level 1)"},{"type":"link","href":"/","label":"Link 4 (level 1)"},{"type":"link","href":"/","label":"Link 5 (level 1)"},{"type":"link","href":"/","label":"Link 6 (level 1)"},{"type":"link","href":"/","label":"Link 7 (level 1)"},{"type":"category","label":"Category 0 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Link tests","className":"red","items":[{"type":"link","label":"External link absolute","href":"https://github.com/facebook/docusaurus"},{"type":"link","label":"pathname:/// link","href":"pathname:///some/local/path"},{"type":"link","label":"pathname:/// link (no baseUrl)","href":"pathname:///some/local/path","autoAddBaseUrl":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"TOC tests","className":"red","items":[{"type":"doc","id":"toc/toc-2-2"},{"type":"doc","id":"toc/toc-2-3"},{"type":"doc","id":"toc/toc-2-4"},{"type":"doc","id":"toc/toc-2-5"},{"type":"doc","id":"toc/toc-3-5"},{"type":"doc","id":"toc/toc-3-_"},{"type":"doc","id":"toc/toc-4-5"},{"type":"doc","id":"toc/toc-5-5"},{"type":"doc","id":"toc/toc-_-5"},{"type":"doc","id":"toc/toc-_-_"},{"type":"doc","id":"toc/toc-test-bad"},{"type":"doc","id":"toc/toc-test-good"}],"collapsed":true,"collapsible":true},{"type":"category","label":"HTML items tests","collapsed":false,"collapsible":false,"items":[{"type":"html","value":"Some Text","defaultStyle":true},{"type":"html","value":"<span style=\\"border-top: 1px solid var(--ifm-color-gray-500); display: block;margin: 0.5rem 0 0.25rem 1rem;\\" />"},{"type":"html","defaultStyle":true,"value":"\\n <span style=\\"font-size: 0.5rem; color: lightgrey;\\">Powered by</span>\\n <img style=\\"width: 100px; height: 100px; display: block;\\" src=\\"/img/docusaurus.png\\" alt=\\"Docusaurus Logo\\" />\\n "}]}],"anotherSidebar":[{"type":"doc","id":"dummy"}]}}]}},"docusaurus-plugin-content-blog":{"default":{"blogSidebarTitle":"All our posts","blogPosts":[{"id":"/releases/3.4","metadata":{"permalink":"/blog/releases/3.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx","source":"@site/blog/releases/3.4/index.mdx","title":"Docusaurus 3.4","description":"We are happy to announce Docusaurus 3.4.","date":"2024-05-31T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.045,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-05-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","nextItem":{"title":"Docusaurus 3.3","permalink":"/blog/releases/3.3"}},"content":"We are happy to announce **Docusaurus 3.4**.\\n\\nUpgrading should be easy. Our [release process](/community/release-process) respects [Semantic Versioning](https://semver.org/). Minor versions do not include any breaking changes.\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Tags files\\n\\nThe docs and blog plugins both already supported a `tags` front matter attribute, enabling you to group related content. But tags declared inline in the front matter are not always ideal.\\n\\nWith [#10137](https://github.com/facebook/docusaurus/pull/10137), you can now declare a list of pre-defined tags in a `tags.yml` file:\\n\\n```yml title=\\"blog/tags.yml\\"\\ntag1:\\n label: \'Tag 1\'\\n description: \'Tag 1 description\'\\n permalink: /tag-1-permalink\\n\\ntag2:\\n label: \'Tag 2\'\\n description: \'Tag 2 description\'\\n permalink: /tag-2-permalink\\n```\\n\\nThese predefined tags can be used in the front matter of your blog or docs files:\\n\\n```md title=\\"blog/2024-05-31-my-blog-post.md\\"\\n---\\ntags: [tag1, tag2]\\n---\\n\\n# Title\\n\\nContent\\n```\\n\\n:::tip Keeping tags usage consistent\\n\\nUse the new `onInlineTags: \'throw\'` plugin option to enforce the usage of predefined tags and prevent contributors from creating new unwanted tags.\\n\\n:::\\n\\n### Hash Router - Experimental\\n\\nWith [9859](https://github.com/facebook/docusaurus/pull/9859), we added a new **experimental** hash router config option, useful for **offline browsing** by opening your site locally through the `file://` protocol.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\nexport default {\\n future: {\\n experimental_router: \'hash\',\\n },\\n};\\n```\\n\\n:::warning\\n\\nThis mode is **not recommended for sites deployed through a web server**.\\n\\n:::\\n\\nWhen this mode is turned on, Docusaurus will opt out of static site rendering, and build a client-side single page application where all routes are prefixed with `/#/`. A single `index.html` file is generated. This file can be opened locally in your browser by simply clicking it, using the browser `file://` protocol. This makes it possible to distribute a Docusaurus site as a `.zip` file so that readers can browse it offline, without having to install anything complex on their computer apart a web browser.\\n\\n![Docusaurus hash router - local browsing using the file:// protocol](./img/hash.png)\\n\\nTry browsing our own Docusaurus site built with the hash router:\\n\\n- [Docusaurus website - Hash Router web deployment](https://facebook.github.io/docusaurus/#/)\\n- [Docusaurus website - Hash Router downloadable GitHub artifacts](https://github.com/facebook/docusaurus/actions/workflows/build-hash-router.yml)\\n\\n:::caution Experimental\\n\\nThis feature is **experimental**. If you try it out, please let us know how it works for you [here](https://github.com/facebook/docusaurus/issues/3825).\\n\\n:::\\n\\n### Site Storage - Experimental\\n\\nDocusaurus uses the browser `localStorage` API to persist UI state.\\n\\nBut sometimes the storage space is \\"shared\\" between multiple sites using the same domain, leading to **storage key conflicts**. This generally happens in two cases\\n\\n- when working on multiple `http://localhost:3000` sites\\n- when hosting multiple sites under the same domain: `https://example.com/site1/` and `https://example.com/site2/`\\n\\nFor this reason, we introduced a new **experimental** `siteStorage` configuration option:\\n\\n```tsx\\nexport default {\\n future: {\\n experimental_storage: {\\n type: \'localStorage\',\\n namespace: true,\\n },\\n },\\n};\\n```\\n\\nWhen `namespace: true` is set, we apply a hash suffix to all the storage keys, making them unique to the current site (based on `config.url` and `config.baseUrl`. For example, the `theme` storage key becomes `theme-x6f`. It is also possible to provide your own custom suffix `namespace: \'suffix\'`. We also made it possible to use `type: \'sessionStorage\'` instead of the default `localStorage`.\\n\\n:::caution Experimental\\n\\nThis feature is **experimental**. If you try it out, please let us know how it works for you [here](https://github.com/facebook/docusaurus/pull/10121).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#10151](https://github.com/facebook/docusaurus/pull/10151): add Turkmen (tk) theme translations\\n- [#10111](https://github.com/facebook/docusaurus/pull/10111): add Bulgarian (bg) theme translations\\n- [#10168](https://github.com/facebook/docusaurus/pull/10168): fix many long overdue Markdown link resolution bugs\\n- [#10178](https://github.com/facebook/docusaurus/pull/10178): the `/search` page now respects the `contextualSearch: false` setting\\n- [#10118](https://github.com/facebook/docusaurus/pull/10118): fix bad pluralization on docs generated index category card description\\n- [#10130](https://github.com/facebook/docusaurus/pull/10130): fix false positives reported by the broken anchor checker due to trailing slashes\\n\\nCheck the **[3.4.0 changelog entry](/changelog/3.4.0)** for an exhaustive list of changes."},{"id":"/releases/3.3","metadata":{"permalink":"/blog/releases/3.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.3/index.mdx","source":"@site/blog/releases/3.3/index.mdx","title":"Docusaurus 3.3","description":"We are happy to announce Docusaurus 3.3.","date":"2024-05-03T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.56,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-05-03T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 3.4","permalink":"/blog/releases/3.4"},"nextItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"}},"content":"We are happy to announce **Docusaurus 3.3**.\\n\\nUpgrading should be easy. Our [release process](/community/release-process) respects [Semantic Versioning](https://semver.org/). Minor versions do not include any breaking changes.\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Highlights\\n\\n### Prepare for React 19\\n\\nThe React core team recently [released the first **React 19 beta**](https://react.dev/blog/2024/04/25/react-19). They also [published an upgrade guide and a **React v18.3 release**](https://react.dev/blog/2024/04/25/react-19-upgrade-guide) with new warnings to help us identify issues **before upgrading to React 19**.\\n\\nDocusaurus v3 depends on React `18.x`. When initializing a new Docusaurus sites, it will use that new React `18.3` release. It\'s also the case if you decide to upgrade your dependencies, or re-generate your package manager lockfile.\\n\\nIt turns out in its current state, **Docusaurus had a few of those extra warnings to fix**, notably this one immediately appearing on your dev console on any page load and navigation:\\n\\n> Warning: LoadableComponent uses the legacy contextTypes API which is no longer supported and will be removed in the next major release. Use React.createContext() with static contextType instead.\\n\\nIn [#10079](https://github.com/facebook/docusaurus/pull/10079), we got Docusaurus ready for React 19. We fixed all the React 18.3 warnings we encountered. In case we missed any, don\'t hesitate to [**report new warnings**](https://github.com/facebook/docusaurus/issues/10099) if you see them, to us but also to other Docusaurus third-party plugin authors.\\n\\n### `createSitemapItems`\\n\\nIn [#10083](https://github.com/facebook/docusaurus/pull/10083), we introduced a new flexible `createSitemapItems()` hook to the sitemap plugin. This enables users to create/filter/transform/enhance the sitemap items with their own custom logic.\\n\\n```ts\\nexport default {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n sitemap: {\\n // highlight-start\\n createSitemapItems: async ({\\n defaultCreateSitemapItems,\\n ...params\\n }) => {\\n const items = await defaultCreateSitemapItems(params);\\n return items.filter((item) => !item.url.includes(\'/tags/\'));\\n },\\n // highlight-end\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n### Pages plugin improvements\\n\\nThe Docusaurus [pages plugin](/docs/api/plugins/@docusaurus/plugin-content-pages) has historically been lagging behind the docs and blog plugins in terms of available feature.\\n\\nIn [#10032](https://github.com/facebook/docusaurus/pull/10032) we normalized the options available on each core content plugins by adding a few the missing page plugins APIs related to the edit url and the last update metadata displayed at the bottom on Markdown pages.\\n\\n```js\\nexport default {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n pages: {\\n // highlight-start\\n editUrl:\\n \'https://github.com/facebook/docusaurus/tree/main/website/src/pages\',\\n editLocalizedFiles: true,\\n showLastUpdateAuthor: true,\\n showLastUpdateTime: true,\\n // highlight-end\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n<IframeWindow url=\\"/examples/markdownPageExample\\" />\\n\\n:::note Only for Markdown pages\\n\\nThese new plugin options only apply to Markdown pages, and have no effect on React pages for which you have full control over the layout with JSX.\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#10064](https://github.com/facebook/docusaurus/pull/10064): new site config option `siteConfig.markdown.anchors.maintainCase`\\n- [#9767](https://github.com/facebook/docusaurus/pull/9767): new `docusaurus deploy --target-dir` option\\n- [#10042](https://github.com/facebook/docusaurus/pull/10042): new (experimental) plugin API: `route.props`\\n- [#10060](https://github.com/facebook/docusaurus/pull/10060): optimizes the App entrypoint, avoid useless re-renders on navigations\\n- [#10080](https://github.com/facebook/docusaurus/pull/10080): `<Admonition>` component can render properly without heading/icon\\n- [#10091](https://github.com/facebook/docusaurus/pull/10091): `<Tabs>` props can now override defaults\\n- [#10090](https://github.com/facebook/docusaurus/pull/10090): `docusaurus serve` works better with a `/baseUrl/` pathname prefix\\n- [#10070](https://github.com/facebook/docusaurus/pull/10070): add missing theme translations for `pt-BR`\\n- [#10025](https://github.com/facebook/docusaurus/pull/10025): doc sidebar item label now impacts the doc pagination label\\n\\nCheck the **[3.3.0 changelog entry](/changelog/3.3.0)** for an exhaustive list of changes."},{"id":"/releases/3.2","metadata":{"permalink":"/blog/releases/3.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx","source":"@site/blog/releases/3.2/index.mdx","title":"Docusaurus 3.2","description":"We are happy to announce Docusaurus 3.2.","date":"2024-03-29T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.475,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-03-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 3.3","permalink":"/blog/releases/3.3"},"nextItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"}},"content":"We are happy to announce **Docusaurus 3.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Faster builds\\n\\nWe worked hard to reduce the time it takes to build a Docusaurus site in production mode.\\n\\nBetween v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.\\n\\nLet\'s take an example. Our benchmark on the [React Native website upgrading to v3.2](https://github.com/facebook/react-native-website/pull/4072) reports the following results:\\n\\n- \ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)\\n- \ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)\\n\\nThe results will vary depending on your site\'s topology and the options you turned on, but we expect the largest sites will see the most significant improvements.\\n\\nNote that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our [performance issue](https://github.com/facebook/docusaurus/issues/4765) for upcoming improvements.\\n\\n<details>\\n <summary>What is the difference between a cold build and an incremental build?</summary>\\n\\nA cold build is when the Docusaurus caches are empty, generally after running `docusaurus clear`.\\n\\nAn incremental build happens when you run another time the `docusaurus build` command. Docusaurus automatically tries to \\"re-use\\" computations from former builds to make subsequent builds faster. In practice it\'s based on [Webpack persistent caching](https://webpack.js.org/guides/build-performance/#persistent-cache). To enable incremental builds on your CI server, you can persist the `node_modules/.cache` folder across builds.\\n\\n</details>\\n\\n### Faster Dev Server\\n\\nWe also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.\\n\\nThe way we initially implemented content reloading wasn\'t great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin\'s content, only that plugin will reload. It\'s hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25.\\n\\nWe plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don\'t run useless computations that would always keep giving the same result.\\n\\n### MDX partials table-of-contents\\n\\nWith [#9684](https://github.com/facebook/docusaurus/pull/9684), Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.\\n\\nDocusaurus and MDX allows you to [import one Markdown file into another](/docs/markdown-features/react#importing-markdown). We usually call the imported Markdown file a \\"partial\\", and use the `_` prefix so that this file does not lead to the creation of a new page.\\n\\n```md title=\\"myDoc.mdx\\"\\n# My Doc\\n\\n## Doc heading\\n\\nContent is imported from another MDX file:\\n\\nimport ImportedDoc from \'./\\\\_importedDoc.mdx\';\\n\\n<ImportedDoc />\\n```\\n\\n```md title=\\"_myPartial.mdx\\"\\n## Partial heading\\n\\nSome paragraph\\n```\\n\\nPreviously, the heading `Partial heading` did not appear in the table-of-contents, but now it will!\\n\\n### Blog improvements\\n\\nWe improved the blog plugin with several new options to make it even more powerful and flexible:\\n\\n- [#9912](https://github.com/facebook/docusaurus/pull/9912): you can now display the last update time and author of a blog post, a feature the docs plugin already had.\\n- [#9886](https://github.com/facebook/docusaurus/pull/9886): a new `processBlogPosts` option allow you to filter/transform/sort blog posts.\\n- [#9838](https://github.com/facebook/docusaurus/pull/9838): a new `pageBasePath` option allows you to customize the blog pagination URL segment (`/blog/page/2`)\\n\\n### Sitemap lastmod\\n\\nWith [#9954](https://github.com/facebook/docusaurus/pull/9954), the sitemap plugin has a new `lastmod` option that can now emit a `<lastmod>` tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog `last_update` front matter.\\n\\nWe also made it possible to opt-out of emitting `<priority>` and `<frequency>` tags, which are generally ignored by crawlers (notably [Google](https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping)).\\n\\nWe recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:\\n\\n```js\\n{\\n lastmod: \'date\',\\n priority: null,\\n changefreq: null,\\n}\\n```\\n\\n## Other changes\\n\\n- [#9687](https://github.com/facebook/docusaurus/pull/9687): new Vercel Analytics plugin\\n- [#9681](https://github.com/facebook/docusaurus/pull/9681) and [#9442](https://github.com/facebook/docusaurus/pull/9442): `docusaurus swizzle` and `create-docusaurus` CLIs now ask users if they prefer to use TypeScript\\n- [#9928](https://github.com/facebook/docusaurus/pull/9928): new Icelandic translation\\n- [#9928](https://github.com/facebook/docusaurus/pull/9931): new `allContentLoaded` plugin lifecycle (experimental)\\n\\nCheck the **[3.2.0 changelog entry](/changelog/3.2.0)** for an exhaustive list of changes."},{"id":"/releases/3.1","metadata":{"permalink":"/blog/releases/3.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx","source":"@site/blog/releases/3.1/index.mdx","title":"Docusaurus 3.1","description":"We are happy to announce Docusaurus 3.1.","date":"2024-01-05T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":1.665,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-01-05T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"},"nextItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"}},"content":"We are happy to announce **Docusaurus 3.1**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Broken anchors checker\\n\\nIn [#9528](https://github.com/facebook/docusaurus/pull/9528), we improved the built-in broken links checker to also detect broken anchors.\\n\\n![Docusaurus blog post social card](./img/broken-anchor.jpg)\\n\\n:::tip[Make it fail fast]\\n\\nThe new [`onBrokenAnchors`](/docs/api/docusaurus-config#onBrokenAnchors) option has value `warn` by default, for retro-compatibility reasons.\\n\\nWe recommend to turn it to `throw` and fail your CI builds instead of deploying broken anchors to productions.\\n\\n:::\\n\\n:::note\\n\\nFor users and plugin authors implementing custom `<Heading>` and `<Link>` components, we provide a new [`useBrokenLinks`](/docs/docusaurus-core#useBrokenLinks) React hook API.\\n\\n**Most Docusaurus users don\'t need to care about it**, built-in components (`docusaurus/Link` and `@theme/Heading`) already use it internally.\\n\\n:::\\n\\n### `parseFrontMatter` hook\\n\\nIn [#9624](https://github.com/facebook/docusaurus/pull/9624), we added a new [`siteConfig.markdown.parseFrontMatter` function hook](/docs/api/docusaurus-config#markdown).\\n\\nThis makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n // highlight-start\\n parseFrontMatter: async (params) => {\\n // Reuse the default parser\\n const result = await params.defaultParseFrontMatter(params);\\n\\n // Process front matter description placeholders\\n result.frontMatter.description =\\n result.frontMatter.description?.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n\\n // Create your own front matter shortcut\\n if (result.frontMatter.i_do_not_want_docs_pagination) {\\n result.frontMatter.pagination_prev = null;\\n result.frontMatter.pagination_next = null;\\n }\\n\\n // Rename an unsupported front matter coming from another system\\n if (result.frontMatter.cms_seo_summary) {\\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\\n delete result.frontMatter.cms_seo_summary;\\n }\\n\\n return result;\\n },\\n // highlight-end\\n },\\n};\\n```\\n\\nRead the [front matter guide](/docs/markdown-features#front-matter) and the [`parseFrontMatter` API ref](/docs/api/docusaurus-config#markdown) for details.\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#9674](https://github.com/facebook/docusaurus/pull/9674): add `siteConfig.markdown.remarkRehypeOptions` to pass options to `remark-rehype`, letting you customize things such as MDX footnote label\\n- [#9671](https://github.com/facebook/docusaurus/pull/9671): add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML\\n- [#9610](https://github.com/facebook/docusaurus/pull/9610): enable CLI port configuration via `PORT` environment variable\\n- [#9477](https://github.com/facebook/docusaurus/pull/9477): complete Brazilian Portuguese (pt-BR) translations\\n\\nCheck the **[3.1.0 changelog entry](/changelog/3.1.0)** for an exhaustive list of changes."},{"id":"/releases/3.0","metadata":{"permalink":"/blog/releases/3.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx","source":"@site/blog/releases/3.0/index.mdx","title":"Announcing Docusaurus 3.0","description":"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73","date":"2023-10-31T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":10.515,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Announcing Docusaurus 3.0","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-10-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"},"nextItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"}},"content":"Today, we are happy to **announce Docusaurus 3.0**! \ud83e\udd73\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nThis is a new **major version** of Docusaurus, coming with **new exciting features** and upgraded dependencies.\\n\\nIn line with the [**Semantic Versioning**](https://semver.org/) principles, this release includes **breaking changes** we documented thoroughly in the [**v3 upgrade guide**](/docs/migration/v3/). Breaking changes can be bothersome, but they are necessary to set the ground for a **new wave of Docusaurus features** we plan to implement.\\n\\n![v3.0 social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\nWe initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, **upgrading to MDX v3** is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding [compatibility options for MDX v1](/docs/api/docusaurus-config#markdown).\\n\\nThe simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:\\n\\n- [Prepare your site](/blog/preparing-your-site-for-docusaurus-v3) ahead of time, incrementally, while staying on Docusaurus v2\\n- [Set up visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) to catch unexpected visual changes happening during the upgrade\\n\\n:::info About Docusaurus v2\\n\\nAccording to our [release process](/community/release-process#stable-version), Docusaurus v2 has now entered **maintenance mode**. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.\\n\\n:::\\n\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Breaking changes\\n\\nThis section only gives you a quick glance. All the breaking changes are thoroughly documented in the [**v3 upgrade guide**](/docs/migration/v3).\\n\\nDocusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:\\n\\n- Node.js v16 \u27a1\ufe0f v18\\n- React v17 \u27a1\ufe0f v18\\n- MDX v1 \u27a1\ufe0f v3\\n- TypeScript v4 \u27a1\ufe0f v5\\n- prism-react-renderer v1 \u27a1\ufe0f v2\\n- react-live v2 \u27a1\ufe0f v4\\n- Mermaid v9 \u27a1\ufe0f v10\\n- import-fresh v3 \u27a1\ufe0f jiti v1\\n- remark-emoji v2 \u27a1\ufe0f v4\\n\\nA typical `package.json` dependency upgrade looks like:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n // upgrade to Docusaurus v3\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0\\",\\n // upgrade to MDX v3\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n // upgrade to prism-react-renderer v2.0+\\n- \\"prism-react-renderer\\": \\"^1.3.5\\",\\n+ \\"prism-react-renderer\\": \\"^2.1.0\\",\\n // upgrade to React v18.0+\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n // upgrade Docusaurus dev dependencies to v3\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\",\\n- \\"@docusaurus/types\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0\\",\\n+ \\"@docusaurus/types\\": \\"3.0.0\\"\\n }\\n \\"engines\\": {\\n // require Node.js 18.0+\\n- \\"node\\": \\">=16.14\\"\\n+ \\"node\\": \\">=18.0\\"\\n }\\n }\\n```\\n\\nApart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn\'t have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new default blog RSS feed limit of 20 entries\\n- [#9308](https://github.com/facebook/docusaurus/pull/9308): fix and re-introduce the `:::warning` admonition, deprecate `:::caution`\\n- [#9310](https://github.com/facebook/docusaurus/pull/9310): remove the legacy versioned sidebar id prefix, used for sites versioned before `v2.0.0-beta.10` (December 2021)\\n- [#7966](https://github.com/facebook/docusaurus/pull/7966): refactor docs theme components, eventually requiring to you re-swizzle them\\n\\n## Highlights\\n\\nBelow is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0).\\n\\n### Markdown\\n\\nDocusaurus v3 upgraded from MDX v1 to MDX v3:\\n\\n- in [#8288](https://github.com/facebook/docusaurus/pull/8288), we upgraded to [**MDX v2**](https://mdxjs.com/blog/v2/) ([migration guide](https://mdxjs.com/migrating/v2/))\\n- in [#9451](https://github.com/facebook/docusaurus/pull/9451), we upgraded to [**MDX v3**](https://mdxjs.com/blog/v3/) ([migration guide](https://mdxjs.com/migrating/v3/))\\n\\nThis new MDX version is **much better for content writers and plugin authors**, and lays the ground for implementing new exciting Markdown features.\\n\\n:::warning MDX v3 - the main challenge\\n\\nThe transition from MDX v1 to MDX v3 is the **main challenge** to the adoption of Docusaurus v3.\\n\\nSome documents that compiled successfully under Docusaurus v2 might now **fail to compile** under Docusaurus v3, while others might **render differently**.\\n\\nMost breaking changes come from [MDX v2](https://mdxjs.com/blog/v2/), and [MDX v3](https://mdxjs.com/blog/v3/) is a relatively small release. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\n**Don\'t be intimidated**. Most problems are **easy to fix** and often related to `{` and `<` characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command [`npx docusaurus-mdx-checker`](https://github.com/slorber/docusaurus-mdx-checker) to help you get an estimate of the work to be done, and we recommend to [prepare your site in advance](/blog/preparing-your-site-for-docusaurus-v3).\\n\\nIf you created custom [MDX plugins](/docs/markdown-features/plugins) (Remark/Rehype), the AST is slightly different, and you might need to refactor them.\\n\\n:::\\n\\nThis notably enables us to add a [CommonMark mode](/docs/markdown-features#mdx-vs-commonmark) that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and **experimental** and limited ([some Docusaurus features will not work](https://github.com/facebook/docusaurus/issues/9092)). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret `.md` files as CommonMark in an upcoming major version, and recommend to use the `.mdx` extension for any file using JSX or ES modules.\\n\\nWe also introduced a new way to [configure Markdown globally for your site](/docs/api/docusaurus-config#markdown), and plan to add more flexible options later.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n format: \'mdx\',\\n mermaid: true,\\n preprocessor: ({filePath, fileContent}) => {\\n return fileContent.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n },\\n mdx1Compat: {\\n comments: true,\\n admonitions: true,\\n headingIds: true,\\n },\\n },\\n};\\n```\\n\\nDocusaurus now uses the [remark-directive](https://github.com/remarkjs/remark-directive) plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own [custom directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) such as `:textDirective`, `::leafDirective` or `:::containerDirective`.\\n\\n### ESM and TypeScript configs {#esm-ts-configs}\\n\\nIn [#9317](https://github.com/facebook/docusaurus/pull/9317), we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.\\n\\nHere are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type * as Preset from \'@docusaurus/preset-classic\';\\n\\nconst config: Config = {\\n title: \'My Site\',\\n favicon: \'img/favicon.ico\',\\n // your site config ...\\n presets: [\\n [\\n \'classic\',\\n {\\n // your preset config ...\\n } satisfies Preset.Options,\\n ],\\n ],\\n themeConfig: {\\n // your theme config ...\\n } satisfies Preset.ThemeConfig,\\n};\\n\\nexport default config;\\n```\\n\\n```ts title=\\"sidebars.ts\\"\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n\\nconst sidebars: SidebarsConfig = {\\n docs: [\'introduction\'],\\n};\\n\\nexport default sidebars;\\n```\\n\\n### Unlisted content\\n\\nDocusaurus already supported a `draft: true` front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.\\n\\nIn [#8004](https://github.com/facebook/docusaurus/pull/8004), we introduced a new `unlisted: true` front matter option, which will keep your pages available in production builds, while \\"hiding\\" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.\\n\\nUnlisted content will:\\n\\n- be excluded from `sitemap.xml`\\n- be excluded from SEO results thanks to `<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />`\\n- be excluded from blog RSS feeds\\n- be excluded from Algolia DocSearch results\\n- be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...\\n\\nUnlisted content will also display a banner so that you don\'t forget to turn it off once your content is ready for prime time. Here\'s an example of an [unlisted blog post](/tests/blog/unlisted-post):\\n\\n<IframeWindow url=\\"/tests/blog/unlisted-post\\" />\\n\\n### React 18\\n\\nIn [#8961](https://github.com/facebook/docusaurus/pull/8961), we upgraded to React 18. This is important, notably for the [gradual adoption of Concurrent React features](https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features), as well as upcoming exciting features such as [build-time React Server Components](https://github.com/facebook/docusaurus/issues/9089).\\n\\nThis new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), notably the new [automatic batching](https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching) behavior.\\n\\n:::danger Experimental support for React 18 features\\n\\nReact 18 comes with new features:\\n\\n- `<Suspense>`\\n- `React.lazy()`\\n- `startTransition()`\\n\\nTheir Docusaurus support is considered as **experimental**. We might have to adjust the integration in the future, leading to a different runtime behavior.\\n\\n:::\\n\\n### Automatic JSX runtime\\n\\nDocusaurus now uses the [\\"automatic\\" JSX runtime](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html).\\n\\nIt is not needed anymore to import React in JSX files that do not use any React API.\\n\\n```diff title=\\"src/components/MyComponent.js\\"\\n- import React from \'react\';\\n\\n export default function MyComponent() {\\n return <div>Hello</div>;\\n }\\n```\\n\\n### Debug builds\\n\\nIt is now possible to build your static site in dev mode.\\n\\n```bash\\ndocusaurus build --dev\\n```\\n\\n:::tip Debug React-related problems\\n\\nDocusaurus will log more errors to the console, notably React 18 hydration errors through the new [`onRecoverableError` callback](https://react.dev/reference/react-dom/client/hydrateRoot#parameters).\\n\\nThis new build mode is particularly helpful for **troubleshooting React problems**. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the [React Error Decoder page](https://reactjs.org/docs/error-decoder.html/).\\n\\n:::\\n\\n### TypeScript\\n\\nDocusaurus v3 now requires a minimum version of TypeScript 5.0.\\n\\nWe re-internalized the base recommended TypeScript config to a new official package:\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\nWe also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new [TypeScript config files](#esm-ts-configs):\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type {Options, ThemeConfig} from \'@docusaurus/preset-classic\';\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n```\\n\\n### Code blocks\\n\\nIn [#9316](https://github.com/facebook/docusaurus/pull/9316), we improved on syntax highlighting thanks to the [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) v2 upgrade. For example, a bash param `--save` is now colored:\\n\\n```bash\\nnpm install --save some-package\\n```\\n\\nThe [interactive code editor](/docs/markdown-features/code-blocks#interactive-code-editor) also upgrades to [react-live](https://github.com/FormidableLabs/react-live) v4, coming with a new [sucrase](https://github.com/alangpierce/sucrase) compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.\\n\\n```js live\\nfunction Hello() {\\n const name: string = \'World\';\\n return <div>Hello {name}</div>;\\n}\\n```\\n\\nIn [#8982](https://github.com/facebook/docusaurus/pull/8982) and [#8870](https://github.com/facebook/docusaurus/pull/8870), we also added [magic comments](/docs/markdown-features/code-blocks#custom-magic-comments) support for TeX-like, Haskell-like, and WebAssembly comment syntax.\\n\\n```haskell title=\\"haskell.hs\\"\\nstringLength :: String -> Int\\n-- highlight-next-line\\nstringLength [] = 0\\nstringLength (x:xs) = 1 + stringLength xs\\n```\\n\\n```matlab title=\\"matlab.m\\"\\n% highlight-start\\nfunction result = times2(n)\\n result = n * 2;\\nend\\n% highlight-end\\nx = 10;\\n% highlight-next-line\\ny = times2(x);\\n```\\n\\n### Mermaid diagrams\\n\\nIn [#9305](https://github.com/facebook/docusaurus/pull/9305), we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.\\n\\n<details>\\n <summary>Mindmap</summary>\\n\\n```mermaid\\nmindmap\\n root((mindmap))\\n Research\\n Creative techniques\\n Strategic planning\\n Argument mapping\\n Tools\\n Pen and paper\\n Mermaid\\n```\\n\\n</details>\\n\\n<details>\\n <summary>Quadrant chart</summary>\\n\\n```mermaid\\nquadrantChart\\n title Reach and engagement of campaigns\\n x-axis Low Reach --\x3e High Reach\\n y-axis Low Engagement --\x3e High Engagement\\n quadrant-1 We should expand\\n quadrant-2 Need to promote\\n quadrant-3 Re-evaluate\\n quadrant-4 May be improved\\n Campaign A: [0.3, 0.6]\\n Campaign B: [0.45, 0.23]\\n Campaign C: [0.57, 0.69]\\n Campaign D: [0.78, 0.34]\\n Campaign E: [0.40, 0.34]\\n Campaign F: [0.35, 0.78]\\n```\\n\\n</details>\\n\\n### Query-string data attributes\\n\\nIn [#9028](https://github.com/facebook/docusaurus/pull/9028), we made it possible to set custom HTML [data attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*) though `docusaurus-data-x` query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.\\n\\n```css title=\\"/src/css/custom.css\\"\\nhtml[data-navbar=\'false\'] .navbar {\\n display: none;\\n}\\n\\nhtml[data-red-border] div#__docusaurus {\\n border: red solid thick;\\n}\\n```\\n\\n<IframeWindow url=\\"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border\\" />\\n\\n### Other features\\n\\nOther new features worth mentioning:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new blog `feedOptions.limit` option\\n- [#9071](https://github.com/facebook/docusaurus/pull/9071): add normalized SEO front matter support for the pages plugin\\n- [#9171](https://github.com/facebook/docusaurus/pull/9028): the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url\\n- [#9171](https://github.com/facebook/docusaurus/pull/9171): new ESLint rule [`no-html-links`](/docs/api/misc/@docusaurus/eslint-plugin/no-html-links)\\n- [#8384](https://github.com/facebook/docusaurus/pull/8384): new ESLint rule [`prefer-docusaurus-heading`](/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading)\\n\\nRead [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0) for an exhaustive list of changes.\\n\\n## Conclusion\\n\\nThis release comes with a few features, but more importantly **upgrades many pieces of the Docusaurus infrastructure**.\\n\\nThe **MDX upgrade** consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.\\n\\nNow that we\'ve caught up with our infrastructure, we\'ll be back **delivering useful documentation features** very soon, in upcoming minor versions.\\n\\nWe would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a **competitive solution** that stands out for its great **flexibility**."},{"id":"/preparing-your-site-for-docusaurus-v3","metadata":{"permalink":"/blog/preparing-your-site-for-docusaurus-v3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","source":"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","title":"Preparing your site for Docusaurus v3","description":"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.","date":"2023-09-29T00:00:00.000Z","tags":[{"inline":false,"label":"Maintenance","permalink":"/blog/tags/maintenance"}],"readingTime":13.975,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Preparing your site for Docusaurus v3","authors":["slorber"],"tags":["maintenance"],"slug":"/preparing-your-site-for-docusaurus-v3","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"},"nextItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},"content":":::warning\\n\\nThis blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the [upgrade guide](https://docusaurus.io/docs/next/migration/v3) for the most up-to-date migration steps.\\n\\n:::\\n\\n**Docusaurus v3** is now [**in beta**](https://github.com/facebook/docusaurus/discussions/9312) and the official release is around the corner. This is the perfect time to start **preparing your site** for this new major version.\\n\\nDocusaurus v3 comes with a few **breaking changes**, many of which can be **handled today under Docusaurus v2**. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.\\n\\nThe main breaking change is the upgrade from MDX v1 to MDX v3. Read the [**MDX v2**](https://mdxjs.com/blog/v2/) and [**MDX v3**](https://mdxjs.com/blog/v3/) release notes for details. MDX will now compile your Markdown content **more strictly** and with **subtle differences**.\\n\\nThis article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.\\n\\n![Preparing your site for Docusaurus v3 - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n:::warning\\n\\nThis article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the [v3.0.0-beta.0 release notes](https://github.com/facebook/docusaurus/discussions/9312) for an exhaustive list.\\n\\n:::\\n\\n:::tip Don\'t be afraid\\n\\nThere\'s a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.\\n\\nIf your site is relatively small, with only a few customizations, you can probably [upgrade to Docusaurus v3](#try-docusaurus-v3-today) immediately.\\n\\n:::\\n\\n## Preparatory work\\n\\nBefore preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest [Docusaurus v2 version](/versions).\\n\\nDepending on the complexity of your site, it may be a good idea to adopt the [visual regression testing workflow](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.\\n\\nWe also recommend using the `.mdx` extension whenever you use JSX, `import`, or `export` (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, `.md` files will be parsed as standard [CommonMark](https://commonmark.org/), which does not support these features. In Docusaurus v3, `.md` files keep being compiled as MDX files, but it will be possible to [opt-in for CommonMark](https://github.com/facebook/docusaurus/issues/3018).\\n\\n## Preparing content for MDX v3\\n\\nMDX is a major dependency of Docusaurus responsible for compiling your `.md` and `.mdx` files to React components.\\n\\nMDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of `{` and `<` characters.\\n\\nUpgrading MDX comes with all the breaking changes documented on the [MDX v2](https://mdxjs.com/blog/v2/) and [MDX v3](https://mdxjs.com/blog/v3/) release blog posts. Most breaking changes come from MDX v2. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\nMake sure to also read our updated [**MDX and React**](/docs/markdown-features/react) documentation page.\\n\\n:::tip Ask for help\\n\\nWe have a dedicated [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053) discussion.\\n\\n:::\\n\\n### Using the MDX playground\\n\\nThe MDX playground is your new best friend. It permits to understand how your content is **compiled to React components**, and troubleshoot compilation or rendering issues in isolation.\\n\\nEach MDX version comes with its own playground:\\n\\n- [MDX playground - current version](https://mdxjs.com/playground/)\\n- [MDX playground - v1](https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/)\\n\\n<details>\\n <summary>Configuring the MDX playground options for Docusaurus</summary>\\n\\nTo obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the [MDX playground](https://mdxjs.com/playground/):\\n\\n- Use `MDX`\\n- Use `remark-gfm`\\n- Use `remark-directive`\\n\\n![Screenshot of the MDX playground\'s options panel, with only the \\"Use `MDX`\\", \\"Use `remark-gfm`\\", and \\"Use `remark-directive`\\" options checked](./img/mdx2-playground-options.png)\\n\\n</details>\\n\\nUsing the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.\\n\\n:::tip Making your content future-proof\\n\\nThe goal will be to refactor your problematic content so that it **works fine with both versions of MDX**. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.\\n\\n:::\\n\\n### Using the MDX checker CLI\\n\\nWe provide a [docusaurus-mdx-checker](https://github.com/slorber/docusaurus-mdx-checker) CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.\\n\\n```bash\\nnpx docusaurus-mdx-checker\\n```\\n\\nFor each compilation issue, the CLI will log the file path and a line number to look at.\\n\\n![Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages](./img/mdx-checker-output.png)\\n\\n:::tip\\n\\nUse this CLI to estimate of how much work will be required to make your content compatible with MDX v3.\\n\\n:::\\n\\n:::warning\\n\\nThis CLI is a best effort, and will only report compilation errors.\\n\\nIt will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using [visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing).\\n\\n:::\\n\\n### Common MDX problems\\n\\nWe upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:\\n\\n- [Docusaurus PR](https://github.com/facebook/docusaurus/pull/8288)\\n- [React-Native PR](https://github.com/facebook/react-native-website/pull/3780)\\n- [Jest PR](https://github.com/jestjs/jest/pull/14463)\\n\\nThese upgrades permitted us to aggregate the most common content problems, and document how to best handle them.\\n\\n#### Bad usage of `{`\\n\\nThe `{` character is used for opening [JavaScript expressions](https://mdxjs.com/docs/what-is-mdx/#expressions). MDX will now fail if what you put inside `{expression}` is not a valid expression.\\n\\n```md title=\\"example.md\\"\\nThe object shape looks like {username: string, age: number}\\n```\\n\\n:::danger Error message\\n\\n> Could not parse expression with acorn: Unexpected content after expression\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `{username: string, age: number}`\\n- Use the HTML code: `{`\\n- Escape it: `\\\\{`\\n\\n:::\\n\\n#### Bad usage of `<`\\n\\nThe `<` character is used for opening [JSX tags](https://mdxjs.com/docs/what-is-mdx/#jsx). MDX will now fail if it thinks your JSX is invalid.\\n\\n```md title=\\"example.md\\"\\nUse Android version <5\\n\\nYou can use a generic type like Array<T>\\n\\nFollow the template \\"Road to <YOUR_MINOR_VERSION>\\"\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `5` (U+0035) before name, expected a character that can start a name, such as a letter, `$`, or `_`\\n\\n> Expected a closing tag for `<T>` (1:6-1:9) before the end of `paragraph` end-tag-mismatch mdast-util-mdx-jsx\\n\\n> Expected a closing tag for `<YOUR_MINOR_VERSION>` (134:19-134:39) before the end of `paragraph`\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `Array<T>`\\n- Use the HTML code: `<` or `<`\\n- Escape it: `\\\\<` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Bad usage of GFM Autolink\\n\\nDocusaurus supports [GitHub Flavored Markdown (GFM)](https://github.github.com/gfm/), but [autolink](https://github.github.com/gfm/#autolinks) using the `<link>` syntax is not supported anymore by MDX.\\n\\n```md title=\\"example.md\\"\\n<sebastien@thisweekinreact.com>\\n\\n<http://localhost:3000>\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `@` (U+0040) in name, expected a name character such as letters, digits, `$`, or `_`; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use `[text](url)`)\\n\\n> Unexpected character `/` (U+002F) before local name, expected a character that can start a name, such as a letter, `$`, or `_` (note: to create a link in MDX, use `[text](url)`)\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse regular Markdown links, or remove the `<` and `>`. MDX and GFM are able to autolink literals already.\\n\\n{/* prettier-ignore */}\\n```md title=\\"example.md\\"\\nsebastien@thisweekinreact.com\\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\\n\\nhttp://localhost:3000\\n[http://localhost:3000](http://localhost:3000)\\n```\\n\\n:::\\n\\n#### Lower-case MDXComponent mapping\\n\\nFor users providing a [custom `MDXComponent`mapping](/docs/markdown-features/react#mdx-component-scope), components are now \\"sandboxed\\":\\n\\n- a `MDXComponent` mapping for `h1` only gets used for `# hi` but not for `<h1>hi</h1>`\\n- a **lower-cased** custom element name will not be substituted by its respective `MDXComponent` component anymore\\n\\n:::danger visual difference\\n\\nYour [`MDXComponent` component mapping](/docs/markdown-features/react#mdx-component-scope) might not be applied as before, and your custom components might no longer be used.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nFor native Markdown elements, you can keep using **lower-case**: `p`, `h1`, `img`, `a`...\\n\\nFor any other element, **use upper-case names**.\\n\\n```diff title=\\"src/theme/MDXComponents.js\\"\\n import MDXComponents from \'@theme-original/MDXComponents\';\\n\\n export default {\\n ...MDXComponents,\\n p: (props) => <p {...props} className=\\"my-paragraph\\"/>\\n- myElement: (props) => <div {...props} className=\\"my-class\\" />,\\n+ MyElement: (props) => <div {...props} className=\\"my-class\\" />,\\n };\\n```\\n\\n:::\\n\\n#### Unintended extra paragraphs\\n\\nIn MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected `<p>` tags.\\n\\n:::danger visual difference\\n\\nSee how this content is rendered differently by MDX v1 and v3.\\n\\n```md title=\\"example.md\\"\\n<div>Some **Markdown** content</div>\\n<div>\\n Some **Markdown** content\\n</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v1 output\\"\\n<div>Some **Markdown** content</div>\\n<div>Some **Markdown** content</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v3 output\\"\\n<div>Some <strong>Markdown</strong> content</div>\\n<div><p>Some <strong>Markdown</strong> content</p></div>\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you don\'t want an extra `<p>` tag, refactor content on a case by case basis to use a single-line JSX tag.\\n\\n```diff\\n <figure>\\n <img src=\\"/img/myImage.png\\" alt=\\"My alt\\" />\\n- <figcaption>\\n- My image caption\\n- </figcaption>\\n+ <figcaption>My image caption</figcaption>\\n </figure>\\n```\\n\\nIf your content contains \\"Markdown inlines\\" (`**`, `*`, `_`, `[link](/path)`), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.\\n\\n:::\\n\\n#### Unintended usage of directives\\n\\nDocusaurus v3 now uses [Markdown Directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) (implemented with [remark-directive](https://github.com/remarkjs/remark-directive)) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.\\n\\n```md title=\\"example.md\\"\\nThis is a :textDirective\\n\\n::leafDirective\\n\\n:::containerDirective\\n\\nContainer directive content\\n\\n:::\\n```\\n\\n:::danger Visual change\\n\\nDirectives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won\'t be rendered back in their original form.\\n\\n```md title=\\"example.md\\"\\nThe AWS re:Invent conf is great\\n```\\n\\nDue to `:Invent` being parsed as a text directive, this will now be rendered as:\\n\\n```\\nThe AWS re\\nconf is great\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\n- Use the HTML code: `:`\\n- Add a space after `:` (if it makes sense): `: text`\\n- Escape it: `\\\\:` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Unsupported indented code blocks\\n\\nMDX does not transform indented text as code blocks anymore.\\n\\n```md title=\\"example.md\\"\\n console.log(\\"hello\\");\\n```\\n\\n:::danger Visual change\\n\\nThe upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn\'t a code block anymore.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse the regular code block syntax instead of indentation:\\n\\n````md title=\\"example.md\\"\\n```js\\nconsole.log(\'hello\');\\n```\\n````\\n\\n:::\\n\\n### MDX plugins\\n\\nAll the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now [**ES Modules only**](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and do not support [CommonJS](https://nodejs.org/api/modules.html#modules-commonjs-modules) anymore.\\n\\nIn practice this means that you can\'t do `require(\\"remark-plugin\\")` anymore.\\n\\n:::tip How to prepare\\n\\nDocusaurus v3 now supports [**ES Modules**](https://flaviocopes.com/es-modules/) configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:\\n\\n```js title=\\"docusaurus.config.js\\"\\nimport remarkPlugin from \'remark-plugin\';\\n\\nexport default {\\n title: \'Docusaurus\',\\n /* site config using remark plugins here */\\n};\\n```\\n\\nIf you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the [Docusaurus config supports the usage of an async function](/docs/configuration#syntax-to-declare-docusaurus-config) to let you do so.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = async function () {\\n const myPlugin = (await import(\'remark-plugin\')).default;\\n return {\\n // site config...\\n };\\n};\\n```\\n\\n:::\\n\\n:::info For plugin authors\\n\\nIf you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a [dedicated support discussion](https://github.com/facebook/docusaurus/discussions/9337) to help plugin authors upgrade their code.\\n\\n:::\\n\\n## Other breaking changes\\n\\nApart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.\\n\\n### Node.js 18.0\\n\\nNode.js 16 [reached End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol), and Docusaurus v3 now requires **Node.js >= 18.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### React 18.0\\n\\nDocusaurus v3 now requires **React >= 18.0**.\\n\\nReact 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.\\n\\nSimple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.\\n\\n:::tip How to prepare\\n\\nRead the official [React v18.0](https://react.dev/blog/2022/03/29/react-v18) and [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), and look at your first-party React code to figure out which components might be affected this React 18 upgrade.\\n\\nWe recommend to particularly look for:\\n\\n- Automatic batching for stateful components\\n- New React hydration errors reported to the console\\n\\n:::\\n\\n### TypeScript 5.0\\n\\nDocusaurus v3 now requires **TypeScript >= 5.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### TypeScript base config\\n\\nThe official Docusaurus TypeScript config has been re-internalized from the external package [`@tsconfig/docusaurus`](https://www.npmjs.com/package/@tsconfig/docusaurus) to our new monorepo package [`@docusaurus/tsconfig`](https://www.npmjs.com/package/@docusaurus/tsconfig).\\n\\nThis new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.\\n\\n:::tip How to prepare\\n\\nThe new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"devDependencies\\": {\\n- \\"@tsconfig/docusaurus\\": \\"^1.0.7\\",\\n+ \\"@docusaurus/tsconfig\\": \\"^3.0.0-beta.0\\",\\n }\\n }\\n```\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\n:::\\n\\n### Admonition warning\\n\\nFor historical reasons, we support an undocumented admonition `:::warning` that renders with a red color.\\n\\n:::danger Warning\\n\\nThis is a Docusaurus v2 `:::warning` admonition.\\n\\n:::\\n\\nHowever, the color and icon is historically wrong. Docusaurus v3 re-introduces `:::warning` admonition officially, documents it, and fix the color and icon.\\n\\n:::warning\\n\\nThis is a Docusaurus v3 `:::warning` admonition.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you previously used the undocumented `:::warning` admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use `:::danger` instead.\\n\\nDocusaurus v3 also [deprecated the `:::caution`](https://github.com/facebook/docusaurus/pull/9308) admonition. Please refactor `:::caution` (yellow) to either `:::warning` (yellow) or `:::danger` (red).\\n\\n:::\\n\\n### Versioned sidebars\\n\\nThis breaking change will only affect **Docusaurus v2 early adopters** who versioned their docs before `v2.0.0-beta.10` (December 2021).\\n\\nWhen creating version `v1.0.0`, the sidebar file contained a prefix `version-v1.0.0/` that [Docusaurus v3 does not support anymore](https://github.com/facebook/docusaurus/pull/9310).\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"version-v1.0.0/docs\\": [\\n \\"version-v1.0.0/introduction\\",\\n \\"version-v1.0.0/prerequisites\\"\\n ]\\n}\\n```\\n\\n:::tip How to prepare\\n\\nYour Docusaurus v2 site is able to handle the 2 sidebar formats similarly.\\n\\nYou can remove the useless versioned prefix from your versioned sidebars.\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"docs\\": [\\"introduction\\", \\"prerequisites\\"]\\n}\\n```\\n\\n:::\\n\\n## Try Docusaurus v3 today {#try-docusaurus-v3-today}\\n\\nDocusaurus v3 is now [in beta](https://github.com/facebook/docusaurus/discussions/9312), and already used in production by [React-Native](https://reactnative.dev), [Jest](https://jestjs.io), and [our own website](https://docusaurus.io/).\\n\\nWe think this new Docusaurus version is **robust and ready to be deployed in production**. It should be released officially soon, after receiving a positive feedback from early adopters of our community.\\n\\nWe would really appreciate it if you try upgrading and report issues on the [3.0.0-beta.0 release discussion thread](https://github.com/facebook/docusaurus/discussions/9312).\\n\\nFor most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0-beta.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0-beta.0\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n \\"clsx\\": \\"^2.0.0\\",\\n \\"prism-react-renderer\\": \\"^1.3.5\\",\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0-beta.0\\"\\n }\\n }\\n```\\n\\n## Ask for help\\n\\nWe will be there to help you upgrade through the following support channels:\\n\\n- [Docusaurus v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9336)\\n- [Docusaurus v3 - Discord channel #migration-v2-to-v3](https://discord.com/channels/398180168688074762/1154771869094912090)\\n- [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053)\\n- [MDX v3 - Remark/Rehype Plugins Support](https://github.com/facebook/docusaurus/discussions/9337)\\n- [MDX v3 - Discord channel #migration-mdx-v3](https://discord.com/channels/398180168688074762/1116724556976111616)\\n\\nAlternatively, you can look for a paid [Docusaurus Service Provider](https://github.com/facebook/docusaurus/discussions/9281) to execute this upgrade for you. If your site is open source, you can also ask our community for [free, benevolent help](https://github.com/facebook/docusaurus/discussions/9283).\\n\\n## Conclusion\\n\\nDocusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.\\n\\nThe initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."},{"id":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","metadata":{"permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","source":"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","title":"Upgrading frontend dependencies with confidence","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","date":"2023-09-22T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":8.355,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"authors":["slorber"],"tags":["release"],"slug":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"},"nextItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"}},"content":"Frontend developers often need to **upgrade npm dependencies**, but those upgrades can feel scary and lead to **subtle UI side effects** not caught by your regular test suite.\\n\\nUpgrading Docusaurus is a good example: without reviewing all the pages one by one, it\'s hard to be sure there\'s no visual regression. **Docusaurus v3 is around the corner** (currently in [beta](https://github.com/facebook/docusaurus/discussions/9312)), and we would like to help you do this upgrade with confidence.\\n\\nThis article introduces a **visual regression testing** workflow based on [**GitHub Actions**](https://github.com/features/actions), [**Playwright**](https://playwright.dev/), and [**Argos**](https://argos-ci.com/). It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.\\n\\n![Upgrading frontend dependencies with confidence - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nThis workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as [React Native](https://reactnative.dev/), [Jest](https://jestjs.io/), and the [Docusaurus](https://docusaurus.io/) site itself.\\n\\nDocusaurus v3 comes with infrastructure changes and major dependency upgrades such as [MDX v3](https://mdxjs.com/blog/v3/) and [React 18](https://react.dev/blog/2022/03/29/react-v18), which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That\'s why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.\\n\\n## Workflow overview\\n\\nThe general idea is pretty simple:\\n\\n- Build your site in CI with [GitHub Actions](https://github.com/features/actions)\\n- Take screenshots of all `sitemap.xml` pages with [Playwright](https://playwright.dev/)\\n- Upload them to [Argos](https://argos-ci.com/)\\n- Do this for both Git branches `main` and `pr-branch`\\n- Compare the screenshots side-by-side in [Argos](https://argos-ci.com/)\\n\\nArgos will then **report visual differences** found between `main` and `pr-branch` as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.\\n\\n![Argos GitHub commit status](./img/argos-github-status.png)\\n\\n![Argos GitHub PR comment](./img/argos-github-comment.png)\\n\\nArgos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.\\n\\nCheck the [Docusaurus Argos page](https://app.argos-ci.com/meta-open-source/docusaurus) to explore our own website reports.\\n\\nHere is a more concrete example of Argos [reporting a visual regression](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838) found while upgrading the React-Native website:\\n\\n[![Argos GitHub PR comment](./img/argos-react-native-regression.png)](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838)\\n\\n## Workflow implementation\\n\\nThis section will describe the implementation details of each step of the workflow.\\n\\nYou will need to [sign up to Argos](https://app.argos-ci.com/signup) and [connect Argos to your GitHub repository](https://argos-ci.com/docs/github)\\n\\n### Dependencies\\n\\nThis workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:\\n\\n```bash\\nyarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio\\n```\\n\\n### GitHub Action\\n\\nThe GitHub action is responsible for executing the workflow for each Git branch.\\n\\nA minimal workflow could look like:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n\\njobs:\\n take-screenshots:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Check out repository code\\n uses: actions/checkout@v4\\n\\n - name: Use Node.js\\n uses: actions/setup-node@v3\\n with:\\n node-version: current\\n\\n - name: Install dependencies\\n run: yarn install --frozen-lockfile\\n\\n - name: Install Playwright browsers\\n run: yarn playwright install --with-deps chromium\\n\\n - name: Build the website\\n run: yarn docusaurus build\\n\\n - name: Take screenshots with Playwright\\n run: yarn playwright test\\n\\n - name: Upload screenshots to Argos\\n run: yarn argos upload ./screenshots\\n```\\n\\n### Playwright config\\n\\nPlaywright is responsible for taking screenshots of the website previously built locally by the GitHub action.\\n\\nA minimal [Playwright config](https://playwright.dev/docs/test-configuration) could look like:\\n\\n```ts title=\\"playwright.config.ts\\"\\nimport {devices} from \'@playwright/test\';\\nimport type {PlaywrightTestConfig} from \'@playwright/test\';\\n\\nconst config: PlaywrightTestConfig = {\\n webServer: {\\n port: 3000,\\n command: \'yarn docusaurus serve\',\\n },\\n projects: [\\n {\\n name: \'chromium\',\\n use: {\\n ...devices[\'Desktop Chrome\'],\\n },\\n },\\n ],\\n};\\n\\nexport default config;\\n```\\n\\n### Playwright test\\n\\nA Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.\\n\\n```ts title=\\"screenshot.spec.ts\\"\\nimport * as fs from \'fs\';\\nimport {test} from \'@playwright/test\';\\nimport {argosScreenshot} from \'@argos-ci/playwright\';\\nimport {extractSitemapPathnames, pathnameToArgosName} from \'./utils\';\\n\\n// Constants\\nconst siteUrl = \'http://localhost:3000\';\\nconst sitemapPath = \'./build/sitemap.xml\';\\nconst stylesheetPath = \'./screenshot.css\';\\nconst stylesheet = fs.readFileSync(stylesheetPath).toString();\\n\\n// Wait for hydration, requires Docusaurus v2.4.3+\\n// Docusaurus adds a <html data-has-hydrated=\\"true\\"> once hydrated\\n// See https://github.com/facebook/docusaurus/pull/9256\\nfunction waitForDocusaurusHydration() {\\n return document.documentElement.dataset.hasHydrated === \'true\';\\n}\\n\\nfunction screenshotPathname(pathname: string) {\\n test(`pathname ${pathname}`, async ({page}) => {\\n const url = siteUrl + pathname;\\n await page.goto(url);\\n await page.waitForFunction(waitForDocusaurusHydration);\\n await page.addStyleTag({content: stylesheet});\\n await argosScreenshot(page, pathnameToArgosName(pathname));\\n });\\n}\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath);\\n console.log(\'Pathnames to screenshot:\', pathnames);\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n<details>\\n <summary>Why do we take screenshots with Argos instead of Playwright?</summary>\\n\\nArgos has a [Playwright integration](https://argos-ci.com/docs/playwright) that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.\\n\\n</details>\\n\\n<details>\\n<summary>What\'s inside <code>utils.ts</code>?</summary>\\n\\nThis module contains implementation details that we choose to hide for clarity.\\n\\n```ts\\nimport * as cheerio from \'cheerio\';\\nimport * as fs from \'fs\';\\n\\n// Extract a list of pathnames, given a fs path to a sitemap.xml file\\n// Docusaurus generates a build/sitemap.xml file for you!\\nexport function extractSitemapPathnames(sitemapPath: string): string[] {\\n const sitemap = fs.readFileSync(sitemapPath).toString();\\n const $ = cheerio.load(sitemap, {xmlMode: true});\\n const urls: string[] = [];\\n $(\'loc\').each(function handleLoc() {\\n urls.push($(this).text());\\n });\\n return urls.map((url) => new URL(url).pathname);\\n}\\n\\n// Converts a pathname to a decent screenshot name\\nexport function pathnameToArgosName(pathname: string): string {\\n return pathname.replace(/^\\\\/|\\\\/$/g, \'\') || \'index\';\\n}\\n```\\n\\n</details>\\n\\n### Stylesheet\\n\\nScreenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as **false positive** visual regressions.\\n\\nFor this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read [Argos - About flaky tests docs](https://argos-ci.com/docs/about-flaky) for details.\\n\\n```css title=\\"screenshot.css\\"\\n/* Iframes can load lazily */\\niframe,\\n/* Avatars can be flaky due to using external sources: GitHub/Unavatar */\\n.avatar__photo,\\n/* Gifs load lazily and are animated */\\nimg[src$=\'.gif\'],\\n/* Algolia keyboard shortcuts appear with a little delay */\\n.DocSearch-Button-Keys > kbd,\\n/* The live playground preview can often display dates/counters */\\n[class*=\'playgroundPreview\'] {\\n visibility: hidden;\\n}\\n\\n/* Different docs last-update dates can alter layout */\\n.theme-last-updated,\\n/* Mermaid diagrams are rendered client-side and produce layout shifts */\\n.docusaurus-mermaid-container {\\n display: none;\\n}\\n```\\n\\n:::tip prevent layout shifts\\n\\nWe recommend hiding flaky UI elements affecting layout with `display: none;`.\\n\\nFor example, the docs \\"Last Updated on\\" might render on more than 1 line, eventually \\"pushing\\" the rest of your content further down, leading to Argos detecting many different pixels.\\n\\n:::\\n\\n## Example repository\\n\\nThe [slorber/docusaurus-argos-example](https://github.com/slorber/docusaurus-argos-example) repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.\\n\\n[![Docusaurus + Argos monorepo example screenshot](./img/docusaurus-argos-example-repo-screenshot.png)](https://github.com/slorber/docusaurus-argos-example)\\n\\nRelevant pull-requests:\\n\\n- [PR - Set up GitHub Action + Playwright + Argos](https://github.com/slorber/docusaurus-argos-example/pull/1): implements the minimal workflow described above\\n- [PR - Upgrading Docusaurus from v2 to v3](https://github.com/slorber/docusaurus-argos-example/pull/2): shows how Argos caught 3 visual regressions while upgrading\\n\\n:::tip More advanced example?\\n\\nBrowse the Docusaurus repository for a more advanced integration:\\n\\n- [GitHub Action](https://github.com/facebook/docusaurus/blob/main/.github/workflows/argos.yml)\\n- [Playwright + Argos tests](https://github.com/facebook/docusaurus/tree/main/argos)\\n\\n:::\\n\\n## Make it cheap\\n\\nThe tools we choose are implementation details of this visual regression testing workflow.\\n\\nFor Docusaurus, we choose [Argos](https://argos-ci.com/): it works well for us, and offers [free](https://argos-ci.com/pricing) and [open source](https://argos-ci.com/docs/open-source) plans. However, you are free to adopt alternative tools.\\n\\nIn case you don\'t mind storing large screenshots in Git, you can also try the free, self-hosted [Playwright Visual Comparisons](https://playwright.dev/docs/test-snapshots) and browse visual differences with `npx playwright show-report`. However, we found using a dedicated external tool is more convenient.\\n\\nExternal tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.\\n\\n### Limit the number of pathnames\\n\\nThe base setup involves taking a screenshot of every single pathname found in `sitemap.xml`. For large sites, that can lead to a lot of screenshots.\\n\\nYou can decide to filter the pathnames to only take screenshots of the most critical pages.\\n\\nFor the Docusaurus website, do not take screenshots for versioned docs pages:\\n\\n```ts title=\\"screenshot.spec.ts\\"\\n// highlight-start\\nfunction isVersionedDocsPathname(pathname: string): boolean {\\n return pathname.match(/^\\\\/docs\\\\/((\\\\d\\\\.\\\\d\\\\.\\\\d)|(next))\\\\//);\\n}\\n// highlight-end\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath)\\n // highlight-next-line\\n .filter(isVersionedDocsPathname);\\n\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n### Limit the workflow concurrency\\n\\nImplementing [GitHub Actions concurrency groups](https://docs.github.com/en/actions/using-jobs/using-concurrency) will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nconcurrency:\\n group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}\\n cancel-in-progress: true\\n```\\n\\n### Run your workflow conditionally\\n\\nIt\'s not worth running this workflow for every single commit and pull-request.\\n\\nFor example, if someone corrects a typo in your documentation, you probably don\'t want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that\'s a bit expected!\\n\\nFor the Docusaurus website, we only run the workflow for pull-request having the `Argos` label:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n # highlight-start\\n types:\\n - opened\\n - synchronize\\n - reopened\\n - labeled\\n # highlight-end\\n\\njobs:\\n take-screenshots:\\n # highlight-start\\n if: ${{ github.ref_name == \'main\' || (github.event_name == \'pull_request\' && contains(github.event.pull_request.labels.*.name, \'Argos\')) }}\\n # highlight-end\\n runs-on: ubuntu-latest\\n steps:\\n # Your job steps here ...\\n```\\n\\nThere are many options to explore, such as [triggering the workflow manually](https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow) or [only when files matching a specific pattern are modified](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#example-including-paths).\\n\\n## Conclusion\\n\\nI believe **visual regression testing is underused** in the frontend ecosystem.\\n\\nTaking full-page screenshots is a **low-hanging fruit** that is easy to set up and can help you **catch a new class of bugs** that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for **any kind of refactoring** that shouldn\'t change the user interface.\\n\\nSo why not give it a try?\\n\\nHappy hacking!\\n\\n## See also\\n\\nUseful documentation links:\\n\\n- [Playwright - Installation](https://playwright.dev/docs/intro)\\n- [Playwright - Test config guide](https://playwright.dev/docs/test-configuration)\\n- [Playwright - Test config API](https://playwright.dev/docs/api/class-testconfig)\\n- [Argos - Installation](https://argos-ci.com/docs/installation)\\n- [Argos - Use with GitHub Actions](https://argos-ci.com/docs/github-actions)\\n- [Argos - Use with Playwright](https://argos-ci.com/docs/playwright)\\n- [Argos - About flaky tests](https://argos-ci.com/docs/about-flaky)"},{"id":"/releases/2.4","metadata":{"permalink":"/blog/releases/2.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx","source":"@site/blog/releases/2.4/index.mdx","title":"Docusaurus 2.4","description":"We are happy to announce Docusaurus 2.4.","date":"2023-03-23T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.05,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-03-23T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},"nextItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"}},"content":"We are happy to announce **Docusaurus 2.4**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Sidebar item description\\n\\nIn [#8236](https://github.com/facebook/docusaurus/pull/8236), we made it possible to provide a new `description` attribute for docs sidebar items of type `link` and `category`.\\n\\n```tsx title=\\"sidebars.js\\"\\n[\\n {\\n type: \'link\',\\n label: \'Link with description\',\\n href: \'https://docusaurus.io\',\\n // highlight-next-line\\n description: \'Some link description\',\\n },\\n {\\n type: \'category\',\\n label: \'Category with description\',\\n // highlight-next-line\\n description: \'Some category description\',\\n items: [],\\n },\\n];\\n```\\n\\nThese descriptions will be used in category generated index pages.\\n\\n![Show sidebar category generated index with custom descriptions](./img/sidebar-item-description.jpg)\\n\\n### Theme Query String\\n\\nIn [#8708](https://github.com/facebook/docusaurus/pull/8708), we added the possibility to force Docusaurus to initialize itself in `light` or `dark` mode through a new `docusaurus-theme` query-string parameter.\\n\\nThis is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.\\n\\n<IframeWindow url=\\"/docs/?docusaurus-theme=light\\" />\\n<IframeWindow url=\\"/docs/?docusaurus-theme=dark\\" />\\n\\n### Remark plugin npm2yarn upgrade\\n\\nIn [#8690](https://github.com/facebook/docusaurus/pull/8690), we upgraded our Remark plugin [@docusaurus/remark-plugin-npm2yarn](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn) with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.\\n\\n````markdown\\nRun these commands!\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n````\\n\\n<BrowserWindow>\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n\\n</BrowserWindow>\\n\\n### gtag support for multiple tracking IDs\\n\\nIn [#8620](https://github.com/facebook/docusaurus/pull/8620) we added support for the [@docusaurus/plugin-google-gtag](/docs/api/plugins/@docusaurus/plugin-google-gtag) plugin to declare multiple tracking IDs.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n gtag: {\\n trackingID: [\\n // highlight-next-line\\n \'G-<YOUR-NEW-GA4-ID>\',\\n // highlight-next-line\\n \'UA-<YOUR-OLD-UA-ID>\',\\n ],\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n**[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/)** on **July 1, 2023**.\\n\\nDocusaurus users should migrate to Google Analytics 4. Google **does not permit to migrate your existing Universal Analytics data** to your new Google Analytics 4 property.\\n\\nTo preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (`UA-*`) and new one (`G-*`). Refer to the **[dedicated issue](https://github.com/facebook/docusaurus/issues/7221)** for details.\\n\\n:::\\n\\n### Developer Experience\\n\\nIn [#8736](https://github.com/facebook/docusaurus/pull/8736), we improved how we render error messages and added initial support to render the full causal chain of an error (see [ES2022 Error Cause](https://h3manth.com/ES2022/#error-cause)).\\n\\n:::tip\\n\\nTo see it in action, click here: <ErrorBoundaryTestButton cause=\\"Probably undefined is not a function \ud83d\ude04\\"/>\\n\\n:::\\n\\nIn [#8735](https://github.com/facebook/docusaurus/pull/8735) we also made navbar-related error messages clearer to help users understand what they did wrong.\\n\\n![Docusaurus navbar error message screenshot](./img/navbar-error.jpg)\\n\\n### Translations\\n\\nWe made it possible to translate some new elements:\\n\\n- [#8677](https://github.com/facebook/docusaurus/pull/8677) introduces a new `process.env.DOCUSAURUS_CURRENT_LOCALE` (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...\\n- [#8616](https://github.com/facebook/docusaurus/pull/8616) allows to translate the navbar and footer logo alt text\\n\\nWe added default theme translation support for multiple languages:\\n\\n- \ud83c\udded\ud83c\uddfa [#8668](https://github.com/facebook/docusaurus/pull/8668): Hungarian\\n- \ud83c\uddf3\ud83c\uddf4 [#8631](https://github.com/facebook/docusaurus/pull/8631): Norwegian (Bokm\xe5l)\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8674](https://github.com/facebook/docusaurus/pull/8674): respect `prefers-reduced-motion: reduce` media query\\n- [#8712](https://github.com/facebook/docusaurus/pull/8712): use a navbar item of type `docSidebar` in template\\n- [#8801](https://github.com/facebook/docusaurus/pull/8801): allow tabs children to be falsy\\n- [#8757](https://github.com/facebook/docusaurus/pull/8757): make search page react to external query-string changes\\n- [#8803](https://github.com/facebook/docusaurus/pull/8803): fix code block buttons position in RTL\\n- [#8615](https://github.com/facebook/docusaurus/pull/8615): fix color mode toggle when using dark navbar\\n- [#8699](https://github.com/facebook/docusaurus/pull/8699): fix navbar dropdown tab focus bug\\n\\nCheck the **[2.4.0 changelog entry](/changelog/2.4.0)** for an exhaustive list of changes."},{"id":"/releases/2.3","metadata":{"permalink":"/blog/releases/2.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx","source":"@site/blog/releases/2.3/index.mdx","title":"Docusaurus 2.3","description":"We are happy to announce Docusaurus 2.3.","date":"2023-01-27T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.89,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-01-27T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"},"nextItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"}},"content":"We are happy to announce **Docusaurus 2.3**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Google Tag Manager plugin\\n\\nGoogle Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.\\n\\nWe now have a [`@docusaurus/plugin-google-tag-manager`](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/) package that you can use alongside or as an alternative to the existing [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/) (refer to [this doc](https://support.google.com/tagmanager/answer/7582054) to understand when to use which solution).\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/) on **July 1, 2023**, and ask users to migrate to **Google Analytics 4**.\\n\\nTherefore, we are also **deprecating our existing [`@docusaurus/plugin-google-analytics`](/docs/api/plugins/@docusaurus/plugin-google-analytics)** package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/), or the [Google Tag Manager plugin](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/). Refer to the [dedicated Docusaurus issue](https://github.com/facebook/docusaurus/issues/7221) for details and questions.\\n\\n:::\\n\\n### Tabs Query String Support\\n\\nIt is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a `?qs-param=tab-value` search parameter.\\n\\nThis feature allows deep-linking to a specific documentation tab that will pre-selected on page load.\\n\\nWhen used alongside the `groupId` prop, the query string tab value takes precedence over the `localStorage` value.\\n\\nMake sure to check the [documentation](/docs/markdown-features/tabs#query-string) and the demo below to understand how it works:\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n```tsx\\n<Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n</Tabs>\\n```\\n\\n<BrowserWindow>\\n <Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n </Tabs>\\n</BrowserWindow>\\n\\n### Nested admonitions\\n\\nIt is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:\\n\\n```md\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n```\\n\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n\\n### Blog `createFeedItems`\\n\\nA new blog plugin option [`feedOptions.createFeedItems`](/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn) gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\n[\\n \'@docusaurus/preset-classic\',\\n {\\n blog: {\\n feedOptions: {\\n // highlight-start\\n createFeedItems: async (params) => {\\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\\n return defaultCreateFeedItems({\\n // keep only the 10 most recent blog posts in the feed\\n blogPosts: blogPosts.filter((item, index) => index < 10),\\n ...rest,\\n });\\n },\\n // highlight-end\\n },\\n },\\n },\\n];\\n```\\n\\n### Translations\\n\\nWe added or completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf8\ud83c\uddee [#8541](https://github.com/facebook/docusaurus/pull/8541) Slovenian\\n- \ud83c\uddf9\ud83c\uddf7 [#8289](https://github.com/facebook/docusaurus/pull/8289) Turkish\\n- \ud83c\uddee\ud83c\uddf7 [#8406](https://github.com/facebook/docusaurus/pull/8406) Farsi\\n- \ud83c\uddf5\ud83c\uddf1 [#8525](https://github.com/facebook/docusaurus/pull/8525) Polish\\n- \ud83c\udde8\ud83c\uddf3 [#8423](https://github.com/facebook/docusaurus/pull/8423) Chinese\\n- \ud83c\uddf8\ud83c\uddea [#8312](https://github.com/facebook/docusaurus/pull/8312) Swedish\\n- \ud83c\uddfb\ud83c\uddf3 [#8450](https://github.com/facebook/docusaurus/pull/8450) Vietnamese\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8463](https://github.com/facebook/docusaurus/pull/8463) and [#8328](https://github.com/facebook/docusaurus/pull/8328): fix some annoying Docusaurus layout issues\\n- [#8539](https://github.com/facebook/docusaurus/pull/8539): Algolia plugin `options.searchPagePath` should be correctly applied to search modal footer\\n- [#8462](https://github.com/facebook/docusaurus/pull/8462): Algolia plugin now makes it easier to transform displayed search results with custom logic\\n- [#8397](https://github.com/facebook/docusaurus/pull/8397): the `deploy` CLI now understands git url `insteadOf` config\\n\\nCheck the **[2.3.0 changelog entry](/changelog/2.3.0)** for an exhaustive list of changes."},{"id":"/releases/2.2","metadata":{"permalink":"/blog/releases/2.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx","source":"@site/blog/releases/2.2/index.mdx","title":"Docusaurus 2.2","description":"We are happy to announce Docusaurus 2.2.","date":"2022-10-29T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.2,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2022-10-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"},"nextItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"}},"content":"We are happy to announce **Docusaurus 2.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n## Highlights\\n\\n### Mermaid diagrams\\n\\nIn [#7490](https://github.com/facebook/docusaurus/pull/7490), we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also [added support recently](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/). You can create Mermaid diagrams using Markdown code blocks:\\n\\n````md\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n````\\n\\n````mdx-code-block\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\n\\n<BrowserWindow>\\n\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n\\n</BrowserWindow>\\n\\n````\\n\\nMake sure to check the [documentation](/docs/markdown-features/diagrams), and the [more advanced examples](/tests/pages/diagrams)\\n\\n### Config `headTags`\\n\\nIn [#8151](https://github.com/facebook/docusaurus/pull/8151), we added the ability to apply arbitrary HTML `<head>` tags to all pages of your site.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n headTags: [\\n {\\n tagName: \'link\',\\n attributes: {\\n rel: \'icon\',\\n href: \'/img/docusaurus.png\',\\n },\\n },\\n ],\\n};\\n```\\n\\n### Accessibility\\n\\nWe did several accessibility improvements:\\n\\n- [#8207](https://github.com/facebook/docusaurus/pull/8207): improves keyboard navigation for mobile drawer hamburger button\\n- [#8161](https://github.com/facebook/docusaurus/pull/8161): improves keyboard navigation for tabs\\n- [#8204](https://github.com/facebook/docusaurus/pull/8204): makes the skip to content button support progressive enhancement\\n- [#8174](https://github.com/facebook/docusaurus/pull/8174): improves screen reader announcement when toggling between light/dark mode\\n\\n### Developer Experience\\n\\nWe made validation stricter and improved error messages:\\n\\n- [#8234](https://github.com/facebook/docusaurus/pull/8234): in case of doc processing failure, prints the problematic markdown file path in the error message\\n- [#8192](https://github.com/facebook/docusaurus/pull/8192) and [#8159](https://github.com/facebook/docusaurus/pull/8159): validates `siteConfig.url` more strictly and with better error message\\n- [#8066](https://github.com/facebook/docusaurus/pull/8066): makes config `url` and `baseUrl` fail-safe and less sensitive to the presence or absence of a leading or trailing slash\\n\\n### Translations\\n\\nWe completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf9\ud83c\uddf7 [#8105](https://github.com/facebook/docusaurus/pull/8105): completes Turkish translations\\n- \ud83c\uddf7\ud83c\uddfa [#8253](https://github.com/facebook/docusaurus/pull/8253): completes Russian translations\\n- \ud83c\uddeb\ud83c\uddf7 [#8243](https://github.com/facebook/docusaurus/pull/8243): completes French translations\\n- \ud83c\uddef\ud83c\uddf5 [#8075](https://github.com/facebook/docusaurus/pull/8075): completes Japanese translations\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8210](https://github.com/facebook/docusaurus/pull/8210): the `docusaurus swizzle` CLI has a new `--config` option\\n- [#8109](https://github.com/facebook/docusaurus/pull/8109): mobile navigation performance optimizations, prefetch resources earlier\\n- [#8059](https://github.com/facebook/docusaurus/pull/8059): versions/locales navbar dropdowns preserve hash and querystring on navigation\\n- [#8227](https://github.com/facebook/docusaurus/pull/8227): the client redirect plugin preserves hash and querystring on redirect\\n\\nCheck the **[2.2.0 changelog entry](/changelog/2.2.0)** for an exhaustive list of changes."},{"id":"/2022/09/01/docusaurus-2.1","metadata":{"permalink":"/blog/2022/09/01/docusaurus-2.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx","source":"@site/blog/2022/09-01-docusaurus-2.1/index.mdx","title":"Docusaurus 2.1","description":"We are happy to announce Docusaurus 2.1, our very first minor version release.","date":"2022-09-01T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"},"nextItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"}},"content":"We are happy to announce **Docusaurus 2.1**, our very first minor version release.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.1 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### DocCardList improvements\\n\\nIn [#8008](https://github.com/facebook/docusaurus/pull/8008), we simplified the usage of the`<DocCardList>` component, that is notably used on sidebar category generated index pages.\\n\\nThe `items` prop is now optional, and will be automatically inferred from the content of the parent sidebar category:\\n\\n```diff\\nimport DocCardList from \'@theme/DocCardList\';\\n- import {useCurrentSidebarCategory} from \'@docusaurus/theme-common\';\\n\\n- <DocCardList items={useCurrentSidebarCategory().items}/>\\n+ <DocCardList/>\\n```\\n\\nAlso, we made it possible to use it on any document, including regular docs not linked to any sidebar category.\\n\\n![simplified DocCardList component](./img/doc-card-list.png)\\n\\n### `noindex` improvements\\n\\nWe improved the support of the [`noindex` meta `robots` directive](https://developers.google.com/search/docs/advanced/crawling/block-indexing), a way to signal search engines you don\'t want a specific page to be indexed.\\n\\nIn [#7963](https://github.com/facebook/docusaurus/pull/7963), we allow `noindex` to be configured on a per-docs-version basis.\\n\\nUse the following plugin options to tell crawlers you don\'t want the `1.0.0` version to be indexed:\\n\\n```jsx\\nconst options = {\\n versions: {\\n \'1.0.0\': {\\n noIndex: true,\\n },\\n },\\n};\\n```\\n\\nIn practice, Docusaurus will add the following meta to each page of that version:\\n\\n```html\\n<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />\\n```\\n\\nIn [#7964](https://github.com/facebook/docusaurus/pull/7964), we also fixed a bug where the sitemap plugin would still contain pages that have a `noindex` directive. Now the sitemap plugin will reliably filter out all the pages containing `noindex` directives.\\n\\n### Overriding default meta tags\\n\\nIn [#7952](https://github.com/facebook/docusaurus/pull/7952), it becomes possible to override default html meta tags you couldn\'t before:\\n\\n```jsx\\n<>\\n {siteConfig.noIndex && <meta name=\\"robots\\" content=\\"nofollow, noindex\\" />}\\n <meta name=\\"viewport\\" content=\\"width=device-width, initial-scale=1.0\\" />\\n</>\\n```\\n\\nIt is now possible to use `<Head>` or `themeConfig.metadata`:\\n\\n- to override the `viewport` meta\\n- to override the `robots` meta: you could mark your site as `noIndex`, but except for specific pages that should be indexed\\n\\n### Ukrainian translations\\n\\nIn [#7953](https://github.com/facebook/docusaurus/pull/7953), we added default classic theme translations for the Ukrainian language.\\n\\n## Other changes\\n\\nCheck the [2.1.0 changelog entry](/changelog/2.1.0) for an exhaustive list of changes."},{"id":"/2022/08/01/announcing-docusaurus-2.0","metadata":{"permalink":"/blog/2022/08/01/announcing-docusaurus-2.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","source":"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","title":"Announcing Docusaurus 2.0","description":"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f","date":"2022-08-01T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":12.075,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://x.com/zpao","page":{"permalink":"/blog/authors/zpao"},"socials":{"x":"https://x.com/zpao","github":"https://github.com/zpao"},"imageURL":"https://github.com/zpao.png","key":"zpao"},{"name":"Joel Marcey","title":"Co-creator of Docusaurus 1","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Announcing Docusaurus 2.0","authors":["slorber","Josh-Cena","yangshun","lex111","zpao",{"key":"JMarcey","title":"Co-creator of Docusaurus 1"}],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"},"nextItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"}},"content":"```mdx-code-block\\nimport LiteYouTubeEmbed from \'react-lite-youtube-embed\';\\nimport \'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css\';\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport ProductHuntCard from \'@site/src/components/ProductHuntCard\';\\nimport HackerNewsIcon from \'@site/src/components/HackerNewsIcon\';\\nimport ColorModeToggle from \'@theme/Navbar/ColorModeToggle\';\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\nimport ThemedImage from \'@theme/ThemedImage\';\\nimport {ShowcaseCarouselV1, ShowcaseCarouselV2, ShowcaseCarouselV2Theming} from \'./ShowcaseCarousel\';\\n```\\n\\nToday we are extremely happy to finally **announce Docusaurus 2.0**! \ud83e\udd73\ufe0f\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nAfter **4 years of work, [75 alphas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75) and [22 betas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22)**, the next generation of Docusaurus is **ready for prime time**. From now on, we now plan to **respect [Semantic Versioning](https://semver.org/)** and will release **major versions more frequently**.\\n\\n![social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n**Now** is the best time to show your love for Docusaurus!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n:::tip\\n\\nIn a hurry? Check [what\'s new in Docusaurus 2.0](#whats-new-in-20)!\\n\\n:::\\n\\n## What is Docusaurus exactly?\\n\\nDocusaurus is a **static site generator** that helps you ship **beautiful documentation websites** in **no time**.\\n\\nFocus on your content: just write **Markdown files**. Docusaurus will generate an optimized **website** for you that\'s easy to **host anywhere**.\\n\\nDocusaurus is **full-featured** and very **flexible**: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to **adapt the UI to match your branding** so that it integrates nicely with your main website or documentation portal. Its usage of **React** enables a **modern client-side navigation**, and the ability to build an **interactive documentation**.\\n\\n![Introducing Slash](/img/slash-introducing.svg)\\n\\nThe Docusaurus philosophy is akin to the **Pareto principle**: you can get **80% of the results** for **20% of the effort**. This enables you to compete with top-notch documentation sites with **minimal effort**.\\n\\n<TweetQuote\\n url=\\"https://twitter.com/rachelnabors/status/1452697991039660038\\"\\n handle=\\"rachelnabors\\"\\n name=\\"Rachel Nabors\\"\\n job=\\"Former ReactJS & React-Native docs manager\\">\\n Unless you\'re spinning up a documentation team with engineering resources, you\\n probably want Docusaurus!\\n</TweetQuote>\\n\\nDocusaurus aims to be the **best documentation tool**, but you can use it for **other use-cases** as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!\\n\\n<TweetQuote\\n url=\\"https://twitter.com/johnny_reilly/status/1551861926334025728\\"\\n handle=\\"johnny_reilly\\"\\n name=\\"Johnny Reilly\\"\\n job=\\"Group Principal Engineer at Investec\\">\\n Using Docusaurus for my tech blog has been a fantastic choice. It looks\\n tremendous out-of-the-box and the awesome DX means I write way more\\n</TweetQuote>\\n\\n:::tip\\n\\nTry Docusaurus now with our [online playgrounds](/docs/playground) and [5 minutes tutorial](https://tutorial.docusaurus.io/) \u23f1\ufe0f\\n\\n:::\\n\\n## The story behind Docusaurus\\n\\nDocusaurus was created at **Facebook Open Source** in **2017** (now [Meta Open Source](https://opensource.fb.com/)). We had a lot of internal and open source projects to document. It\'s **complicated enough to write good documentation**, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to **focus on the content**, and **Markdown** is great for that.\\n\\nAt that time, our solution was to **copy/paste a Jekyll template** over and over again. This naturally became **hard to maintain**, so we created a tool to **solve our own pain** once for all.\\n\\n**[Docusaurus v1 was born](/blog/2017/12-14-introducing-docusaurus.mdx)!**\\n\\n![Birth of Slash](/img/slash-birth.png)\\n\\nIt quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as [Prettier](https://prettier.io/), [Babel](https://babeljs.io/), [React-Native](https://archive.reactnative.dev/), [KaTeX](https://katex.org/docs/), and of course [Docusaurus v1](http://v1.docusaurus.io/) itself.\\n\\n<ShowcaseCarouselV1 />\\n\\n<br />\\n\\n:::note\\n\\nNotice that the sample sites above use different colors, but still look quite the same.\\n\\n:::\\n\\n## Toward Docusaurus 2.0\\n\\n[**Docusaurus v1**](http://v1.docusaurus.io/) has been very successful, but we started to **question some architectural choices**:\\n\\n- React was only used as a **server-side templating language**, and not used on the client\\n- **Theming system was pretty limited**, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations\\n- The **docs versioning system was confusing**, since it was based on a diff algorithm\\n- The codebase was **monolithic**, neither well-tested nor easy to extend\\n\\n[**Docusaurus v2**](https://docusaurus.io/) was **rebuilt** from the ground up with a new **modular architecture**:\\n\\n- React is now also used on the client, enabling a **modern Single Page Application navigation**\\n- **Plugins** empower the community to contribute useful features as third-party packages\\n- **Theming** is more **flexible** than ever\\n- Docs versioning is now based on snapshot copies, much easier to understand\\n- We kept **everything good from v1**: docs, blog, pages, versioning, i18n...\\n- We implemented **several new features**\\n\\nMore details in the [Docusaurus 2 project announcement](/blog/2018/09-11-Towards-Docusaurus-2.mdx) and [v1 to v2 migration guide](https://docusaurus.io/docs/migration)\\n\\n## Who uses Docusaurus 2.0?\\n\\nDespite being in pre-release, it didn\'t take long for **Docusaurus v2 to outgrow Docusaurus v1** in terms of NPM downloads:\\n\\n[![NPM downloads: v2 outgrows v1](./img/npm-downloads.png)](https://npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nOur GitHub star trend is very positive, competing with major frameworks:\\n\\n[![GitHub stars: Docusaurus is well-positioned](./img/star-history.png)](https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline)\\n\\nToday, Docusaurus v2 has already been a great success even before its launch:\\n\\n- We received so many [lovely testimonials](https://twitter.com/sebastienlorber/timelines/1392048416872706049)\\n- Companies like [1Password](https://blog.1password.com/docusaurus-documentation-framework/) and [Courier](https://www.courier.com/blog/how-we-built-our-documentation/) are writing down their positive experience\\n- Our [site showcase](/showcase) references hundreds of sites, and this is only the tip of the iceberg.\\n\\n<ShowcaseCarouselV2 />\\n\\n<br />\\n\\n:::tip\\n\\nPlease add your site to our [site showcase](/showcase)! It only takes a few seconds: just [post a comment here](https://github.com/facebook/docusaurus/discussions/7826).\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/maxlynch/status/1549415692704825346\\"\\n handle=\\"maxlynch\\"\\n name=\\"Max Lynch\\"\\n job=\\"Ionic co-founder and CEO\\">\\n We use Docusaurus everywhere now and love it\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/supabase/status/1328960757149671425\\"\\n handle=\\"supabase\\"\\n name=\\"Supabase\\"\\n job=\\"Open Source Firebase alternative\\">\\n We\'ve been using V2 since January and it has been great\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/gabrielcsapo/status/1415061312917233665\\"\\n handle=\\"gabrielcsapo\\"\\n name=\\"Gabriel Csapo\\"\\n job=\\"Staff Software Engineer at LinkedIn\\">\\n Docusaurus is next level easy for literally everything you would need for\\n documentation in your project.\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/ItWasMattGregg/status/1526682295075102721\\"\\n handle=\\"ItWasMattGregg\\"\\n name=\\"Matt Gregg\\"\\n job=\\"Senior Front End Developer at Shopify\\">\\n Docusaurus is awesome. We use it\\n</TweetQuote>\\n\\n## What\'s New in 2.0?\\n\\nIt would be difficult to describe every single new feature coming with Docusaurus v2. Let\'s focus on the features we believe are the **most impactful**.\\n\\n### MDX\\n\\n[MDX](https://github.com/mdx-js/mdx) allows you to **interleave React components** in Markdown. This enables you to build top-notch **interactive documentation experiences** very easily.\\n\\nA demo is worth a thousand words:\\n\\n```md title=\\"docs/my-document.mdx\\"\\n### Give it a try: press that button!\\n\\nimport ColorModeToggle from \'@theme/ColorModeToggle\';\\n\\n<ColorModeToggle/>\\n```\\n\\n```mdx-code-block\\n<BrowserWindow>\\n\\n<h3>Give it a try: press that button!</h3>\\n\\n<ColorModeToggle/>\\n\\n</BrowserWindow>\\n```\\n\\n:::info\\n\\nMDX has its own [plugin system](https://mdxjs.com/docs/extending-mdx/). You to customize your Markdown authoring experience, and even create your own Markdown syntax.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/HamelHusain/status/1551962275250053123\\"\\n handle=\\"HamelHusain\\"\\n name=\\"Hamel Husain\\"\\n job=\\"Head Of Data Science at Outerbounds\\">\\n Docusaurus + MDX is great: we were able to implement a beautiful two-pane\\n layout and give the author fine-grained control on the placement of code and\\n corresponding prose.\\n</TweetQuote>\\n\\n### File system conventions\\n\\nOur goal is to make Docusaurus very **intuitive** to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.\\n\\n<LiteYouTubeEmbed\\n id=\\"T3S8GyFIXjo\\"\\n params=\\"autoplay=1&autohide=1&showinfo=0&rel=0\\"\\n title=\\"Explain Like I\'m 5: Docusaurus\\"\\n poster=\\"maxresdefault\\"\\n webp\\n/>\\n\\n<br />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/paularmstrong/status/1552005085168865281\\"\\n handle=\\"paularmstrong\\"\\n name=\\"Paul Armstrong\\"\\n job=\\"Principal Engineer at Microsoft\\">\\n Using the auto-generated sidebars makes it so simple to just create a page and\\n not worry about any other configuration.\\n</TweetQuote>\\n\\n### Plugins\\n\\nDocusaurus now has a **modular architecture** with a plugin system \u2014 our **core features** like docs, blog, pages, and search are all powered by individual plugins.\\n\\nMore importantly, it enables our community to **enhance Docusaurus** with additional features.\\n\\nLet\'s highlight some examples:\\n\\n- [redocusaurus](https://github.com/rohit-gohri/redocusaurus): seamless integration with [OpenAPI](https://www.openapis.org/) and [Redoc](https://github.com/Redocly/redoc)\\n\\n![redocusaurus plugin example](./img/plugins/redocusaurus.png)\\n\\n- [docusaurus-preset-shiki-twoslash](https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash): use [Shiki](https://github.com/shikijs/shiki) code block syntax highlighting with [TwoSlash](https://shikijs.github.io/twoslash/) TypeScript compiler hints\\n\\n![shiki-twoslash plugin example](./img/plugins/shiki-twoslash.png)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/orta\\"\\n handle=\\"orta\\"\\n name=\\"Orta Therox\\"\\n job=\\"Former TypeScript core team at Microsoft\\">\\n The plugin API was a breeze to use, and powerful enough that I could port the\\n code sample renderer from the TypeScript website site in a couple of hours.\\n</TweetQuote>\\n\\n- [docusaurus-search-local](https://github.com/easyops-cn/docusaurus-search-local): one of the various local search alternatives to the built-in Algolia plugin\\n\\n![local search plugin example](./img/plugins/search.png)\\n\\n:::tip\\n\\nWe have a curated list of outstanding plugins in our [community resources](/community/resources) page.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/jodyheavener/status/1551974535452311552\\"\\n handle=\\"jodyheavener\\"\\n name=\\"Jody Heavener\\"\\n job=\\"Senior Developer at 1Password\\">\\n The plugin system in Docusaurus v2 has made expanding 1Password\'s developer\\n portal so easy and fun. Super excited to show you what we\'ve got cooking up.\\n</TweetQuote>\\n\\n### Theming\\n\\nTheming is one of the most important features of Docusaurus: we believe a professional documentation site should **respect your company\'s branding** and create a consistent experience.\\n\\nDocusaurus theming gives a lot of **flexibility** on multiple levels:\\n\\n- Customize CSS variables to adjust colors, fonts, and more\\n- Provide your own CSS stylesheets\\n- Implement your own theme from scratch\\n- **Override any React component** provided by our default theme: we call this [swizzling](https://docusaurus.io/docs/swizzling)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/hung_dev/status/1546918275065741312\\"\\n handle=\\"hung_dev\\"\\n name=\\"\\nHung Viet Nguyen\\"\\n job=\\"Creator of JestPreview\\">\\n I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\\n time. This is super cool since a framework usually needs to sacrifice one for\\n the other.\\n</TweetQuote>\\n\\nThis enables users willing to invest a bit more time on **customizations** to build sites that **look different** from others.\\n\\n<ShowcaseCarouselV2Theming />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/dabit3/status/1382855449813389315\\"\\n handle=\\"dabit3\\"\\n name=\\"Nader Dabit\\"\\n job=\\"Web3 developer, Developer DAO founder\\">\\n So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\\n way that we wanted it to look. No blockers at all.\\n</TweetQuote>\\n\\n### Other features\\n\\nDocusaurus 2 comes with a very long list of useful features:\\n\\n- Theme: dark mode, better UI and UX, flexible `themeConfig` options...\\n- Docs versioning: flexible plugin options to adapt to your workflow\\n- Docs sidebar: collapsible category, category index pages...\\n- Blog: multiple authors, authors map, archive page...\\n- Markdown: tabs, math equations, live code blocks, linking, flexible front matter...\\n- Search: use the new Algolia DocSearch 3 experience\\n- Assets: make it easy to incorporate images and other kinds of files\\n- Internationalization: config options, default theme translations...\\n- Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...\\n- SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...\\n- PWA: add offline support to your site, and make it installable\\n- Fail-fast: strict config validation, detect broken links, and prevent bad production deployments\\n- TypeScript support for config files, plugins, custom pages and theme authors\\n- Playgrounds: assess Docusaurus easily from your browser with [docusaurus.new](https://docusaurus.new)\\n- Canary releases: use the @canary npm tag to use the upcoming release before anyone else\\n- Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working\\n\\n<TweetQuote\\n url=\\"https://twitter.com/alexbdebrie/status/1540010328335032320\\"\\n handle=\\"alexbdebrie\\"\\n name=\\"Alex DeBrie\\"\\n job=\\"AWS Data Hero, author of The DynamoDB Book\\">\\n Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\\n a good bit of configuration without being overwhelming, and the ability to\\n really customize the styling if you\'re braver than I am.\\n</TweetQuote>\\n\\n## Why 2.0 now?\\n\\nMany enthusiastic followers of ours have been curious **why it took us 4 years to release Docusaurus 2.0**, considering the beta is already successful and **widely used in production**.\\n\\nThe reason is that we aim to **respect [Semantic Versioning](https://semver.org/)**, which means we will be incrementing the major version number whenever we release a **breaking change**.\\n\\nIt is important for multiple reasons:\\n\\n- It **guarantees simple minor version upgrades**, as long as you only use the [public API](/community/release-process#public-api-surface)\\n- It follows front-end ecosystem conventions\\n- A new major version is an opportunity to thoroughly document breaking changes\\n- A new major/minor version is an opportunity to communicate new features through a blog post\\n\\nThe problem is that our flexible theming system inherently creates a very **implicit API surface** on which it is **hard to know what is a breaking change** in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our [public API](/community/release-process#public-api-surface), so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.\\n\\n:::info\\n\\nFrom now on, Docusaurus will **release new major versions more frequently**. In practice, you can expect a **new major version every 2 to 4 months**.\\n\\n[Major version numbers are not sacred](https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html), but we still group breaking changes together and avoid releasing major versions too often.\\n\\nCheck our [release process](/community/release-process) documentation for details.\\n\\n:::\\n\\n## What\'s Next?\\n\\n![Slash Up and Running](/img/slash-up-and-running.png)\\n\\nThe work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will **backport retro-compatible changes in Docusaurus 2.x** minor versions to make them available as soon as possible to the community on a stable channel.\\n\\nA sample of the features on our roadmap for the upcoming major versions of Docusaurus:\\n\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- [Improve Markdown infrastructure](https://github.com/facebook/docusaurus/issues/4625)\\n- [Improve theming and swizzle](https://github.com/facebook/docusaurus/issues/6114)\\n- [TailwindCSS theme](https://github.com/facebook/docusaurus/issues/2961)\\n- [Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer](https://github.com/facebook/docusaurus/issues/7227)\\n- [Dynamic navbar: navbar item activation strategies](https://github.com/facebook/docusaurus/issues/4389)\\n- [Custom Social Cards](https://github.com/facebook/docusaurus/issues/2968)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Use Node.js ES Modules](https://github.com/facebook/docusaurus/issues/6520)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n\\n## Thank You\\n\\nWe\'d like to express our gratitude to [all our contributors](https://github.com/facebook/docusaurus/graphs/contributors), including:\\n\\n- The Docusaurus core team: [Alexey Pyltsyn](https://github.com/lex111), [Joshua Chen](https://github.com/Josh-Cena), [S\xe9bastien Lorber](https://github.com/slorber), [Yangshun Tay](https://github.com/yangshun) and all our [former team members](https://docusaurus.io/community/team)\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source\\n- [Paul O\u2019Shannessy](https://github.com/zpao) for supporting the development of all the next versions of Docusaurus at Meta Open Source\\n- [Eric Nakagawa](https://github.com/ericnakagawa) for creating our cutest mascot Slash\\n- [Endilie Yacop Sucipto](https://github.com/endiliey) for his significant [initial work on Docusaurus v2](/blog/2020/01-07-tribute-to-endi.mdx)\\n- [Cl\xe9ment Vannicatte](https://github.com/shortcuts), [Kevin Granger](https://github.com/Shipow) and the whole Algolia team for their support\\n- All the community members for making valuable code contributions, improving our documentation, and answering questions on [Discord](https://discordapp.com/invite/docusaurus)\\n\\nWe\'d like to thank in particular all our **Docusaurus 2.0 early adopters** for assessing its alpha, beta and canary releases, providing a ton of **invaluable feedback**. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.\\n\\nAt [Meta Open Source](https://opensource.fb.com/), Docusaurus is one of our **most successful projects**. We can\'t wait to see all the outstanding documentation websites that you will create! Don\'t forget to **submit them to our [site showcase](/showcase)**!\\n\\n**Now, let your imagination run wild \ud83e\udd2a!**\\n\\n\u2014 Slash\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n\ud83d\ude4f Share your experience using Docusaurus with the community!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n![Slash plushies](./img/slash-plushies.jpg)"},{"id":"/2022/01/24/docusaurus-2021-recap","metadata":{"permalink":"/blog/2022/01/24/docusaurus-2021-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx","source":"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx","title":"Docusaurus 2021 Recap","description":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed 30k stars on GitHub!","date":"2022-01-24T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":6.01,"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"}],"frontMatter":{"title":"Docusaurus 2021 Recap","authors":["Josh-Cena"],"tags":["recap"],"image":"./img/thumbnail.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"},"nextItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"}},"content":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed **30k stars on GitHub**!\\n\\nWe\'ve **reached full feature parity** with v1 after [the release of internationalization](/blog/2021/03-09-releasing-docusaurus-i18n.mdx), [announced our **first beta**](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx), and welcomed **significantly more users** this year.\\n\\nThe **official v2 release** is just around the corner! Follow the [roadmap issue](https://github.com/facebook/docusaurus/issues/6113) for any latest news.\\n\\n![](./img/thumbnail.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\nLet\'s begin by going over a few highlights this year. Remember the [todo-list](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx#whats-next) from half a year ago? Time to take it out again and see how far we\'ve come!\\n\\n- **Internationalization**: officially released four months after its initial landing in late 2020. Seen great success in [many projects](/showcase?tags=i18n)\\n- **Autogenerated sidebars**: no need to maintain a big `sidebars.js` anymore\\n- **Webpack 5**: significantly improved build performance\\n- **Trailing slash config**: seamless integration with any content hosting provider\\n- **Redesigned mobile navigation**: mobile users now enjoy all navigation features as on desktop\\n- **UI improvements**: more accessible quotes, better admonitions, back-to-top button...\\n- **Blog multi-authors**: credit all the amazing contributors that collaborated on one blog post!\\n- **More blog features**: archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time\\n- **Asset collocation**: no need for a bloated static folder anymore: colocate your images with Markdown files\\n- **Sidebar category index pages**: category labels can now be associated with pages, enabling better doc organization\\n\\nOur codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!\\n\\n## Trends\\n\\n### npm\\n\\nDocusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.\\n\\n[![Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There\'s a sharp drop from 90000 to 40000 just before the Jan 2022 line.](./img/npm-trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\n(Ah, the classic Christmas dip...)\\n\\nWe released 18 versions, going from `2.0.0-alpha.71` to `2.0.0-beta.14`. That\'s one release every 20 days!\\n\\n### GitHub\\n\\n- **Stars**: 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!\\n- **Total contributors**: 512 \u2192 773 (+51.0% y/y)\\n- **Dependents**: 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1\\n- **Commits**: 1,187 commits in the past year, averaging 23 commits every week\\n- **Issues**: 619 issues opened, 505 of them eventually resolved\\n- A [**new core team member**](https://github.com/Josh-Cena) (yep, that\'s me \ud83d\ude1d)\\n\\nOur star trend is also very positive. Compared to similar projects, we are **growing at a faster rate**:\\n\\n![Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.](./img/star-history.png)\\n\\nWith an 8.4k increase in stars, we are ranked number 3 in this year\'s [JavaScript rising stars of static site generators](https://risingstars.js.org/2021/en#section-ssg), preceded only by Next.js and Astro.\\n\\n![Docusaurus placing 3rd in the \\"Static Sites\\" ranking list](./img/rising-stars.png)\\n\\n## Featured adoptions\\n\\nOur showcase has welcomed a few new [\\"favorite\\" sites](/showcase?tags=favorite) that showcase the true potential of Docusaurus 2\'s pluggable architecture.\\n\\n- [**IOTA-wiki**](https://wiki.iota.org/)\\n\\n![Iota wiki light mode](./img/iota-light.png#gh-light-mode-only)![Iota wiki dark mode](./img/iota-dark.png#gh-dark-mode-only)\\n\\n- [**Dyte**](https://docs.dyte.io/docs/home/introduction/)\\n\\n![Dyte light mode](./img/dyte-light.png#gh-light-mode-only)![Dyte dark mode](./img/dyte-dark.png#gh-dark-mode-only)\\n\\n- [**Ionic**](https://ionicframework.com/docs)\\n\\n![Ionic light mode](./img/ionic-light.png#gh-light-mode-only)![Ionic dark mode](./img/ionic-dark.png#gh-dark-mode-only)\\n\\n- [**Courier**](https://www.courier.com/docs/)\\n\\n![Courier](./img/courier.png)\\n\\nThe creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to [have it in our showcase](https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx).\\n\\n## Community\\n\\nAs an active moderator on [Discord](https://discord.gg/docusaurus), I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer.\\n\\nWe are constantly mentioned on Twitter with inspirational feedback:\\n\\n> **@docusaurus** is amazing! cant believe it\'s THAT simple to use.\\n\\n> No extra plugins, tooling or compilation steps. It just works out of the box.\\n\\n> I love **@docusaurus**. I couldn\'t have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.\\n\\nAnd we keep every one of them in [our little box](https://twitter.com/sebastienlorber/timelines/1392048416872706049) \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!\\n\\nAs we approach the official release, we are interested in knowing more about what people are doing out there: [plugin authors](https://github.com/facebook/docusaurus/discussions/4025), [creators of customized sites](https://github.com/facebook/docusaurus/discussions/5468), and [all new users](https://github.com/facebook/docusaurus/discussions/4610) \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs.\\n\\n## Going forward\\n\\nIn the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it\'s almost there. We have created a dedicated [milestone](https://github.com/facebook/docusaurus/milestone/15) to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a **more robust theming workflow**, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:\\n\\n- Guidelines on **component organization**. We want the theme components to have the right granularity so when you want to customize a part of your site, there\'s always a component doing just what you need.\\n- Improvements to the **swizzle CLI**. We want users to use it with delight and let it aid you through all possible swizzling scenarios.\\n- Refactoring our **theme APIs**. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.\\n- **Docs**. We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.\\n\\nRead more about plans for Docusaurus 2.0 in this [roadmap issue](https://github.com/facebook/docusaurus/issues/6113). 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!\\n\\nAs the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for [architectural changes in 3.0](https://github.com/facebook/docusaurus/milestone/16)!\\n\\nWith the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.\\n\\nWe\'d like to express our gratitude to [all the contributors in 2021](https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c), including:\\n\\n- The core team: [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://github.com/slorber), [Joshua Chen](https://github.com/Josh-Cena), and [Yangshun Tay](https://github.com/yangshun) for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting its development all along\\n- The Algolia team for helping Docusaurus users [migrate to the new DocSearch](/blog/2021/11-21-algolia-docsearch-migration/index.mdx) and answering search-related questions\\n- All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord\\n\\nSo long, 2021, and let\'s greet a great 2022!"},{"id":"/2021/11/21/algolia-docsearch-migration","metadata":{"permalink":"/blog/2021/11/21/algolia-docsearch-migration","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx","source":"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx","title":"DocSearch migration","description":"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.","date":"2021-11-21T00:00:00.000Z","tags":[{"inline":false,"label":"Search","permalink":"/blog/tags/search"}],"readingTime":2.96,"hasTruncateMarker":true,"authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","socials":{"x":"https://x.com/sh0rtcts","github":"https://github.com/shortcuts"},"imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"DocSearch migration","authors":["shortcuts","slorber"],"tags":["search"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"},"nextItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"}},"content":"[DocSearch](https://docsearch.algolia.com/) is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.\\n\\nDocusaurus site owners should upgrade their configuration with their new credentials **by February 1, 2022**, existing search indexes will be frozen and become read-only after this date.\\n\\n\x3c!--truncate--\x3e\\n\\n## Upgrading your Docusaurus site\\n\\nIn the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.\\n\\nThis email will include a new `appId` and `apiKey` to use in your Docusaurus configuration.\\n\\nThe only things you have to do:\\n\\n- Join the Algolia application (eventually creating a new Algolia account)\\n- Update your site configuration.\\n\\n```js title=\\"docusaurus.config.js\\"\\nconst config = {\\n themeConfig: {\\n algolia: {\\n // highlight-start\\n appId: \'<NEW_APP_ID>\',\\n apiKey: \'<NEW_SEARCH_API_KEY>\',\\n // highlight-end\\n },\\n },\\n};\\n\\nmodule.exports = config;\\n```\\n\\n:::info\\n\\n`appId` is now **required**.\\n\\nThese keys are not secrets and can be added to your Git repository.\\n\\n:::\\n\\n## DocSearch has a new home!\\n\\n### What is DocSearch?\\n\\n[DocSearch](https://docsearch.algolia.com/) is a program created by [Algolia](http://algolia.com/), which offers search to technical documentation of Open Source projects and technical blogs **for free**.\\n\\nYou can [read more here](https://docsearch.algolia.com/docs/what-is-docsearch/), and [apply](https://docsearch.algolia.com/apply) if you\'d like to give it a try!\\n\\n## What is this migration about?\\n\\n### Motivation\\n\\nWith the upcoming stable release of [DocSearch UI](https://docsearch.algolia.com/docs/DocSearch-v3), we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.\\n\\n### What\'s new?\\n\\nDocSearch now leverages the [Algolia Crawler](https://www.algolia.com/products/search-and-discovery/crawler/), which includes a web interface that will allow you to:\\n\\n- Start, schedule and monitor your crawls\\n- Edit your config file from a live editor\\n- Test your results with DocSearch v3\\n\\n![The Algolia crawler front page showing the project\'s overview, such as last complete crawl and indices](./img/crawler-overview.png)\\n\\n![The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.](./img/editor.png)\\n\\nBut also, more Algolia features in **your own Algolia app**:\\n\\n- Team management\\n- Browse and see how your records are indexed in Algolia\\n- Try other Algolia features with free trials\\n\\n![The Algolia index overview page, showing various filters and the details of every single index](./img/index-overview.png)\\n\\n![The Algolia index analytics page, showing trends for total users, total searches, etc.](./img/index-analytics.png)\\n\\nAnd of course, **a lot more, for free**.\\n\\n## FAQ\\n\\n### I\'m using Docusaurus and DocSearch, can I migrate? {#im-using-docusaurus-and-docsearch-can-i-migrate}\\n\\nAt the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you\'ll be contacted as soon as your Algolia app is ready!\\n\\n### Where can I read more about this?\\n\\nWe wrote a small [migration guide](https://docsearch.algolia.com/docs/migrating-from-legacy) but you\'ll have more detailed information in the migration email.\\n\\n### I received the migration email but the invite expired\\n\\nPlease contact us via either [email](mailto:docsearch@algolia.com) or [DocSearch\'s Discord](https://discord.gg/bRTacwYrfX) or on [Docusaurus\'s Discord #algolia channel](https://discordapp.com/invite/docusaurus)\\n\\n### I have feedback!\\n\\nFor any feedback regarding our documentation or the DocSearch UI component, you can open an issue [on our GitHub repository](https://github.com/algolia/docsearch/issues), but also contact us via the methods above.\\n\\n### Can I still run my own DocSearch instance?\\n\\nIn favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved [DocSearch scraper](https://github.com/algolia/docsearch-scraper) and [DocSearch v2](https://github.com/algolia/docsearch/tree/master), but the repositories will still be available and open to pull requests.\\n\\nThe previous documentation (now called `legacy`) remains available as well as our [`run your own`](https://docsearch.algolia.com/docs/legacy/run-your-own) guide."},{"id":"/2021/05/12/announcing-docusaurus-two-beta","metadata":{"permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","source":"@site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","title":"Announcing Docusaurus 2 Beta","description":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.","date":"2021-05-12T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"},{"inline":false,"label":"Beta","permalink":"/blog/tags/beta"}],"readingTime":3.52,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"./img/slorber.png","key":"slorber","image_url":"./img/slorber.png"},{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"title":"Announcing Docusaurus 2 Beta","authors":[{"key":"slorber","image_url":"./img/slorber.png","imageURL":"./img/slorber.png"},"JMarcey","yangshun","lex111"],"tags":["release","beta"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"},"nextItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"}},"content":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first **[Docusaurus 2 beta](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.0)**.\\n\\nWith the announcement of this beta, the team is even more confident that Docusaurus 2 is **ready for mainstream adoption**!\\n\\n![](./img/image_cropped.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus adoption\\n\\n**Don\'t fear the beta tag!**\\n\\nDocusaurus 2 is widely adopted and growing fast:\\n\\n[![Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.](./img/trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nTo get a fuller understanding of the quality of current Docusaurus 2 sites, our new [showcase](https://docusaurus.io/showcase) page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!\\n\\nDon\'t miss our [favorite](https://docusaurus.io/showcase?tags=favorite) sites; they all stand out with something unique:\\n\\n[![A screenshot of the showcase\'s favorites section, with 12 cards each displaying the information and preview of one site](./img/favorites.png)](https://docusaurus.io/showcase?tags=favorite)\\n\\n## Why was Docusaurus v2 in alpha for so long?\\n\\nIt\'s hard to believe that the first alpha release [v2.0.0-alpha.0](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.0) was 2 years ago \ud83d\ude33 , unusually long for a software alpha.\\n\\nAs this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached **feature parity** with Docusaurus 1 with **[i18n](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n)**, and it has been **successfully adopted** by many Docusaurus sites (see [i18n showcase](https://docusaurus.io/showcase?tags=i18n)).\\n\\nWe\'re now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.\\n\\n## What are the goals of the beta?\\n\\nNow that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.\\n\\nIn addition, we will use the beta phase to **improve our theming system**.\\n\\nWe want to make it:\\n\\n- **easier to implement a custom theme**, including for ourselves. We want to provide [multiple official themes](https://github.com/facebook/docusaurus/issues/3522) (including [Tailwind CSS](https://github.com/facebook/docusaurus/issues/2961)) for a long time.\\n\\n- **safer to extend an existing theme**: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.\\n\\nWe will build a better **theming infrastructure** and refactor the classic theme to use it.\\n\\nIf you customize your site, you may find these planned improvements quite valuable.\\n\\n## What\'s new?\\n\\nIn case you missed it, we recently shipped two major improvements:\\n\\n- [Auto-generated sidebars](https://docusaurus.io/docs/sidebar#sidebar-item-autogenerated): no need to maintain a `sidebars.js` file anymore!\\n- [Webpack 5 / PostCSS 8](https://github.com/facebook/docusaurus/issues/4027): persistent caching significantly speeds up **rebuild time**!\\n\\n## What\'s next?\\n\\nShipping the official 2.0 release!\\n\\nTo get there, we will continue to **fix bugs** and implement the **most wanted features**, including:\\n\\n- [Sidebar category index pages](https://github.com/facebook/docusaurus/issues/2643)\\n- [Better mobile navigation UX](https://github.com/facebook/docusaurus/issues/2220)\\n- [Better admonition design](https://github.com/facebookincubator/infima/issues/55)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n- [Fix trailing slashes and relative link issues](https://github.com/facebook/docusaurus/issues/3372)\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018)\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n\\n## Conclusion\\n\\nThis is an exciting time for Docusaurus.\\n\\nWe are inspired by the [positive feedback](https://twitter.com/sebastienlorber/timelines/1392048416872706049) about Docusaurus, and discover new sites online every single day.\\n\\nWe are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.\\n\\nThank you to everyone for reading and to the entire community who supports Docusaurus. \ud83e\udd17"},{"id":"/2021/03/09/releasing-docusaurus-i18n","metadata":{"permalink":"/blog/2021/03/09/releasing-docusaurus-i18n","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx","source":"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx","title":"Releasing Docusaurus i18n","description":"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.","date":"2021-03-09T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"},{"inline":false,"label":"I18n","permalink":"/blog/tags/i-18-n"}],"readingTime":3.445,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Releasing Docusaurus i18n","authors":["slorber"],"tags":["release","i18n"],"image":"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"},"nextItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"}},"content":"Today, we officially release **[Docusaurus 2 i18n](https://docusaurus.io/docs/i18n/introduction)** ([internationalization](https://en.wikipedia.org/wiki/Internationalization_and_localization)), as part of [2.0.0-alpha.71](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71).\\n\\nDocusaurus 2 has now reached **full feature parity with Docusaurus 1**. \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the **first Docusaurus 2 beta** will be released.\\n\\n**We went the extra mile**, and the new i18n support is **even better than in Docusaurus 1**.\\n\\nIn this post, we will present you the **translation workflow**, explain some **design decisions** and **showcase early adopter sites** that just went live: [Jest](https://jestjs.io/), [Redwood](https://learn.redwoodjs.com/), and [Datagit](https://datagit.ir/).\\n\\nWe also **dogfood** the i18n support on the **Docusaurus 2 site itself**, and this post is already available in [English](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n) and [French](https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n)!\\n\\n\x3c!--truncate--\x3e\\n\\n## Translate your site\\n\\nYou can translate a Docusaurus site in **3 simple steps**:\\n\\n1. **Configure**: declare the default locale and alternative locales in `docusaurus.config.js`\\n1. **Translate**: put the translation files at the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n1. **Deploy**: build and deploy your site using a single or multi-domain strategy\\n\\nThe i18n support is **very flexible** and based on the **filesystem**.\\n\\nThe **[i18n tutorial](https://docusaurus.io/docs/i18n/tutorial)** is the best way to get started, and we provide help to use **[Git](https://docusaurus.io/docs/i18n/git)** or **[Crowdin](https://docusaurus.io/docs/i18n/crowdin)**.\\n\\n## Design decisions\\n\\nThe goals of the Docusaurus i18n system are:\\n\\n- **Simple**: just put the translated files in the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n- **Flexible translation workflows**: use Git (monorepo, forks, or submodules), SaaS software, FTP\\n- **Flexible deployment options**: single, multiple domains, or hybrid\\n- **Modular**: allow plugin authors to provide i18n support\\n- **Low-overhead runtime**: documentation is mostly static and does not require a heavy JS library or polyfills\\n- **Scalable build-times**: allow building and deploying localized sites independently\\n- **Localize assets**: an image of your site might contain text that should be translated\\n- **No coupling**: not forced to use any SaaS, yet integrations are possible\\n- **Easy to use with [Crowdin](https://crowdin.com/)**: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2\\n- **Good SEO defaults**: we set useful SEO headers like [`hreflang`](https://developers.google.com/search/docs/advanced/crawling/localized-versions) for you\\n- **RTL support**: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement\\n- **Default translations**: classic theme labels are translated for you in [many languages](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales)\\n\\n## Showcase\\n\\nWe worked with a few volunteers to **dogfood the i18n support** before releasing it.\\n\\n### Jest: upgrading Docusaurus\\n\\nWe have made it possible to **upgrade** a **translated Docusaurus 1 site** to Docusaurus 2.\\n\\n**[Jest](https://jestjs.io)**, using Docusaurus 1 and Crowdin was one of those sites.\\n\\nThe Docusaurus 2 migration was successful and the new site is now deployed in production ([announcement post](https://jestjs.io/blog/2021/03/09/jest-website-upgrade)).\\n\\n[![Jest\'s website front page in Japanese](/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png)](https://jestjs.io)\\n\\n### Redwood: adopting Docusaurus\\n\\n[Redwood](https://redwoodjs.com/) is a React full-stack Jamstack framework.\\n\\nThey were looking for a solution to create an **internationalized learning platform**, and became early adopters of Docusaurus 2 i18n for [learn.redwoodjs.com](https://learn.redwoodjs.com/), using Crowdin to get it translated to French.\\n\\n[![Redwood\'s doc page in French](/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png)](https://learn.redwoodjs.com/)\\n\\n### Datagit: using LTR support\\n\\nThe i18n system should work with any language, including **Right-to-Left languages**.\\n\\n[Datagit.ir](https://datagit.ir/) is using Farsi, and a simple configuration option is able to **flip the Docusaurus theme** to add the required Right-to-Left support.\\n\\n[![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png)](https://datagit.ir/)\\n\\n## Conclusion\\n\\nWe sincerely hope you will adopt and like the new i18n support.\\n\\nThis feature has not been an easy one, and we would like to thank everyone that got involved in this journey:\\n\\n- [Alexey](https://github.com/lex111) for his help to make the i18n support exhaustive and even better than v1\\n- [Simen](https://github.com/SimenB) for volunteering and supporting the Jest migration\\n- [Claire](https://github.com/clairefro) for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks\\n- [Massoud](https://github.com/massoudmaboudi) for reviewing my work on LTR and adopting it on Datagit\\n- [Crowdin](https://crowdin.com/) for their support and willingness to improve their translation SaaS\\n- The Docusaurus community for their patience, and providing many useful feedbacks on GitHub\\n\\nThanks for reading.\\n\\n\ud83d\ude4f And please, add your brand new i18n sites to our [showcase page](https://docusaurus.io/showcase). We accept any all polished Docusaurus site here, and we are working on a [redesign](https://github.com/facebook/docusaurus/issues/4238) allowing you to filter sites by features."},{"id":"/2021/01/19/docusaurus-2020-recap","metadata":{"permalink":"/blog/2021/01/19/docusaurus-2020-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/01-19-docusaurus-2020-recap.mdx","source":"@site/blog/2021/01-19-docusaurus-2020-recap.mdx","title":"Docusaurus 2020 Recap","description":"2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.","date":"2021-01-19T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":5.04,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2020 Recap","authors":["slorber"],"tags":["recap"],"image":"/img/docusaurus-2020-recap.png"},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"},"nextItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"}},"content":"**2020 was great for Docusaurus**, despite [a regrettable start](https://docusaurus.io/blog/2020/01/07/tribute-to-endi) and a tumultuous year for everyone.\\n\\nWe continued to invest in [Docusaurus 2](https://docusaurus.io/), and made it reach **full feature parity** with [Docusaurus 1](https://v1.docusaurus.io/).\\n\\nWe now **recommend Docusaurus 2** as the **default choice** to start a new Docusaurus project and encourage v1 users to [migrate to Docusaurus 2](https://docusaurus.io/docs/migration).\\n\\nWe are **still in alpha**, but expect **some good news very soon**!\\n\\n![Three Docusaurus plushies laid side-by-side on the table](/img/blog/2020-recap/docusaurus-plushie-banner.jpeg)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 highlights\\n\\nWe have worked on many features this year, and would like to highlight the most significant ones:\\n\\n- **i18n**: easily translate your Docusaurus site, released soon! ([preview](https://github.com/facebook/docusaurus/pull/3325), [doc](https://docusaurus.io/docs/next/i18n/introduction))\\n- **Version dropdown**: enable contextual version switch\\n- **Versioning options**: solving the most common pain-points users had with versioning\\n- **Contextual search**: search in the current version, use the brand-new DocSearch 3 experience\\n- **Markdown pages**: use Markdown instead of React components to create standalone pages\\n- **Better theme**: various UI, UX and accessibility improvements\\n- **PWA**: add offline support to your site, and make it installable\\n- **Fail-fast**: strict config validation, detect broken links, and prevent bad production deployments\\n- **Multi-instance**: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)\\n- **Migration CLI**: automate the upgrade from Docusaurus 1\\n- **CodeSandbox**: assess Docusaurus easily from your browser with [new.docusaurus.io](https://new.docusaurus.io/)\\n- **Canary releases**: use the `@canary` npm tag to use the upcoming release before anyone else\\n- **TypeScript**: progressive adoption for internal code, and improve usage for users\\n- **Publish Infima**: it is now [open-source](https://github.com/facebookincubator/infima)\\n\\n## Docusaurus 2 growth\\n\\nThe plan to [rebuild Docusaurus from scratch in 2019](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap) paid off: after a slow start, Docusaurus 2 has been widely adopted and has **already outgrown Docusaurus 1** usage.\\n\\n![Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.](/img/blog/2020-recap/docusaurus-npm-trends.png)\\n\\nNotable **projects, startups, large companies, and individuals** adopted Docusaurus 2 ([showcase](https://docusaurus.io/showcase)):\\n\\n- [Supabase](https://supabase.io)\\n- [React Navigation](https://reactnavigation.org)\\n- [React Redux](https://react-redux.js.org/)\\n- [Vector](https://vector.dev)\\n- [Algolia DocSearch](https://docsearch.algolia.com)\\n- [SAP Cloud SDK](https://sap.github.io/cloud-sdk)\\n- [Palo Alto Cortex XSOAR](https://xsoar.pan.dev)\\n- [Qudd\xfas George\'s website](https://portfoliosaurus.now.sh)\\n\\nWe helped **large scale Docusaurus 1 sites to upgrade**, ensuring a proper **migration path** and **feature parity**.\\n\\n[React Native](https://reactnative.dev/) was successfully upgraded to Docusaurus 2 ([archived v1 site](http://archive.reactnative.dev/)):\\n\\n![React Native\'s new website built with Docusaurus v2](/img/blog/2020-recap/react-native-screenshot.png)\\n\\nLocalized Docusaurus 1 sites (like **Jest**) will be able to upgrade too:\\n\\n![Jest\'s new website built with Docusaurus v2 in Japanese](/img/blog/2020-recap/jest-screenshot.png)\\n\\nWe also saw the **[first right-to-left](https://datagit.ir/)** Docusaurus 2 site published:\\n\\n![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2020-recap/datagit-rtl-screenshot.png)\\n\\n## GitHub Activity\\n\\n- **Stars**: 14632 \u2192 20946 (+43.2% y/y)\\n- **Total Contributors**: 303 \u2192 512 (+68.9% y/y). Most of which are non-Facebook contributors\\n- **Weekly npm Downloads**: 2356 \u2192 25592 (+986% y/y)\\n- **On GitHub**, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)\\n\\n## Collaboration with Major League Hacking\\n\\nWe have welcomed [Major League Hacking](https://mlh.io/) (MLH) fellows for 2 seasons already.\\n\\nWe are very thankful for the **various contributions** they made, such as:\\n\\n- Writing the foundations of the v1 to v2 migration CLI\\n- Help migrate the React Native website from v1 to v2\\n- Making the config validation more strict and exhaustive, returning helpful error messages\\n- Adding CodeSandbox support\\n- Improving the CI pipelines: build size and Lighthouse bots\\n\\nWe look forward to continuing this collaboration in 2021.\\n\\n## Media\\n\\nDmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in [60 seconds](https://www.youtube.com/watch?v=_An9EsKPhp0) or [15min](https://www.youtube.com/watch?v=Yhyx7otSksg) videos.\\n\\nRachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in [React Native Radio 178 (podcast)](https://reactnativeradio.com/episodes/178-documenting-react-native-with-rachel-nabors-gWxwySPl), and William Candillon the [React Native website migration (video)](https://www.youtube.com/watch?v=-zhjq2ECKq4).\\n\\nMany blog posts have been published:\\n\\n- [To the Makers of Docusaurus](https://portfoliosaurus.now.sh/blog/toTheMakers) by Quddus George\\n- [Richer API documentation with Redoc and Docusaurus](https://davidgoss.co/blog/api-documentation-redoc-docusaurus/) by David Goss\\n- [How to Build a Plugin for Docusaurus v2](https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/) by Adriaan Knapen\\n- [React Tracked Documentation Website with Docusaurus v2](https://blog.axlight.com/posts/react-tracked-documentation-website-with-docusaurus-v2/) by Daishi Kato\\n- [Easy documentation with Docusaurus](https://blog.logrocket.com/easy-documentation-with-docusaurus/) by Anshul Goyal (MLH fellow)\\n- [Build Beautiful Documentation Websites with Docusaurus](https://lo-victoria.com/build-beautiful-documentation-websites-with-docusaurus) by Victoria Lo\\n\\n## Community\\n\\nThe Docusaurus community continues to grow, the [Discord](https://discord.gg/docusaurus) server is quite active, and [Stack Overflow questions](https://stackoverflow.com/questions/tagged/docusaurus) keep being posted.\\n\\nThe **modular architecture** of Docusaurus 2 allowed the community to build and publish [third-party plugins](https://docusaurus.io/community/resources#community-plugins-). As we would like to federate better our community, if you are building a plugin, please [let us know](https://github.com/facebook/docusaurus/discussions/4025).\\n\\n## What\'s next?\\n\\nAs the **core features of Docusaurus 2** have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the **beta and release-candidate phase**.\\n\\nWith proper support for **i18n and versioning**, and **large scale migrations** such as **React Native** and **Jest**, we now have a clear migration path for all Docusaurus 1 sites.\\n\\nWe still have a few **major features** that we would like to work on:\\n\\n- [Create a theme gallery](https://github.com/facebook/docusaurus/issues/3522), make it easy to switch from one another, and include **first-class Tailwind support**\\n- [Upgrade to Webpack 5](https://github.com/facebook/docusaurus/issues/4027), improve performances and build times\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018), as MDX and makes it harder for CommonMark-based sites to adopt Docusaurus\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- Other tasks that we might discover during 2021\\n\\nHuge thanks to the community for [their contributions in 2020](https://github.com/facebook/docusaurus/graphs/contributors?from=2020-01-01&to=2021-01-01&type=c), especially:\\n\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting the project all this time\\n- the core team - [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://sebastienlorber.com), [Yangshun Tay](https://twitter.com/yangshunz)\\n- the Major League Hacking and Facebook interns for their significant impact\\n- the Algolia team for DocSearch 3 and their support\\n- [Bartosz Kaszubowski](https://github.com/Simek) for his investment in the React Native migration\\n- the whole community for their contributions, and providing support to each other\\n\\nCheers to a great 2021! \ud83c\udf89"},{"id":"/2020/01/07/tribute-to-endi","metadata":{"permalink":"/blog/2020/01/07/tribute-to-endi","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx","source":"@site/blog/2020/01-07-tribute-to-endi.mdx","title":"Tribute to Endi","description":"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.","date":"2020-01-07T00:00:00.000Z","tags":[{"inline":false,"label":"Endi","permalink":"/blog/tags/endi"},{"inline":false,"label":"Tribute","permalink":"/blog/tags/tribute"}],"readingTime":0.895,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Tribute to Endi","authors":"JMarcey","tags":["endi","tribute"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"},"nextItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"}},"content":"It is with great sadness to announce that our primary external Docusaurus contributor, [Endilie Yacop Sucipto](https://github.com/endiliey) (Endi to those who knew him), [passed away](https://give.asia/campaign/help_endi_beat_cancer#/updates) over the weekend after an illness associated with his bout with cancer.\\n\\n\x3c!--truncate--\x3e\\n\\nIt is impossible to overstate Endi\'s impact on this project:\\n\\n- Docusaurus\' top contributor, [by far](https://github.com/facebook/docusaurus/graphs/contributors).\\n- [Lead developer](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2) on the nearly complete [version 2 of Docusaurus](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap).\\n- Overall passionate advocate of the project on [Twitter](https://twitter.com/endiliey), [Discord](https://discord.gg/docusaurus) and other social media\\n\\nThinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.\\n\\nWe are working on ways to honor Endi\'s contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or [tweet](https://twitter.com/docusaurus) if you have a suggestion.\\n\\nThe Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14\\n\\n![A photo from behind Endi\'s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.](/img/endi.jpg)"},{"id":"/2019/12/30/docusaurus-2019-recap","metadata":{"permalink":"/blog/2019/12/30/docusaurus-2019-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx","source":"@site/blog/2019/12-30-docusaurus-2019-recap.mdx","title":"Docusaurus 2019 Recap","description":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)","date":"2019-12-30T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":2.72,"hasTruncateMarker":true,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"title":"Docusaurus 2019 Recap","authors":"yangshun","tags":["recap"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"},"nextItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"}},"content":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on [Docusaurus 2](https://docusaurus.io/). Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and [migrate](https://docusaurus.io/docs/migration) to it! Otherwise we will work with you to make that happen in 2020 :)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 (D2)\\n\\nIn 2018, we proposed to rebuild [Docusaurus from the ground up](https://github.com/facebook/docusaurus/issues/789). It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of [@endilie](https://github.com/endiliey), our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.\\n\\nD2\'s killer features are **Dark Mode** and its **superb performance**. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.\\n\\nLast but not least, we implemented a plugins architecture and turned the repo into a [Lerna monorepo](https://github.com/facebook/docusaurus/tree/main/packages). We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.\\n\\n## GitHub Activity\\n\\n- Stars: 10050 \u2192 14632 (+45.6% y/y)\\n- Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors\\n- Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November\\n- D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub\\n- We now have 4 active core contributors! (+100% y/y)\\n\\n## Notable Users\\n\\nA good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:\\n\\n- [Create React App](https://create-react-app.dev/)\\n- [Redux](https://redux.js.org/)\\n- [Draft.js](https://draftjs.org/)\\n- [Flux](http://facebook.github.io/flux/)\\n\\nAnd welcomed more projects to Docusaurus 1:\\n\\n- [Libra](https://developers.libra.org/)\\n- [MobX](https://mobx.js.org/)\\n- [Immer](https://immerjs.github.io/immer/)\\n- [Sorbet](https://sorbet.org/)\\n\\n## Media\\n\\nYangshun gave a classroom session during F8 about [Using Docusaurus to Create Open Source Websites](https://www.youtube.com/watch?v=QcGJsf6mgZE).\\n\\n## Community\\n\\nA few third-party hosting/development services also has first-class integration with a Docusaurus setup:\\n\\n- [Vercel deployment](https://github.com/vercel/vercel/tree/main/examples/docusaurus)\\n- [CodeSandbox](https://codesandbox.io/s/docusaurus-template-x3vg9)\\n- [Render](https://render.com/docs/deploy-docusaurus)\\n\\n## Looking Ahead\\n\\nD2 has gained some traction among the [developer community](https://docusaurus.io/showcase). In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!\\n\\nHuge thanks to the community for their contributions, especially the core team - [Endilie Yacop Sucipto](https://github.com/endiliey), [Alexey Pyltsyn](https://github.com/lex111), [Wei Gao](https://github.com/wgao19). Lastly, thank you [Joel Marcey](https://github.com/JoelMarcey) for starting Docusaurus and supporting the project all this time.\\n\\nCheers to a great 2020! \ud83c\udf89"},{"id":"/2018/12/14/Happy-First-Birthday-Slash","metadata":{"permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","source":"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","title":"Happy 1st Birthday Slash!","description":"Docusaurus makes 1 year! Happy Birthday Slash!","date":"2018-12-14T00:00:00.000Z","tags":[{"inline":false,"label":"Birth","permalink":"/blog/tags/birth"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Co-creator of Docusaurus","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Happy 1st Birthday Slash!","authors":[{"key":"JMarcey","title":"Co-creator of Docusaurus"}],"tags":["birth"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"},"nextItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"}},"content":"![Docusaurus makes 1 year! Happy Birthday Slash!](/img/docusaurus-slash-first-birthday.svg)\\n\\nDocusaurus [went live](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) on December 14, 2017. At the time, we had [8 early adopters](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements).\\n\\n\x3c!--truncate--\x3e\\n\\nWe now have nearly [60 known users of Docusaurus](https://v1.docusaurus.io/en/users), and probably more that we don\'t know about. We have [9K GitHub stars](https://github.com/facebook/docusaurus) and an active community, particularly [Yangshun Tay](https://twitter.com/yangshunz) and [Endilie Yacop Sucipto](https://twitter.com/endiliey), both of whom are the lead maintainers helping keep this project [moving forward](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2).\\n\\nThank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.\\n\\n> Special thanks to [Eric Nakagawa](https://twitter.com/ericnakagawa), creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"},{"id":"/2018/09/11/Towards-Docusaurus-2","metadata":{"permalink":"/blog/2018/09/11/Towards-Docusaurus-2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx","source":"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx","title":"Towards Docusaurus 2","description":"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.","date":"2018-09-11T00:00:00.000Z","tags":[{"inline":false,"label":"New","permalink":"/blog/tags/new"},{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption"}],"readingTime":9.25,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null}],"frontMatter":{"title":"Towards Docusaurus 2","authors":"endiliey","tags":["new","adoption"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"},"nextItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"Docusaurus was [officially announced](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as [React Native](https://facebook.github.io/react-native/), [Babel](https://babeljs.io/), [Jest](https://jestjs.io/), [Reason](https://reasonml.github.io/) and [Prettier](https://prettier.io/).\\n\\nThere is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89.\\n\\n\x3c!--truncate--\x3e\\n\\n## Introduction\\n\\nIt all started with this [RFC issue](https://github.com/facebook/docusaurus/issues/789) opened by [Yangshun](https://github.com/yangshun) towards the end of June 2018.\\n\\n<blockquote>\\n <h4>\\n <a href=\\"https://github.com/facebook/docusaurus/issues/789\\">\\n {\'[RFC] Docusaurus v2 \xb7 Issue #789 \xb7 facebook/docusaurus\'}\\n </a>\\n </h4>\\n These are some of the problems I\'m seeing in Docusaurus now and also how we can\\n address them in v2. A number of the ideas here were inspired by VuePress and other\\n static site generators. In the current static site generators ecosystem, t...\\n</blockquote>\\n\\nMost of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.\\n\\n## Infrastructure\\n\\n### Content\\n\\nA Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and `dangerouslySetInnerHTML` \ud83d\ude31.\\n\\nIn addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.\\n\\nFor Docusaurus 2, we will be using [webpack](https://webpack.js.org/) as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, **during build time we will create a server-rendered version of the app** and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by [Gatsby](https://github.com/gatsbyjs/gatsby).\\n\\n### Versioning\\n\\nIf you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs **if and only if** the docs content are **different**.\\n\\nFor example, if we have `docs/hello.md`:\\n\\n```text\\n---\\nid: hello\\ntitle: hello\\n---\\nHello world !\\n```\\n\\nAnd **we cut version 1.0.0,** Docusaurus will create `versioned_docs/version-1.0.0/hello.md`:\\n\\n```text\\n---\\nid: version-1.0.0-hello\\ntitle: hello\\noriginal_id: hello\\n---\\nHello world !\\n```\\n\\nHowever, if there are no changes to `hello.md` when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, `versioned_docs/version-2.0.0/hello.md` will not exist.\\n\\nThis can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit `versioned_docs/version-1.0.0/hello.md` or manually add `versioned_docs/version-2.0.0/hello.md`. This could potentially lead to unwanted bugs. Here is a [real scenario in Jest](https://github.com/facebook/jest/pull/6758#issuecomment-408274413).\\n\\nIn addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where [renaming docs breaks links in old versions](https://github.com/facebook/docusaurus/issues/845).\\n\\nFor Docusaurus 2, **every time we cut a new version, we will instead take a snapshot of all the docs**. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.\\n\\n### Translation\\n\\nDocusaurus allows for easy translation functionality by using [Crowdin](https://crowdin.com/). Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that **English** is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.\\n\\nFor Docusaurus 2, **we will not assume English is the default language**. When a user enables internationalization, they have to set a default language in `siteConfig.js`. We will then assume that all the files in `docs` are written in that language.\\n\\nIn addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.\\n\\n## Customizability\\n\\n### Layout\\n\\nThe current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site\'s appearance to their wishes.\\n\\nFor Docusaurus 2, **layout and styling should be controlled by the user**. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by [create-react-app](https://github.com/facebook/create-react-app) and [VuePress](https://vuepress.vuejs.org/), Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using [React Helmet](https://github.com/nfl/react-helmet). Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.\\n\\n### Markdown\\n\\nOur Markdown parsing is currently powered by [Remarkable](https://github.com/jonschlinkert/remarkable). What if the user wants to use [Markdown-it](https://github.com/Markdown-it/Markdown-it) or even [MDX](https://github.com/mdx-js/mdx)? And then there is an issue of which syntax highlighter to use, (e.g: [Prism](https://prismjs.com/) vs [Highlight.js](https://highlightjs.org/)). We should leave these choices open to the user.\\n\\nFor Docusaurus 2, **users can eject and choose their own Markdown parser**. It does not matter if they want to use another Markdown parser such as [Remark](https://github.com/remarkjs/remark), or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the _RAW string of Markdown_. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we\'re still experimenting with different Markdown parsers.\\n\\n### Search\\n\\nOur core search functionality is based on [Algolia](https://www.algolia.com/). There are requests by users to be able to use different search offerings, such as `lunrjs` for offline search.\\n\\nI personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their `DocSearch` is open source. For example, I recently submitted [this PR that enables DocSearch to scrape alternate languages in sitemap](https://github.com/algolia/docsearch-scraper/pull/387).\\n\\nFor Docusaurus 2, **we will allow users to customize the search box**. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.\\n\\n## Stability\\n\\nSoftware is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.\\n\\nFor Docusaurus 2, **we are adding tests as we develop** since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.\\n\\n## Frequently Asked Questions\\n\\n### Will there be any breaking changes?\\n\\nIf you\'ve read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to **minimize the number of breaking changes** and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a **major rewrite and re-architecting** of the codebase.\\n\\nThe exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in `siteConfig.js` and we plan to keep it as lean as possible. For example, the `cleanUrl` siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the `.html` suffix.\\n\\nOur goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on [Discord](https://discord.gg/docusaurus) or [Twitter](https://twitter.com/docusaurus) for questions and help.\\n\\n### When is the release of Docusaurus 2?\\n\\nAs of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.\\n\\nOne thing that I would like to share is that while Docusaurus is part of [Facebook Open Source](https://opensource.fb.com/) and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at [NTU Singapore](https://twitter.com/NTUsg), so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, **we want to make it as awesome as possible**.\\n\\nFor now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the [public repository](https://github.com/facebook/docusaurus). When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned \ud83d\ude09!\\n\\n## Final Thoughts\\n\\nDocusaurus has had a large impact on the open source community as seen from the [many popular projects](https://v1.docusaurus.io/en/users) which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.\\n\\nDocusaurus\' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.\\n\\nWe also want to let people know that **due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.**\\n\\nIf you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we\'re doing, you can support [Docusaurus on Open Collective](https://opencollective.com/Docusaurus).\\n\\n> If you are sponsoring our work on [Open Collective](https://opencollective.com/Docusaurus), we\'ll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.\\n\\nLastly, if you haven\'t done so already, click the **star** and **watch** button on [GitHub](https://github.com/facebook/docusaurus), and follow us on [Twitter](https://twitter.com/docusaurus)."},{"id":"/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","metadata":{"permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","source":"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","title":"How I Converted Profilo to Docusaurus in Under 2 Hours","description":"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d","date":"2018-04-30T00:00:00.000Z","tags":[{"inline":false,"label":"Profilo","permalink":"/blog/tags/profilo"},{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption"}],"readingTime":5.95,"hasTruncateMarker":true,"authors":[{"name":"Christine Abernathy","url":"http://x.com/abernathyca","socials":{"x":"https://x.com/abernathyca"},"imageURL":"https://github.com/caabernathy.png","key":"abernathyca","page":null}],"frontMatter":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","authors":["abernathyca"],"tags":["profilo","adoption"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"},"nextItem":{"title":"Introducing Docusaurus","permalink":"/blog/2017/12/14/introducing-docusaurus"}},"content":"> _\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d_\\n>\\n> _\u2014 Note sent to the Profilo team_\\n\\nThis is the story of the rather short journey it took to create the [Profilo](https://facebookincubator.github.io/profilo/) website using Docusaurus.\\n\\nProfilo, an Android library for collecting performance traces from production, [was announced](https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/) earlier this year. The project was [published on GitHub](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8) with a less than [a handful or Markdown files](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs) to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.\\n\\n\x3c!--truncate--\x3e\\n\\nIn general, when creating a website with Docusaurus you do the following:\\n\\n1. Generate a template website using Docusaurus scripts.\\n1. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).\\n1. Create the website content:\\n 1. Add your docs and any supporting assets.\\n 1. Customize the default landing page provided by Docusaurus to suit your needs.\\n 1. Configure the default site navigation file.\\n1. Publish the website and set up how it will be published for future changes.\\n\\nGiven I had pre-existing Markdown files, I didn\'t have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.\\n\\n## Overview of Steps Taken\\n\\nHere\'s an overview of the steps taken to convert to a website. I\'ll discuss some of the design aspects in a later section.\\n\\n**Design and colors:**\\n\\n1. Got all the desired logo formats from designer. I had to create the _.favicon_ one.\\n1. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!\\n\\n**Initial website setup:**\\n\\n1. Forked the [Profilo project](https://github.com/facebookincubator/profilo/) on GitHub and created a local clone of the fork to set up the website.\\n1. Created the initial Docusaurus website using the [installation instructions](https://v1.docusaurus.io/docs/en/installation.html).\\n1. Deleted the `docs-examples-from-docusaurus` and `website/blog-examples-from-docusaurus` folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.\\n\\n**Content creation:**\\n\\n1. Added metadata to the existing Markdown files found in the `docs` folder, for example:\\n\\n ```md\\n ---\\n id: architecture\\n title: Architecture\\n sidebar_label: Architecture\\n ---\\n ```\\n\\n2. Added the logo assets to the `website/static/img` folder.\\n3. Modified `website/pages/en/index.js`, the landing page, to highlight Profilo features.\\n4. Modified `website/core/Footer.js`, the footer, to simplify it for Profilo.\\n5. Edited `website/siteConfig.js` (website configuration file) to specify the previously chosen primary and secondary colors.\\n6. Modified `website/sidebars.json` that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.\\n7. Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.\\n8. Tested the website locally throughout this phase. (I ran `yarn start` from the `website` folder to start the server.)\\n\\n**Feedback and review changes:**\\n\\n1. Sent a [pull request](https://github.com/facebookincubator/profilo/pull/6) to the project.\\n2. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).\\n3. Updated the colors and updated the PR.\\n4. The PR was then accepted and [merged](https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad). Yay!\\n\\n**Website publishing:**\\n\\n1. Pushed the first website version by running the Docusaurus publish script from the command line:\\n\\n ```bash\\n USE_SSH=true \\\\\\n GIT_USER=caabernathy \\\\\\n CURRENT_BRANCH=master \\\\\\n yarn run publish-gh-pages\\n ```\\n\\n2. Configured CircleCI using the [provided Docusaurus instructions](https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration). There were 2 PRs for this, [the first](https://github.com/facebookincubator/profilo/pull/8)for the initial config and [the second](https://github.com/facebookincubator/profilo/pull/12) to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).\\n\\nThe final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.\\n\\n## Design\\n\\nHere\'s what the initial website looked like when the first pull request was sent out:\\n\\n![The website\'s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar](/img/profilo_blog_post_website_initial.png)\\n\\nMost of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.\\n\\n![Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade](/img/profilo_blog_post_photoshop_color_picker.png)\\n\\nI then took the RGB representation of the color and set it as the baseline color on [Paletton](http://paletton.com/). The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.\\n\\n![Using Paletton to generate a full palette from the red shade selected. There\'s a color wheel showing all hues on the left, and a square showing various shades of red on the right.](/img/profilo_blog_post_palette_website_color_picker.png)\\n\\nThe selected primary and secondary colors were a good jumping off point for designer feedback.\\n\\nThere were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project\'s features.\\n\\nHere\'s what the final website looked like:\\n\\n![The website\'s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.](/img/profilo_blog_post_website_final.png)\\n\\nThis is an example page showing the core content, in this case the Getting Started page:\\n\\n![A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code](/img/profilo_blog_post_website_final_docs.png)\\n\\nThis also shows the sidebar structure that was set up through editing `website/sidebars.json`.\\n\\nLastly, I didn\'t have to worry about handling responsive design. You get this out of the box with Docusaurus!\\n\\n![Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.](/img/profilo_blog_post_android_ios.png)\\n\\n## Final Thoughts\\n\\nThe Profilo engineers were happy to see that they didn\'t have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.\\n\\nThe infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."},{"id":"/2017/12/14/introducing-docusaurus","metadata":{"permalink":"/blog/2017/12/14/introducing-docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx","source":"@site/blog/2017/12-14-introducing-docusaurus.mdx","title":"Introducing Docusaurus","description":"We are very happy to introduce Docusaurus to help you manage one or many open source websites.","date":"2017-12-14T00:00:00.000Z","tags":[{"inline":false,"label":"Documentation","permalink":"/blog/tags/documentation"},{"inline":false,"label":"Blog","permalink":"/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":8.215,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Introducing Docusaurus","authors":"JMarcey","tags":["documentation","blog","docusaurus"]},"unlisted":false,"lastUpdatedAt":1723124811000,"lastUpdatedBy":"Ashiq Firoz","prevItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"![](/img/slash-introducing.svg)\\n\\nWe are very happy to introduce [Docusaurus](https://github.com/facebook/docusaurus) to help you manage one or many open source websites.\\n\\nWe created [Docusaurus](https://docusaurus.io) for the following reasons:\\n\\n1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.\\n1. To provide features that many of our open source websites need like blog support, search and versioning.\\n1. To make it easy to push updates, new features, and bug fixes to everyone all at once.\\n1. And, finally, to provide a consistent look and feel across all of our open source projects.\\n\\n\x3c!--truncate--\x3e\\n\\nDocusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can [install](https://v1.docusaurus.io/docs/en/installation.html) it using `npm` or `yarn` via a simple initialization script that [creates a working example website out of the box](https://v1.docusaurus.io/docs/en/site-preparation.html).\\n\\nDocusaurus also provides core website and documentation features out-of-the-box including [blog support](https://v1.docusaurus.io/docs/en/blog.html), [internationalization](https://v1.docusaurus.io/docs/en/translation.html), [search](https://v1.docusaurus.io/docs/en/search.html), and [versioning](https://v1.docusaurus.io/docs/en/versioning.html). While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added.\\n\\n## The Birth of docusaurus\\n\\n![](/img/slash-birth.png)\\n\\nWhen Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings.\\n\\nThe open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well.\\n\\nThe problem with the \\"copy the template to your repo\\" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to \\"copy\\" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.\\n\\nSo we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes.\\n\\nDocusaurus was born!\\n\\nAt Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don\'t have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation.\\n\\n## Getting Up and Running\\n\\n![](/img/slash-up-and-running.png)\\n\\nAt its core, we wanted sites running Docusaurus to be simple to use. With one [installation](https://v1.docusaurus.io/docs/en/installation.html) command and some simple [configuration](https://v1.docusaurus.io/docs/en/site-preparation.html), you can actually have a default running website.\\n\\nWhen you run `docusaurus-init`, you will see a structure similar to:\\n\\n```bash\\nroot-of-repo\\n\u251c\u2500\u2500 docs-examples-from-docusaurus\\n\u2502 \u251c\u2500\u2500 doc1.md\\n\u2502 \u251c\u2500\u2500 doc2.md\\n\u2502 \u251c\u2500\u2500 doc3.md\\n\u2502 \u251c\u2500\u2500 example-doc4.md\\n\u2502 \u2514\u2500\u2500 example-doc5.md\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\\n\u2502 \u251c\u2500\u2500 node_modules\\n\u2502 \u251c\u2500\u2500 package.json\\n\u2502 \u251c\u2500\u2500 pages\\n\u2502 \u251c\u2500\u2500 sidebars.json\\n\u2502 \u251c\u2500\u2500 siteConfig.js\\n\u2502 \u2514\u2500\u2500 static\\n```\\n\\nWith the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your [blog posts](https://v1.docusaurus.io/docs/en/blog.html); `siteConfig.js` is where you make most of the [customizations](https://v1.docusaurus.io/docs/en/site-config.html) for your site; `sidebars.json` is where you maintain the layout and content of the [sidebar](https://v1.docusaurus.io/docs/en/navigation.html) for your documentation; the `pages` folder is where you add [custom](https://v1.docusaurus.io/docs/en/custom-pages.html) pages for your site; the `static` folder is where all of your static assets go (e.g., CSS stylesheets and images); and the `core` folder is where you can customize core components of the site, in this case the footer.\\n\\n## How does Docusaurus work?\\n\\nDocusaurus is written primarily in JavaScript and [React](https://facebook.github.io/react), replacing Jekyll which we used in the old template. We use [Remarkable](https://github.com/jonschlinkert/remarkable) for our Markdown rendering and [highlight.js](https://highlightjs.org/) for our code block syntax highlighting. The core of Docusaurus\' functionality is in the [lib directory](https://github.com/facebookexperimental/Docusaurus/tree/master/lib) of the [Docusaurus repo](https://github.com/facebook/docusaurus/). The general structure looks like:\\n\\n```bash\\nroot-of-Docusaurus\\n\u251c\u2500\u2500 lib\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u251c\u2500\u2500 server\\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\\n\u2502 \u2502 \u251c\u2500\u2500 server.js\\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\\n\u2502 \u251c\u2500\u2500 static\\n\u2502 \u251c\u2500\u2500 build-files.js\\n\u2502 \u251c\u2500\u2500 copy-examples.js\\n\u2502 \u251c\u2500\u2500 generate-feed.js\\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\\n\u2502 \u251c\u2500\u2500 rename-version.js\\n\u2502 \u251c\u2500\u2500 start-server.js\\n\u2502 \u251c\u2500\u2500 versions.js\\n\u2502 \u2514\u2500\u2500 write-translations.js\\n```\\n\\nThe key files here are build-files.js and start-server.js. There are many similarities between these two files: `build-files.js` is used to build the physical artifacts for serving by an external web server. `start-server.js` is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:\\n\\n1. Process your website settings in `siteConfig.js`\\n1. Read the document metadata that exists in all the Markdown files in your docs directory.\\n1. Create a table of contents for your documents based upon the IDs extracted from the metadata.\\n1. Convert the Markdown to HTML, including doing link replacement.\\n1. These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder.\\n1. Repeat 1-3 for blog posts.\\n1. The blog file will go in a build/blog directory of the compiled site.\\n1. Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site.\\n1. Copy images into an build/img directory of the compiled site.\\n1. Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build.\\n1. Create CNAME and sitemap.xml files and add those to build.\\n\\nNote that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts.\\n\\nThe final structure of your compiled site will look similar to:\\n\\n```bash\\nbuild\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 CNAME\\n\u2502 \u251c\u2500\u2500 blog\\n\u2502 \u251c\u2500\u2500 css\\n\u2502 \u251c\u2500\u2500 docs\\n\u2502 \u251c\u2500\u2500 en\\n\u2502 \u251c\u2500\u2500 help.html # custom page\\n\u2502 \u251c\u2500\u2500 img\\n\u2502 \u251c\u2500\u2500 index.html # landing page\\n\u2502 \u251c\u2500\u2500 sitemap.xml\\n\u2502 \u2514\u2500\u2500 users.html # custom page\\n```\\n\\n## Community\\n\\n![](/img/docusaurus.svg)\\n\\nWe welcome your [contributions](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to Docusaurus, whether you want to use it for your own site, you want to [contribute](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to the Docusaurus core or just have questions. Follow us on [GitHub](https://github.com/facebook/docusaurus) and [Twitter](https://twitter.com/docusaurus).\\n\\n## Acknowledgements\\n\\nDocusaurus wouldn\'t exist without the work of the rest of the core Docusaurus team: [Eric Nakagawa](http://twitter.com/ericnakagawa), [Hector Ramos](https://twitter.com/hectorramos), [Eric Vicenti](https://twitter.com/EricVicenti) and [Frank Li](https://github.com/deltice) \u2014 a former intern at Facebook who implemented the core technology and features.\\n\\nSpecial thanks also goes out to our earliest [adopters](https://v1.docusaurus.io/en/users.html) of Docusaurus:\\n\\n- [BuckleScript](https://bucklescript.github.io/)\\n- [FastText](https://fasttext.cc)\\n- [Jest](https://jestjs.io)\\n- [Make It Open](http://makeitopen.com)\\n- [Prettier](https://prettier.io/)\\n- [Reason-react](https://reasonml.github.io/reason-react/)\\n- [React Native](https://facebook.github.io/react-native/)\\n- [Relay](https://facebook.github.io/relay/)\\n\\nWithout their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today.\\n\\n## Resources\\n\\n- [Read our documentation](https://v1.docusaurus.io)\\n- [Follow our Twitter feed](https://twitter.com/docusaurus)\\n- [Follow us on GitHub](https://github.com/facebook/docusaurus)\\n- [About Slash, the Docusaurus mascot](https://v1.docusaurus.io/about-slash.html)"}],"blogListPaginated":[{"items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0"],"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":5,"totalCount":23,"nextPage":"/blog/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/preparing-your-site-for-docusaurus-v3","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2"],"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2022/01/24/docusaurus-2021-recap","/2021/11/21/algolia-docsearch-migration","/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2021/03/09/releasing-docusaurus-i18n","/2021/01/19/docusaurus-2020-recap","/2020/01/07/tribute-to-endi","/2019/12/30/docusaurus-2019-recap","/2018/12/14/Happy-First-Birthday-Slash"],"metadata":{"permalink":"/blog/page/4","page":4,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/page/5","page":5,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"blogTags":{"/blog/tags/release":{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases","items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n"],"pages":[{"items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0"],"metadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":5,"totalPages":3,"totalCount":13,"nextPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1"],"metadata":{"permalink":"/blog/tags/release/page/2","page":2,"postsPerPage":5,"totalPages":3,"totalCount":13,"previousPage":"/blog/tags/release","nextPage":"/blog/tags/release/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/release/page/3","page":3,"postsPerPage":5,"totalPages":3,"totalCount":13,"previousPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/maintenance":{"inline":false,"label":"Maintenance","permalink":"/blog/tags/maintenance","items":["/preparing-your-site-for-docusaurus-v3"],"pages":[{"items":["/preparing-your-site-for-docusaurus-v3"],"metadata":{"permalink":"/blog/tags/maintenance","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/recap":{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps","items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"pages":[{"items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"metadata":{"permalink":"/blog/tags/recap","page":1,"postsPerPage":5,"totalPages":1,"totalCount":3,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/search":{"inline":false,"label":"Search","permalink":"/blog/tags/search","items":["/2021/11/21/algolia-docsearch-migration"],"pages":[{"items":["/2021/11/21/algolia-docsearch-migration"],"metadata":{"permalink":"/blog/tags/search","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/beta":{"inline":false,"label":"Beta","permalink":"/blog/tags/beta","items":["/2021/05/12/announcing-docusaurus-two-beta"],"pages":[{"items":["/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/tags/beta","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/i-18-n":{"inline":false,"label":"I18n","permalink":"/blog/tags/i-18-n","items":["/2021/03/09/releasing-docusaurus-i18n"],"pages":[{"items":["/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/i-18-n","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/endi":{"inline":false,"label":"Endi","permalink":"/blog/tags/endi","items":["/2020/01/07/tribute-to-endi"],"pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/endi","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/tribute":{"inline":false,"label":"Tribute","permalink":"/blog/tags/tribute","items":["/2020/01/07/tribute-to-endi"],"pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/tribute","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/birth":{"inline":false,"label":"Birth","permalink":"/blog/tags/birth","items":["/2018/12/14/Happy-First-Birthday-Slash"],"pages":[{"items":["/2018/12/14/Happy-First-Birthday-Slash"],"metadata":{"permalink":"/blog/tags/birth","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/new":{"inline":false,"label":"New","permalink":"/blog/tags/new","items":["/2018/09/11/Towards-Docusaurus-2"],"pages":[{"items":["/2018/09/11/Towards-Docusaurus-2"],"metadata":{"permalink":"/blog/tags/new","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/adoption":{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption","items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"pages":[{"items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/adoption","page":1,"postsPerPage":5,"totalPages":1,"totalCount":2,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/profilo":{"inline":false,"label":"Profilo","permalink":"/blog/tags/profilo","items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"pages":[{"items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/profilo","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/documentation":{"inline":false,"label":"Documentation","permalink":"/blog/tags/documentation","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/documentation","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/blog":{"inline":false,"label":"Blog","permalink":"/blog/tags/blog","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/docusaurus":{"inline":false,"label":"Docusaurus","permalink":"/blog/tags/docusaurus","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false}},"blogTagsListPath":"/blog/tags","authorsMap":{"JMarcey":{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},"zpao":{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://x.com/zpao","page":{"permalink":"/blog/authors/zpao"},"socials":{"x":"https://x.com/zpao","github":"https://github.com/zpao"},"imageURL":"https://github.com/zpao.png","key":"zpao"},"slorber":{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"},"yangshun":{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},"lex111":{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"},"Josh-Cena":{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},"endiliey":{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},"abernathyca":{"name":"Christine Abernathy","url":"http://x.com/abernathyca","socials":{"x":"https://x.com/abernathyca"},"imageURL":"https://github.com/caabernathy.png","key":"abernathyca","page":null},"shortcuts":{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","socials":{"x":"https://x.com/sh0rtcts","github":"https://github.com/shortcuts"},"imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null}}},"blog-tests":{"blogSidebarTitle":"Recent posts","blogPosts":[{"id":"/2024/07/03/dual-author","metadata":{"permalink":"/tests/blog/2024/07/03/dual-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-dual-author.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-dual-author.mdx","title":"Dual author socials","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"Dual author socials","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"nextItem":{"title":"How multiple authors with socials looks","permalink":"/tests/blog/2024/07/03/multiple-authors"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2024/07/03/multiple-authors","metadata":{"permalink":"/tests/blog/2024/07/03/multiple-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-multiple-authors.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-multiple-authors.mdx","title":"How multiple authors with socials looks","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","stackoverflow":"https://stackoverflow.com/users/82609/sebastien-lorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"github":"https://github.com/slorber","twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"github":"https://github.com/slorber","twitter":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter","q":"https://thisweekinreact.com/newsletter","r":"https://thisweekinreact.com/newsletter","s":"https://thisweekinreact.com/newsletter","t":"https://thisweekinreact.com/newsletter","u":"https://thisweekinreact.com/newsletter","v":"https://thisweekinreact.com/newsletter","w":"https://thisweekinreact.com/newsletter","x":"https://thisweekinreact.com/newsletter","y":"https://thisweekinreact.com/newsletter","z":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"How multiple authors with socials looks","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","stackoverflow":"https://stackoverflow.com/users/82609/sebastien-lorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"github":"https://github.com/slorber","twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"github":"https://github.com/slorber","twitter":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter","q":"https://thisweekinreact.com/newsletter","r":"https://thisweekinreact.com/newsletter","s":"https://thisweekinreact.com/newsletter","t":"https://thisweekinreact.com/newsletter","u":"https://thisweekinreact.com/newsletter","v":"https://thisweekinreact.com/newsletter","w":"https://thisweekinreact.com/newsletter","x":"https://thisweekinreact.com/newsletter","y":"https://thisweekinreact.com/newsletter","z":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"prevItem":{"title":"Dual author socials","permalink":"/tests/blog/2024/07/03/dual-author"},"nextItem":{"title":"Single author socials","permalink":"/tests/blog/2024/07/03/single-author"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2024/07/03/single-author","metadata":{"permalink":"/tests/blog/2024/07/03/single-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-single-author.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-single-author.mdx","title":"Single author socials","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor editor editor editor editor editor editor","socials":{"x":"https://x.com/sebastienlorber","twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"Single author socials","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor editor editor editor editor editor editor","socials":{"x":"https://x.com/sebastienlorber","twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"prevItem":{"title":"How multiple authors with socials looks","permalink":"/tests/blog/2024/07/03/multiple-authors"},"nextItem":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2023/08/05/","metadata":{"permalink":"/tests/blog/2023/08/05/","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-08-05.mdx","source":"@site/_dogfooding/_blog tests/2023-08-05.mdx","title":"Ensure heading anchor slugs respect GitHub emoji behavior","description":"This is a friendly header","date":"2023-08-05T00:00:00.000Z","tags":[],"readingTime":3.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","date":"2023-08-05T00:00:00.000Z"},"unlisted":false,"prevItem":{"title":"Single author socials","permalink":"/tests/blog/2024/07/03/single-author"},"nextItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"}},"content":"## :smiley: This is a friendly header\\n\\n## \ud83d\ude03 This is a friendly header (real smiley)"},{"id":"/2023/07/19/a","metadata":{"permalink":"/tests/blog/2023/07/19/a","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-a.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-a.mdx","title":"Test if href in feed resolved correctly","description":"absolute full url","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":2.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Test if href in feed resolved correctly"},"unlisted":false,"prevItem":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/"},"nextItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"}},"content":"[absolute full url](https://github.com/facebook/docusaurus)\\n\\n[absolute url with implicit domain name](/tests/blog/2023/07/19/b)\\n\\n[relative url](2023-07-19-b.mdx)"},{"id":"/2023/07/19/b","metadata":{"permalink":"/tests/blog/2023/07/19/b","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-b.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-b.mdx","title":"Test Relative Path","description":"","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":0,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"unlisted":false,"prevItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"},"nextItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"}},"content":""},{"id":"/x/y/z.html","metadata":{"permalink":"/tests/blog/x/y/z.html","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","source":"@site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","title":"A post with html slug","description":"This is a blog post with an html slug!","date":"2022-10-02T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"A post with html slug","tags":["paginated-tag"],"slug":"/x/y/z.html"},"unlisted":false,"prevItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"},"nextItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"}},"content":"This is a blog post with an html slug!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/unlisted-post","metadata":{"permalink":"/tests/blog/unlisted-post","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","source":"@site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","title":"Unlisted blog post","description":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.","date":"2022-08-24T00:00:00.000Z","tags":[{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Visibility","permalink":"/tests/blog/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/blog/tags/unlisted"}],"readingTime":4.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Unlisted blog post","unlisted":true,"tags":["blog","visibility","unlisted"],"slug":"/unlisted-post"},"unlisted":true},"content":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.\\n\\nIt is filtered from the sidebar, sitemap, SEO indexation..."},{"id":"/2022/04/20/dup-footnote","metadata":{"permalink":"/tests/blog/2022/04/20/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","title":"First post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-04-20T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"First post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"},"nextItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/22/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/22/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","title":"Second post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-22T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Second post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"},"nextItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/21/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/21/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","title":"Third post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-21T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Third post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"},"nextItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/20/image-only-authors","metadata":{"permalink":"/tests/blog/2022/01/20/image-only-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","source":"@site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","title":"Image-only authors","description":"You can make a compact authors list without author names!","date":"2022-01-20T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":null,"page":null},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":null,"page":null},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":null,"page":null},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":null,"page":null},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":null,"page":null},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":null,"page":null},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png","key":null,"page":null},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":null,"page":null},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png","key":null,"page":null},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":null,"page":null},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png","key":null,"page":null},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":null,"page":null},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png","key":null,"page":null},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":null,"page":null},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":null,"page":null},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":null,"page":null},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":null,"page":null},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":null,"page":null},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":null,"page":null},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png","key":null,"page":null}],"frontMatter":{"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png"},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png"},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png"},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png"},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png"},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png"},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png"},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png"},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png"},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png"},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png"},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png"},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png"},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png"},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png"},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png"},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png"},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png"},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png"}],"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"}},"content":"You can make a compact authors list without author names!"},{"id":"/2021/11/13/dup-title","metadata":{"permalink":"/tests/blog/2021/11/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","title":"Post with duplicate title","description":"I hope I\'m still here","date":"2021-11-13T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"},"nextItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"}},"content":"I hope I\'m still here"},{"id":"/2021/10/08/blog-post-mdx-require-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","title":"Blog post MDX require Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-08T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"readingTime":6.6,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX require Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"},"nextItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\nTest MDX with require calls\\n\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\n\\n<img src={useBaseUrl(\'/img/docusaurus.png\')} />\\n\\n<img src={require(\'../../static/img/docusaurus.png\').default} />\\n\\n<img src={require(\'@site/static/img/docusaurus.png\').default} />"},{"id":"/2021/10/07/blog-post-mdx-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","title":"Blog post MDX Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-07T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],"hide_reading_time":true},"unlisted":false,"prevItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\n## Imports\\n\\nHere are some imports:\\n\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n## Exports\\n\\nHere are some exports:\\n\\nexport const someExport = 42;\\n\\n## Tabs test\\n\\nHere are some tabs:\\n\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n\\nHere are some tabs, inside `mdx-code-block`:\\n\\n```mdx-code-block\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n```"},{"id":"/2021/09/13/dup-title","metadata":{"permalink":"/tests/blog/2021/09/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","title":"Post with duplicate title","description":"See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.","date":"2021-09-13T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"name":"Josh-Cena1","key":null,"page":null},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png","key":null,"page":null},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena","key":null,"page":null},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com","key":null,"page":null}],"frontMatter":{"tags":["paginated-tag"],"authors":[{"name":"Josh-Cena1"},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png"},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena"},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com"}]},"unlisted":false,"prevItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"},"nextItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"}},"content":"See https://github.com/facebook/docusaurus/issues/6059. This one and [2021-11-13-dup-title.md](./2021-11-13-dup-title.mdx) should both show up."},{"id":"/2021/08/23/multiple-authors","metadata":{"permalink":"/tests/blog/2021/08/23/multiple-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","source":"@site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","title":"Multiple authors","description":"You can have multiple authors for one blog post!","date":"2021-08-23T00:00:00.000Z","tags":[{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Long","permalink":"/tests/blog/tags/long"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"},{"inline":false,"label":"Long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long"}],"readingTime":1.8,"hasTruncateMarker":false,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4","key":null,"page":null}],"frontMatter":{"authors":["slorber",{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4"}],"tags":["blog","docusaurus","paginated-tag","long","long-long","long-long-long","long-long-long-long","long-long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"},"nextItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"}},"content":"You can have multiple authors for one blog post!"},{"id":"/2021/08/22/no-author","metadata":{"permalink":"/tests/blog/2021/08/22/no-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-22-no-author.mdx","source":"@site/_dogfooding/_blog tests/2021-08-22-no-author.mdx","title":"Hmmm!","description":"This is a blog post from an anonymous author!","date":"2021-08-22T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"},"nextItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"This is a blog post from an anonymous author!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/2021/08/21/blog-post-toc-tests","metadata":{"permalink":"/tests/blog/2021/08/21/blog-post-toc-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","title":"Blog TOC FrontMatter tests","description":"{/ truncate /}","date":"2021-08-21T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1.8,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog TOC FrontMatter tests","authors":["slorber"],"toc_min_heading_level":2,"toc_max_heading_level":4,"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"},"nextItem":{"title":"Using twice the blog plugin","permalink":"/tests/blog/2020/08/03/demo/second-blog-intro"}},"content":"{/* truncate */}\\n\\nimport Content from \'@site/_dogfooding/_partials/toc-tests.mdx\';\\n\\n<Content />"},{"id":"/2020/08/03/demo/second-blog-intro","metadata":{"permalink":"/tests/blog/2020/08/03/demo/second-blog-intro","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","source":"@site/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","title":"Using twice the blog plugin","description":"Did you know you can use multiple instances of the same plugin?","date":"2020-08-03T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"}],"readingTime":7,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Using twice the blog plugin","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus"]},"unlisted":false,"prevItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"Did you know you can use multiple instances of the same plugin?\\n\\n{/* truncate */}\\n\\n:::tip\\n\\nUsing twice the blog plugin permits you to create more than one blog on the same Docusaurus website!\\n\\n:::"}],"blogListPaginated":[{"items":["/2024/07/03/dual-author","/2024/07/03/multiple-authors","/2024/07/03/single-author"],"metadata":{"permalink":"/tests/blog","page":1,"postsPerPage":3,"totalPages":7,"totalCount":19,"nextPage":"/tests/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2023/08/05/","/2023/07/19/a","/2023/07/19/b"],"metadata":{"permalink":"/tests/blog/page/2","page":2,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog","nextPage":"/tests/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/x/y/z.html","/2022/04/20/dup-footnote","/2022/01/22/dup-footnote"],"metadata":{"permalink":"/tests/blog/page/3","page":3,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/2","nextPage":"/tests/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2022/01/21/dup-footnote","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/4","page":4,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/3","nextPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/5","page":5,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/4","nextPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/page/6","page":6,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/5","nextPage":"/tests/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/page/7","page":7,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}}],"blogTags":{"/tests/blog/tags/paginated-tag":{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag","items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title","/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title","/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag","page":1,"postsPerPage":3,"totalPages":4,"totalCount":10,"nextPage":"/tests/blog/tags/paginated-tag/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/2","page":2,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag","nextPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/3","page":3,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/2","nextPage":"/tests/blog/tags/paginated-tag/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/4","page":4,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/blog":{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/blog","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/blog/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/blog","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/visibility":{"inline":false,"label":"Visibility","permalink":"/tests/blog/tags/visibility","items":["/unlisted-post"],"pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/visibility","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/unlisted":{"inline":false,"label":"Unlisted","permalink":"/tests/blog/tags/unlisted","items":["/unlisted-post"],"pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/unlisted","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/docusaurus":{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/docusaurus","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/docusaurus/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/docusaurus/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/docusaurus","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long":{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long":{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long":{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long":{"inline":false,"label":"Long","permalink":"/tests/blog/tags/long","items":["/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long-long":{"inline":false,"label":"Long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long","items":["/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false}},"blogTagsListPath":"/tests/blog/tags","authorsMap":{"slorber":{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"},"ozaki":{"name":"ozaki","page":{"permalink":"/tests/blog/authors/custom/ozaki/permalink"},"key":"ozaki"}}}},"docusaurus-plugin-content-pages":{"default":[{"type":"jsx","permalink":"/","source":"@site/src/pages/index.tsx"},{"type":"mdx","permalink":"/tests","source":"@site/src/pages/tests.mdx","title":"Tests","description":"Docusaurus use some extra plugin instances for testing / dogfooding purpose:","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/tests.mdx","unlisted":false},{"type":"jsx","permalink":"/versions","source":"@site/src/pages/versions.tsx"},{"type":"mdx","permalink":"/examples/markdownPageExample","source":"@site/src/pages/examples/markdownPageExample.mdx","title":"Markdown Page example","description":"Markdown Page example","frontMatter":{"title":"Markdown Page example","description":"Markdown Page example","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx","unlisted":false},{"type":"mdx","permalink":"/examples/noIndex","source":"@site/src/pages/examples/noIndex.mdx","title":"No Index Page example","description":"This page will not be indexed by search engines because it contains the page following page metadata markup:","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/noIndex.mdx","unlisted":false},{"type":"jsx","permalink":"/showcase/","source":"@site/src/pages/showcase/index.tsx"}],"pages-tests":[{"type":"jsx","permalink":"/tests/pages/analytics","source":"@site/_dogfooding/_pages tests/analytics.tsx"},{"type":"mdx","permalink":"/tests/pages/code-block-tests","source":"@site/_dogfooding/_pages tests/code-block-tests.mdx","title":"Code block tests","description":"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/crashTest","source":"@site/_dogfooding/_pages tests/crashTest.tsx"},{"type":"mdx","permalink":"/tests/pages/diagrams","source":"@site/_dogfooding/_pages tests/diagrams.mdx","title":"Diagram Examples","description":"Invalid Diagrams","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/embeds","source":"@site/_dogfooding/_pages tests/embeds.tsx"},{"type":"jsx","permalink":"/tests/pages/error-boundary-tests","source":"@site/_dogfooding/_pages tests/error-boundary-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/head-metadata","source":"@site/_dogfooding/_pages tests/head-metadata.mdx","description":"Head Metadata tests","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/hydration-tests","source":"@site/_dogfooding/_pages tests/hydration-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/","source":"@site/_dogfooding/_pages tests/index.mdx","description":"Page","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/index.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/layout-no-children","source":"@site/_dogfooding/_pages tests/layout-no-children.tsx"},{"type":"jsx","permalink":"/tests/pages/link-tests","source":"@site/_dogfooding/_pages tests/link-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/markdown-tests-md","source":"@site/_dogfooding/_pages tests/markdown-tests-md.md","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-md.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/markdown-tests-mdx","source":"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/navbar-dropdown-tests","source":"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","title":"navbar-dropdown-tests","description":"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/page-toc-tests","source":"@site/_dogfooding/_pages tests/page-toc-tests.mdx","frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/page-toc-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/seo","source":"@site/_dogfooding/_pages tests/seo.md","title":"custom SEO title","description":"custom SEO description","frontMatter":{"title":"custom SEO title","description":"custom SEO description","keywords":["custom","keywords"],"image":"./local-image.png"},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/tabs-tests","source":"@site/_dogfooding/_pages tests/tabs-tests.mdx","title":"Tabs tests","description":"Tabs with dynamic default value","frontMatter":{},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/unlisted","source":"@site/_dogfooding/_pages tests/unlisted.mdx","title":"Unlisted page","description":"This unlisted page should always be directly accessible, but hidden from search engines","frontMatter":{"unlisted":true},"lastUpdatedBy":"Ashiq Firoz","lastUpdatedAt":1723124811000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx","unlisted":true},{"type":"jsx","permalink":"/tests/pages/z-index-tests","source":"@site/_dogfooding/_pages tests/z-index-tests.tsx"},{"type":"jsx","permalink":"/tests/pages/react-18/","source":"@site/_dogfooding/_pages tests/react-18/index.tsx"}]},"docusaurus-plugin-debug":{},"docusaurus-plugin-google-gtag":{},"docusaurus-theme-classic":{},"docusaurus-theme-search-algolia":{},"changelog-plugin":{"default":{"blogSidebarTitle":"Changelog","blogPosts":[{"id":"/3.4.0","metadata":{"permalink":"/changelog/3.4.0","source":"@site/changelog/source/3.4.0.md","title":"3.4.0","description":"New Feature","date":"2024-05-31T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Azzedine E.","alias":"Arsero","url":"https://github.com/Arsero","imageURL":"https://github.com/Arsero.png","key":"Arsero","page":null},{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Mahri Ilmedova","alias":"ilmedova","url":"https://github.com/ilmedova","imageURL":"https://github.com/ilmedova.png","key":"ilmedova","page":null},{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},{"name":"Nick Coughlin","alias":"ncoughlin","url":"https://github.com/ncoughlin","imageURL":"https://github.com/ncoughlin.png","key":"ncoughlin","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Petar_mc","alias":"PetarMc1","url":"https://github.com/PetarMc1","imageURL":"https://github.com/PetarMc1.png","key":"PetarMc1","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-31T20:00","authors":["Arsero","CodeDoctorDE","homotechsual","ilmedova","namnguyenthanhwork","ncoughlin","OzakIOne","PetarMc1","revi","slorber","tats-u"]},"unlisted":false,"nextItem":{"title":"3.3.2","permalink":"/changelog/3.3.2"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#10137](https://github.com/facebook/docusaurus/pull/10137) feat(docs, blog): add support for `tags.yml`, predefined list of tags ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-translations`\\n - [#10151](https://github.com/facebook/docusaurus/pull/10151) feat(theme-translations): Added Turkmen (tk) default theme translations ([@ilmedova](https://github.com/ilmedova))\\n - [#10111](https://github.com/facebook/docusaurus/pull/10111) feat(theme-translations): Add Bulgarian default theme translations (bg) ([@PetarMc1](https://github.com/PetarMc1))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9859](https://github.com/facebook/docusaurus/pull/9859) feat(core): hash router option - browse site offline (experimental) ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#10121](https://github.com/facebook/docusaurus/pull/10121) feat(core): site storage config options (experimental) ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#10185](https://github.com/facebook/docusaurus/pull/10185) fix(docs, blog): Markdown link resolution does not support hot reload ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#10178](https://github.com/facebook/docusaurus/pull/10178) fix(theme): SearchPage should respect `contextualSearch: false` setting ([@ncoughlin](https://github.com/ncoughlin))\\n - [#10164](https://github.com/facebook/docusaurus/pull/10164) fix(search): fix algolia search container bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#10168](https://github.com/facebook/docusaurus/pull/10168) fix(mdx-loader): resolve Markdown/MDX links with Remark instead of RegExp ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#10165](https://github.com/facebook/docusaurus/pull/10165) fix(theme-translation): add missing Korean (ko) theme translations ([@revi](https://github.com/revi))\\n - [#10157](https://github.com/facebook/docusaurus/pull/10157) fix(theme-translations): complete Vietnamese theme translations ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- `docusaurus`\\n - [#10145](https://github.com/facebook/docusaurus/pull/10145) fix(core): fix serve workaround regexp ([@slorber](https://github.com/slorber))\\n - [#10142](https://github.com/facebook/docusaurus/pull/10142) fix(core): fix `docusaurus serve` broken for assets when using trailingSlash ([@slorber](https://github.com/slorber))\\n - [#10130](https://github.com/facebook/docusaurus/pull/10130) fix(core): the broken anchor checker should not be sensitive pathname trailing slashes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#10144](https://github.com/facebook/docusaurus/pull/10144) fix(theme): fix announcement bar layout shift due to missing storage key namespace ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#10132](https://github.com/facebook/docusaurus/pull/10132) fix(core): `configurePostCss()` should run after `configureWebpack()` ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`, `docusaurus`\\n - [#10131](https://github.com/facebook/docusaurus/pull/10131) fix(core): codegen should generate unique route prop filenames ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#10118](https://github.com/facebook/docusaurus/pull/10118) fix(theme-translations): fix missing pluralization for label DocCard.categoryDescription.plurals ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#10176](https://github.com/facebook/docusaurus/pull/10176) docs: add community plugin docusaurus-graph ([@Arsero](https://github.com/Arsero))\\n- [#10173](https://github.com/facebook/docusaurus/pull/10173) docs: improve how to use `<details>` ([@tats-u](https://github.com/tats-u))\\n- [#10167](https://github.com/facebook/docusaurus/pull/10167) docs: suggest using `{<...>...</...>}` if don\'t use Markdown in migra\u2026 ([@tats-u](https://github.com/tats-u))\\n- [#10143](https://github.com/facebook/docusaurus/pull/10143) docs: recommend users to remove hast-util-is-element in migration to v3 ([@tats-u](https://github.com/tats-u))\\n- [#10124](https://github.com/facebook/docusaurus/pull/10124) docs: v3 prepare your site blog post should point users to the upgrade guide ([@homotechsual](https://github.com/homotechsual))\\n\\n## :robot: Dependencies\\n\\n- [#10155](https://github.com/facebook/docusaurus/pull/10155) chore(deps): bump peaceiris/actions-gh-pages from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10154](https://github.com/facebook/docusaurus/pull/10154) chore(deps): bump github/codeql-action from 2.13.4 to 3.25.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10112](https://github.com/facebook/docusaurus/pull/10112) chore(deps): bump actions/dependency-review-action from 4.3.1 to 4.3.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 11\\n\\n- Azzedine E. ([@Arsero](https://github.com/Arsero))\\n- CodeDoctor ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n- Mahri Ilmedova ([@ilmedova](https://github.com/ilmedova))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Nguy\u1ec5n Th\xe0nh Nam ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- Nick Coughlin ([@ncoughlin](https://github.com/ncoughlin))\\n- Petar_mc ([@PetarMc1](https://github.com/PetarMc1))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- Yongmin ([@revi](https://github.com/revi))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.3.2","metadata":{"permalink":"/changelog/3.3.2","source":"@site/changelog/source/3.3.2.md","title":"3.3.2","description":"Bug Fix","date":"2024-05-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T20:00","authors":["slorber"]},"unlisted":false,"prevItem":{"title":"3.4.0","permalink":"/changelog/3.4.0"},"nextItem":{"title":"3.3.1","permalink":"/changelog/3.3.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#10103](https://github.com/facebook/docusaurus/pull/10103) fix(core): do not recreate ReactDOM Root, fix React warning on hot reload ([@slorber](https://github.com/slorber))\\n\\n## Committers: 1\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/3.3.1","metadata":{"permalink":"/changelog/3.3.1","source":"@site/changelog/source/3.3.1.md","title":"3.3.1","description":"Failed release","date":"2024-05-03T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T19:00"},"unlisted":false,"prevItem":{"title":"3.3.2","permalink":"/changelog/3.3.2"},"nextItem":{"title":"3.3.0","permalink":"/changelog/3.3.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nFailed release"},{"id":"/3.3.0","metadata":{"permalink":"/changelog/3.3.0","source":"@site/changelog/source/3.3.0.md","title":"3.3.0","description":"New Feature","date":"2024-05-03T18:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Abdullah Saud","alias":"Abdullah-03","url":"https://github.com/Abdullah-03","imageURL":"https://github.com/Abdullah-03.png","key":"Abdullah-03","page":null},{"name":"Andrea Mazzucchelli","alias":"andrmaz","url":"https://github.com/andrmaz","imageURL":"https://github.com/andrmaz.png","key":"andrmaz","page":null},{"name":"Daniel Li","alias":"d4nyll","url":"https://github.com/d4nyll","imageURL":"https://github.com/d4nyll.png","key":"d4nyll","page":null},{"name":"Can Eldem","alias":"eldemcan","url":"https://github.com/eldemcan","imageURL":"https://github.com/eldemcan.png","key":"eldemcan","page":null},{"name":"Guille","alias":"gagdiez","url":"https://github.com/gagdiez","imageURL":"https://github.com/gagdiez.png","key":"gagdiez","page":null},{"name":"H3NR1KE","alias":"h3nr1ke","url":"https://github.com/h3nr1ke","imageURL":"https://github.com/h3nr1ke.png","key":"h3nr1ke","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Alexey Ivanov","alias":"iAdramelk","url":"https://github.com/iAdramelk","imageURL":"https://github.com/iAdramelk.png","key":"iAdramelk","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Kai Hoffman","alias":"kaihoffman","url":"https://github.com/kaihoffman","imageURL":"https://github.com/kaihoffman.png","key":"kaihoffman","page":null},{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Bairui Su","alias":"pearmini","url":"https://github.com/pearmini","imageURL":"https://github.com/pearmini.png","key":"pearmini","page":null},{"name":"Alexander Sandor","alias":"SandPod","url":"https://github.com/SandPod","imageURL":"https://github.com/SandPod.png","key":"SandPod","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tommaso Sotte","alias":"tomsotte","url":"https://github.com/tomsotte","imageURL":"https://github.com/tomsotte.png","key":"tomsotte","page":null},{"name":"Tomy Hsieh","alias":"tomy0000000","url":"https://github.com/tomy0000000","imageURL":"https://github.com/tomy0000000.png","key":"tomy0000000","page":null},{"name":"Virgil993","alias":"Virgil993","url":"https://github.com/Virgil993","imageURL":"https://github.com/Virgil993.png","key":"Virgil993","page":null},{"name":"volcanofr","alias":"volcanofr","url":"https://github.com/volcanofr","imageURL":"https://github.com/volcanofr.png","key":"volcanofr","page":null},{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T18:00","authors":["Abdullah-03","andrmaz","d4nyll","eldemcan","gagdiez","h3nr1ke","homotechsual","iAdramelk","johnnyreilly","kaihoffman","lebalz","OzakIOne","pearmini","SandPod","slorber","tomsotte","tomy0000000","Virgil993","volcanofr","Zwyx"]},"unlisted":false,"prevItem":{"title":"3.3.1","permalink":"/changelog/3.3.1"},"nextItem":{"title":"3.2.1","permalink":"/changelog/3.2.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-sitemap`\\n - [#10083](https://github.com/facebook/docusaurus/pull/10083) feat: add createSitemapItems hook ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#10064](https://github.com/facebook/docusaurus/pull/10064) feat(core): add new site config option `siteConfig.markdown.anchors.maintainCase` ([@iAdramelk](https://github.com/iAdramelk))\\n- `docusaurus`\\n - [#9767](https://github.com/facebook/docusaurus/pull/9767) feat(cli): docusaurus deploy should support a --target-dir option ([@SandPod](https://github.com/SandPod))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#10042](https://github.com/facebook/docusaurus/pull/10042) feat(core): simplify plugin API, support route.props ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#10032](https://github.com/facebook/docusaurus/pull/10032) feat(pages): add LastUpdateAuthor & LastUpdateTime & editUrl ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-utils`, `docusaurus`\\n - [#10092](https://github.com/facebook/docusaurus/pull/10092) chore: Upgrade svgr / svgo / cssnano ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#10091](https://github.com/facebook/docusaurus/pull/10091) fix(theme): `<Tabs>` props should allow overriding defaults ([@gagdiez](https://github.com/gagdiez))\\n - [#10080](https://github.com/facebook/docusaurus/pull/10080) fix(theme): `<Admonition>` should render properly without heading/icon ([@andrmaz](https://github.com/andrmaz))\\n- `docusaurus`\\n - [#10090](https://github.com/facebook/docusaurus/pull/10090) fix(core): `docusaurus serve` redirects should include the site `/baseUrl/` prefix ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#10079](https://github.com/facebook/docusaurus/pull/10079) fix: handle React v18.3 warnings ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#10070](https://github.com/facebook/docusaurus/pull/10070) fix(theme-translations): add missing theme translations for pt-BR ([@h3nr1ke](https://github.com/h3nr1ke))\\n - [#10051](https://github.com/facebook/docusaurus/pull/10051) fix(theme-translations): correct label for tip admonition in italian ([@tomsotte](https://github.com/tomsotte))\\n- `docusaurus-theme-search-algolia`\\n - [#10048](https://github.com/facebook/docusaurus/pull/10048) fix(algolia): add insights property on Algolia Theme Config object TS definition ([@Virgil993](https://github.com/Virgil993))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#10054](https://github.com/facebook/docusaurus/pull/10054) fix(core): sortRoutes shouldn\'t have a default baseUrl value, this led to a bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#10025](https://github.com/facebook/docusaurus/pull/10025) fix(docs): sidebar item label impact the pagination label of docs ([@Abdullah-03](https://github.com/Abdullah-03))\\n- `docusaurus-utils`\\n - [#10022](https://github.com/facebook/docusaurus/pull/10022) fix(utils): getFileCommitDate should support `log.showSignature=true` ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#10060](https://github.com/facebook/docusaurus/pull/10060) refactor(core): optimize App entrypoint, it should not re-render when navigating ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#10061](https://github.com/facebook/docusaurus/pull/10061) refactor(theme): simplify CSS solution to solve empty search container ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#10023](https://github.com/facebook/docusaurus/pull/10023) refactor(website): refactor showcase components ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#10096](https://github.com/facebook/docusaurus/pull/10096) docs: Fix `d\xe9ja` to `d\xe9j\xe0` in `swizzling.mdx` ([@Zwyx](https://github.com/Zwyx))\\n- [#10093](https://github.com/facebook/docusaurus/pull/10093) docs: Fix dead Typesense links ([@kaihoffman](https://github.com/kaihoffman))\\n- [#10085](https://github.com/facebook/docusaurus/pull/10085) docs: make `ThemedImage` example work out of the box ([@lebalz](https://github.com/lebalz))\\n- [#10082](https://github.com/facebook/docusaurus/pull/10082) docs: add note regarding ts extension for config file. ([@homotechsual](https://github.com/homotechsual))\\n- [#9490](https://github.com/facebook/docusaurus/pull/9490) docs: add troubleshooting steps to migration/upgrade page ([@homotechsual](https://github.com/homotechsual))\\n- [#10056](https://github.com/facebook/docusaurus/pull/10056) docs(search): Algolia troubleshooting section for index configuration problems ([@slorber](https://github.com/slorber))\\n- [#10039](https://github.com/facebook/docusaurus/pull/10039) docs: visit is a named export of unist-util-visit ([@pearmini](https://github.com/pearmini))\\n- [#10020](https://github.com/facebook/docusaurus/pull/10020) docs: Fix wrong path example ([@tomy0000000](https://github.com/tomy0000000))\\n- [#10011](https://github.com/facebook/docusaurus/pull/10011) docs: add stormkit as deployment platform ([@eldemcan](https://github.com/eldemcan))\\n\\n## :robot: Dependencies\\n\\n- [#10097](https://github.com/facebook/docusaurus/pull/10097) chore(deps): bump ejs from 3.1.9 to 3.1.10 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10089](https://github.com/facebook/docusaurus/pull/10089) chore(deps): bump actions/dependency-review-action from 4.2.5 to 4.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10088](https://github.com/facebook/docusaurus/pull/10088) chore(deps): bump preactjs/compressed-size-action from 2.5.0 to 2.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10034](https://github.com/facebook/docusaurus/pull/10034) chore(deps): bump semver from 7.3.4 to 7.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## :wrench: Maintenance\\n\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-plugin-vercel-analytics`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#10065](https://github.com/facebook/docusaurus/pull/10065) refactor: extract base TS client config + upgrade TS + refactor TS setup ([@slorber](https://github.com/slorber))\\n- Other\\n - [#10063](https://github.com/facebook/docusaurus/pull/10063) test(e2e): TypeCheck website/starter in min/max range of TS versions ([@slorber](https://github.com/slorber))\\n - [#10049](https://github.com/facebook/docusaurus/pull/10049) fix(website): fix website manifest.json name \\"Docusaurus v2\\" to just \\"Docusaurus\\" ([@volcanofr](https://github.com/volcanofr))\\n\\n## Committers: 20\\n\\n- Abdullah Saud ([@Abdullah-03](https://github.com/Abdullah-03))\\n- Alexander Sandor ([@SandPod](https://github.com/SandPod))\\n- Alexey Ivanov ([@iAdramelk](https://github.com/iAdramelk))\\n- Andrea Mazzucchelli ([@andrmaz](https://github.com/andrmaz))\\n- Bairui Su ([@pearmini](https://github.com/pearmini))\\n- Balthasar Hofer ([@lebalz](https://github.com/lebalz))\\n- Can Eldem ([@eldemcan](https://github.com/eldemcan))\\n- Daniel Li ([@d4nyll](https://github.com/d4nyll))\\n- Guille ([@gagdiez](https://github.com/gagdiez))\\n- H3NR1KE ([@h3nr1ke](https://github.com/h3nr1ke))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Kai Hoffman ([@kaihoffman](https://github.com/kaihoffman))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommaso Sotte ([@tomsotte](https://github.com/tomsotte))\\n- Tomy Hsieh ([@tomy0000000](https://github.com/tomy0000000))\\n- Zwyx ([@Zwyx](https://github.com/Zwyx))\\n- [@Virgil993](https://github.com/Virgil993)\\n- [@volcanofr](https://github.com/volcanofr)\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.2.1","metadata":{"permalink":"/changelog/3.2.1","source":"@site/changelog/source/3.2.1.md","title":"3.2.1","description":"Bug Fix","date":"2024-04-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-04-04T20:00","authors":["OzakIOne","slorber"]},"unlisted":false,"prevItem":{"title":"3.3.0","permalink":"/changelog/3.3.0"},"nextItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#10012](https://github.com/facebook/docusaurus/pull/10012) fix(core): fix configurePostCss v3.2 regression ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#9980](https://github.com/facebook/docusaurus/pull/9980) docs: remove old github action description ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10014](https://github.com/facebook/docusaurus/pull/10014) docs(website): fix SEO docs headTags example ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10004](https://github.com/facebook/docusaurus/pull/10004) docs(website): Announce v3.2 on website/homepage ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- [#10006](https://github.com/facebook/docusaurus/pull/10006) chore(deps): bump actions/dependency-review-action from 4.2.4 to 4.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 2\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.2.0","metadata":{"permalink":"/changelog/3.2.0","source":"@site/changelog/source/3.2.0.md","title":"3.2.0","description":"New Feature","date":"2024-03-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Josue [4tro] A","alias":"4troDev","url":"https://github.com/4troDev","imageURL":"https://github.com/4troDev.png","key":"4troDev","page":null},{"name":"Anatoly Kopyl","alias":"anatolykopyl","url":"https://github.com/anatolykopyl","imageURL":"https://github.com/anatolykopyl.png","key":"anatolykopyl","page":null},{"name":"axel7083","alias":"axel7083","url":"https://github.com/axel7083","imageURL":"https://github.com/axel7083.png","key":"axel7083","page":null},{"name":"\u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432","alias":"baradusov","url":"https://github.com/baradusov","imageURL":"https://github.com/baradusov.png","key":"baradusov","page":null},{"name":"Chris Bateman","alias":"chris-bateman","url":"https://github.com/chris-bateman","imageURL":"https://github.com/chris-bateman.png","key":"chris-bateman","page":null},{"name":"Zed Spencer-Milnes","alias":"GingerGeek","url":"https://github.com/GingerGeek","imageURL":"https://github.com/GingerGeek.png","key":"GingerGeek","page":null},{"name":"Hallbj\xf6rn Magn\xfasson","alias":"Hallinn","url":"https://github.com/Hallinn","imageURL":"https://github.com/Hallinn.png","key":"Hallinn","page":null},{"name":"Liviu Ionescu","alias":"ilg-ul","url":"https://github.com/ilg-ul","imageURL":"https://github.com/ilg-ul.png","key":"ilg-ul","page":null},{"name":"n4n5","alias":"Its-Just-Nans","url":"https://github.com/Its-Just-Nans","imageURL":"https://github.com/Its-Just-Nans.png","key":"Its-Just-Nans","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"krinza.eth","alias":"kaymomin","url":"https://github.com/kaymomin","imageURL":"https://github.com/kaymomin.png","key":"kaymomin","page":null},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Rafael Martins","alias":"Rafael-Martins","url":"https://github.com/Rafael-Martins","imageURL":"https://github.com/Rafael-Martins.png","key":"Rafael-Martins","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"suenryu","alias":"Suenaga-Ryuya","url":"https://github.com/Suenaga-Ryuya","imageURL":"https://github.com/Suenaga-Ryuya.png","key":"Suenaga-Ryuya","page":null},{"name":"Fafowora Sunkanmi","alias":"sunkanmii","url":"https://github.com/sunkanmii","imageURL":"https://github.com/sunkanmii.png","key":"sunkanmii","page":null},{"name":"Vahid Naderi","alias":"VahidNaderi","url":"https://github.com/VahidNaderi","imageURL":"https://github.com/VahidNaderi.png","key":"VahidNaderi","page":null},{"name":"Vlad Nestorov","alias":"vlad-nestorov","url":"https://github.com/vlad-nestorov","imageURL":"https://github.com/vlad-nestorov.png","key":"vlad-nestorov","page":null},{"name":"\u7fca\u5c0f\u4e45","alias":"yixiaojiu","url":"https://github.com/yixiaojiu","imageURL":"https://github.com/yixiaojiu.png","key":"yixiaojiu","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-03-29T20:00","authors":["4troDev","anatolykopyl","axel7083","baradusov","chris-bateman","GingerGeek","Hallinn","ilg-ul","Its-Just-Nans","johnnyreilly","Josh-Cena","kaymomin","mxschmitt","Oreoxmt","OzakIOne","Rafael-Martins","slorber","Suenaga-Ryuya","sunkanmii","VahidNaderi","vlad-nestorov","yixiaojiu"]},"unlisted":false,"prevItem":{"title":"3.2.1","permalink":"/changelog/3.2.1"},"nextItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9954](https://github.com/facebook/docusaurus/pull/9954) feat(sitemap): add support for \\"lastmod\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#9912](https://github.com/facebook/docusaurus/pull/9912) feat(blog): add LastUpdateAuthor & LastUpdateTime ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#9931](https://github.com/facebook/docusaurus/pull/9931) feat(core): add new plugin allContentLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9928](https://github.com/facebook/docusaurus/pull/9928) feat(theme-translations) Icelandic (is) ([@Hallinn](https://github.com/Hallinn))\\n- `docusaurus-plugin-content-blog`\\n - [#9886](https://github.com/facebook/docusaurus/pull/9886) feat(blog): allow processing blog posts through a processBlogPosts function ([@OzakIOne](https://github.com/OzakIOne))\\n - [#9838](https://github.com/facebook/docusaurus/pull/9838) feat(blog): add blog pageBasePath plugin option ([@ilg-ul](https://github.com/ilg-ul))\\n- `docusaurus`\\n - [#9681](https://github.com/facebook/docusaurus/pull/9681) feat(swizzle): ask user preferred language if no language CLI option provided ([@yixiaojiu](https://github.com/yixiaojiu))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#9442](https://github.com/facebook/docusaurus/pull/9442) feat(create-docusaurus): ask user for preferred language when no language CLI option provided ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- `docusaurus-plugin-vercel-analytics`\\n - [#9687](https://github.com/facebook/docusaurus/pull/9687) feat(plugin-vercel-analytics): add new vercel analytics plugin ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`\\n - [#9684](https://github.com/facebook/docusaurus/pull/9684) feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials ([@anatolykopyl](https://github.com/anatolykopyl))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#9999](https://github.com/facebook/docusaurus/pull/9999) fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9945](https://github.com/facebook/docusaurus/pull/9945) fix(a11y): move focus algolia-search focus back to search input on Escape ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-plugin-content-blog`\\n - [#9920](https://github.com/facebook/docusaurus/pull/9920) fix(blog): apply trailing slash to blog feed ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`\\n - [#9944](https://github.com/facebook/docusaurus/pull/9944) fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-theme-translations`\\n - [#9915](https://github.com/facebook/docusaurus/pull/9915) fix(theme-translations): complete and modify Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9910](https://github.com/facebook/docusaurus/pull/9910) fix(theme-translations): add Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9872](https://github.com/facebook/docusaurus/pull/9872) fix(theme-translations): complete and improve Spanish theme translations ([@4troDev](https://github.com/4troDev))\\n - [#9812](https://github.com/facebook/docusaurus/pull/9812) fix(i18n): add missing theme translations for fa locale ([@VahidNaderi](https://github.com/VahidNaderi))\\n- `docusaurus-utils`\\n - [#9897](https://github.com/facebook/docusaurus/pull/9897) fix(mdx-loader): mdx-code-block should support CRLF ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9878](https://github.com/facebook/docusaurus/pull/9878) fix(core): fix default i18n calendar used, infer it from locale if possible ([@slorber](https://github.com/slorber))\\n - [#9852](https://github.com/facebook/docusaurus/pull/9852) fix(core): ensure core error boundary is able to render theme layout ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#9861](https://github.com/facebook/docusaurus/pull/9861) fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9851](https://github.com/facebook/docusaurus/pull/9851) fix(theme-classic): should use plurals for category items description ([@baradusov](https://github.com/baradusov))\\n\\n## :running: Performance\\n\\n- `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9975](https://github.com/facebook/docusaurus/pull/9975) refactor(core): improve dev perf, fine-grained site reloads - part 3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#9968](https://github.com/facebook/docusaurus/pull/9968) refactor(core): improve dev perf, fine-grained site reloads - part2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#9903](https://github.com/facebook/docusaurus/pull/9903) refactor(core): improve dev perf, fine-grained site reloads - part1 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#9890](https://github.com/facebook/docusaurus/pull/9890) perf: optimize getFileCommitDate, make it async ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9798](https://github.com/facebook/docusaurus/pull/9798) refactor(core): internalize, simplify and optimize the SSG logic ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9868](https://github.com/facebook/docusaurus/pull/9868) refactor(theme): dates should be formatted on the client-side instead of in nodejs code ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#9669](https://github.com/facebook/docusaurus/pull/9669) refactor(theme): use JSON-LD instead of microdata for blog structured data ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#9839](https://github.com/facebook/docusaurus/pull/9839) refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :memo: Documentation\\n\\n- [#9937](https://github.com/facebook/docusaurus/pull/9937) docs: use official GitHub Action to deploy to GitHub Pages ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- [#9971](https://github.com/facebook/docusaurus/pull/9971) docs: replace VuePress by VitePress on tool comparison section ([@sunkanmii](https://github.com/sunkanmii))\\n- [#9914](https://github.com/facebook/docusaurus/pull/9914) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9913](https://github.com/facebook/docusaurus/pull/9913) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9906](https://github.com/facebook/docusaurus/pull/9906) docs: emphasize \\"index slug\\" convention ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#9877](https://github.com/facebook/docusaurus/pull/9877) docs: fix typos in deployment.mdx ([@Oreoxmt](https://github.com/Oreoxmt))\\n- [#9845](https://github.com/facebook/docusaurus/pull/9845) docs: typo ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9816](https://github.com/facebook/docusaurus/pull/9816) docs: Add docs for Mermaid Component ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n\\n## :robot: Dependencies\\n\\n- [#9981](https://github.com/facebook/docusaurus/pull/9981) chore(deps): bump actions/dependency-review-action from 4.1.3 to 4.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9982](https://github.com/facebook/docusaurus/pull/9982) chore(deps): bump katex from 0.16.8 to 0.16.10 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9983](https://github.com/facebook/docusaurus/pull/9983) chore(deps): bump express from 4.18.2 to 4.19.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9977](https://github.com/facebook/docusaurus/pull/9977) chore(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9958](https://github.com/facebook/docusaurus/pull/9958) chore(deps): bump follow-redirects from 1.15.4 to 1.15.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9892](https://github.com/facebook/docusaurus/pull/9892) chore(deps): bump actions/dependency-review-action from 4.1.2 to 4.1.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9869](https://github.com/facebook/docusaurus/pull/9869) chore(deps): bump actions/dependency-review-action from 4.0.0 to 4.1.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9874](https://github.com/facebook/docusaurus/pull/9874) chore(deps): bump ip from 2.0.0 to 2.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9843](https://github.com/facebook/docusaurus/pull/9843) chore(deps): bump actions/setup-node from 4.0.1 to 4.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9824](https://github.com/facebook/docusaurus/pull/9824) chore(deps): bump treosh/lighthouse-ci-action from 10.1.0 to 11.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9823](https://github.com/facebook/docusaurus/pull/9823) chore(deps): bump marocchino/sticky-pull-request-comment from 2.8.0 to 2.9.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#9972](https://github.com/facebook/docusaurus/pull/9972) refactor(utils): remove duplicated function ([@OzakIOne](https://github.com/OzakIOne))\\n- Other\\n - [#9965](https://github.com/facebook/docusaurus/pull/9965) refactor(website): organise blog posts by year ([@GingerGeek](https://github.com/GingerGeek))\\n - [#9865](https://github.com/facebook/docusaurus/pull/9865) chore(website): update @crowdin/crowdin-api-client ([@chris-bateman](https://github.com/chris-bateman))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`\\n - [#9963](https://github.com/facebook/docusaurus/pull/9963) refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds ([@slorber](https://github.com/slorber))\\n\\n## Committers: 22\\n\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Anatoly Kopyl ([@anatolykopyl](https://github.com/anatolykopyl))\\n- Chris Bateman ([@chris-bateman](https://github.com/chris-bateman))\\n- Fafowora Sunkanmi ([@sunkanmii](https://github.com/sunkanmii))\\n- Hallbj\xf6rn Magn\xfasson ([@Hallinn](https://github.com/Hallinn))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Josue [4tro] A ([@4troDev](https://github.com/4troDev))\\n- Liviu Ionescu ([@ilg-ul](https://github.com/ilg-ul))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Rafael Martins ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vahid Naderi ([@VahidNaderi](https://github.com/VahidNaderi))\\n- Vlad Nestorov ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- Zed Spencer-Milnes ([@GingerGeek](https://github.com/GingerGeek))\\n- axel7083 ([@axel7083](https://github.com/axel7083))\\n- krinza.eth ([@kaymomin](https://github.com/kaymomin))\\n- n4n5 ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- suenryu ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n- \u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432 ([@baradusov](https://github.com/baradusov))\\n- \u7fca\u5c0f\u4e45 ([@yixiaojiu](https://github.com/yixiaojiu))"},{"id":"/3.1.1","metadata":{"permalink":"/changelog/3.1.1","source":"@site/changelog/source/3.1.1.md","title":"3.1.1","description":"Bug Fix","date":"2024-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},{"name":"eitsupi","alias":"eitsupi","url":"https://github.com/eitsupi","imageURL":"https://github.com/eitsupi.png","key":"eitsupi","page":null},{"name":"Jack Robson","alias":"jack-robson","url":"https://github.com/jack-robson","imageURL":"https://github.com/jack-robson.png","key":"jack-robson","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-26T20:00","authors":["dawei-wang","eitsupi","jack-robson","sanjaiyan-dev","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"nextItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#9791](https://github.com/facebook/docusaurus/pull/9791) fix(core): broken links optimization behaves differently than non-optimized logic ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9788](https://github.com/facebook/docusaurus/pull/9788) fix(core): links with target \\"\\\\_blank\\" should no be checked by the broken link checker ([@slorber](https://github.com/slorber))\\n - [#9407](https://github.com/facebook/docusaurus/pull/9407) fix(core): conditionally include `hostname` parameter when using\u2026 ([@jack-robson](https://github.com/jack-robson))\\n- `docusaurus-utils`\\n - [#9776](https://github.com/facebook/docusaurus/pull/9776) fix(mdx-loader): allow spaces before `mdx-code-block` info string ([@eitsupi](https://github.com/eitsupi))\\n- `create-docusaurus`\\n - [#9783](https://github.com/facebook/docusaurus/pull/9783) fix(create-docusaurus): fix typo in init template sample docs ([@dawei-wang](https://github.com/dawei-wang))\\n- `docusaurus-theme-common`\\n - [#9727](https://github.com/facebook/docusaurus/pull/9727) fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-mermaid`\\n - [#9733](https://github.com/facebook/docusaurus/pull/9733) fix: remove old useless mdx typedefs ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#9732](https://github.com/facebook/docusaurus/pull/9732) fix(core): various broken anchor link fixes ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9778](https://github.com/facebook/docusaurus/pull/9778) perf(core): optimize broken links checker ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9470](https://github.com/facebook/docusaurus/pull/9470) polish(theme): MDX images should use async decoding ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n\\n## Committers: 6\\n\\n- Jack Robson ([@jack-robson](https://github.com/jack-robson))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@eitsupi](https://github.com/eitsupi)"},{"id":"/3.1.0","metadata":{"permalink":"/changelog/3.1.0","source":"@site/changelog/source/3.1.0.md","title":"3.1.0","description":"New Feature","date":"2024-01-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"axmmisaka","alias":"axmmisaka","url":"https://github.com/axmmisaka","imageURL":"https://github.com/axmmisaka.png","key":"axmmisaka","page":null},{"name":"c0h1b4","alias":"c0h1b4","url":"https://github.com/c0h1b4","imageURL":"https://github.com/c0h1b4.png","key":"c0h1b4","page":null},{"name":"Janessa Garrow","alias":"jgarrow","url":"https://github.com/jgarrow","imageURL":"https://github.com/jgarrow.png","key":"jgarrow","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-05T20:00","authors":["axmmisaka","c0h1b4","jgarrow","Josh-Cena","OzakIOne","SimenB","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"nextItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9528](https://github.com/facebook/docusaurus/pull/9528) feat(core): make broken link checker detect broken anchors - add `onBrokenAnchors` config ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9674](https://github.com/facebook/docusaurus/pull/9674) feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9671](https://github.com/facebook/docusaurus/pull/9671) feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9624](https://github.com/facebook/docusaurus/pull/9624) feat: siteConfig.markdown.parseFrontMatter hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9610](https://github.com/facebook/docusaurus/pull/9610) feat(core): enable port configuration via environment variable ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#9704](https://github.com/facebook/docusaurus/pull/9704) fix(theme): allow empty code blocks and live playgrounds ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9696](https://github.com/facebook/docusaurus/pull/9696) fix(create-docusaurus): fix init template code blocks, and little improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#9668](https://github.com/facebook/docusaurus/pull/9668) fix(pwa-plugin): upgrade workbox ([@SimenB](https://github.com/SimenB))\\n- `docusaurus`\\n - [#9648](https://github.com/facebook/docusaurus/pull/9648) fix(cli): output help when no conventional config + no subcommand ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#9631](https://github.com/facebook/docusaurus/pull/9631) fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9617](https://github.com/facebook/docusaurus/pull/9617) fix(utils): Markdown link replacement with <> but no spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#9612](https://github.com/facebook/docusaurus/pull/9612) fix(type-aliases): add `title` prop for imported inline SVG React components ([@axmmisaka](https://github.com/axmmisaka))\\n- `docusaurus-plugin-content-blog`\\n - [#9581](https://github.com/facebook/docusaurus/pull/9581) fix(content-blog): add baseUrl for author.image_url ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-translations`\\n - [#9477](https://github.com/facebook/docusaurus/pull/9477) fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) ([@c0h1b4](https://github.com/c0h1b4))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#9335](https://github.com/facebook/docusaurus/pull/9335) refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize ([@jgarrow](https://github.com/jgarrow))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-search-algolia`\\n - [#9604](https://github.com/facebook/docusaurus/pull/9604) chore: add lint autofix CI job ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Janessa Garrow ([@jgarrow](https://github.com/jgarrow))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@c0h1b4](https://github.com/c0h1b4)\\n- axmmisaka ([@axmmisaka](https://github.com/axmmisaka))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.0.1","metadata":{"permalink":"/changelog/3.0.1","source":"@site/changelog/source/3.0.1.md","title":"3.0.1","description":"Bug Fix","date":"2023-11-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},{"name":"MCR Studio","alias":"mcrstudio","url":"https://github.com/mcrstudio","imageURL":"https://github.com/mcrstudio.png","key":"mcrstudio","page":null},{"name":"Nick Gerleman","alias":"NickGerleman","url":"https://github.com/NickGerleman","imageURL":"https://github.com/NickGerleman.png","key":"NickGerleman","page":null},{"name":"reece-white","alias":"reece-white","url":"https://github.com/reece-white","imageURL":"https://github.com/reece-white.png","key":"reece-white","page":null},{"name":"Shreesh Nautiyal","alias":"Shreesh09","url":"https://github.com/Shreesh09","imageURL":"https://github.com/Shreesh09.png","key":"Shreesh09","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-11-30T20:00","authors":["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},"unlisted":false,"prevItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"nextItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-utils`\\n - [#9570](https://github.com/facebook/docusaurus/pull/9570) fix: add v2 retrocompatible support for quoted admonitions ([@slorber](https://github.com/slorber))\\n - [#9535](https://github.com/facebook/docusaurus/pull/9535) fix: v3 admonitions should support v2 title syntax for nested admonitions ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9531](https://github.com/facebook/docusaurus/pull/9531) fix(theme): docs html sidebar items should always be visible ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9530](https://github.com/facebook/docusaurus/pull/9530) fix(theme): fix firefox CSS :has() support bug ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9487](https://github.com/facebook/docusaurus/pull/9487) fix(create-docusaurus): fix readme docusaurus 2 ref ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-debug`\\n - [#9566](https://github.com/facebook/docusaurus/pull/9566) chore(debug-plugin): migrate to a new maintained JSON Viewer ([@mcrstudio](https://github.com/mcrstudio))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9572](https://github.com/facebook/docusaurus/pull/9572) chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx ([@harryzcy](https://github.com/harryzcy))\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#9464](https://github.com/facebook/docusaurus/pull/9464) chore: Upgrade clsx to 2.0.0 ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus`\\n - [#9547](https://github.com/facebook/docusaurus/pull/9547) chore(core): replace `wait-on` dependency with custom lighter code ([@NickGerleman](https://github.com/NickGerleman))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#9529](https://github.com/facebook/docusaurus/pull/9529) chore: ugrade babel dependencies to v7.23.3 ([@reece-white](https://github.com/reece-white))\\n\\n## Committers: 6\\n\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- MCR Studio ([@mcrstudio](https://github.com/mcrstudio))\\n- Nick Gerleman ([@NickGerleman](https://github.com/NickGerleman))\\n- Shreesh Nautiyal ([@Shreesh09](https://github.com/Shreesh09))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@reece-white](https://github.com/reece-white)"},{"id":"/3.0.0","metadata":{"permalink":"/changelog/3.0.0","source":"@site/changelog/source/3.0.0.md","title":"3.0.0","description":"Breaking Change","date":"2023-10-31T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Wan Sim","alias":"0420syj","url":"https://github.com/0420syj","imageURL":"https://github.com/0420syj.png","key":"0420syj","page":null},{"name":"Abhinandan Wadhwa","alias":"abhinandanwadwa","url":"https://github.com/abhinandanwadwa","imageURL":"https://github.com/abhinandanwadwa.png","key":"abhinandanwadwa","page":null},{"name":"Abinash Satapathy","alias":"Abinashbunty","url":"https://github.com/Abinashbunty","imageURL":"https://github.com/Abinashbunty.png","key":"Abinashbunty","page":null},{"name":"Adam Patterson","alias":"adampatterson","url":"https://github.com/adampatterson","imageURL":"https://github.com/adampatterson.png","key":"adampatterson","page":null},{"name":"Adithya Krishna","alias":"adithyaakrishna","url":"https://github.com/adithyaakrishna","imageURL":"https://github.com/adithyaakrishna.png","key":"adithyaakrishna","page":null},{"name":"Hayden Hong","alias":"AFRUITPIE","url":"https://github.com/AFRUITPIE","imageURL":"https://github.com/AFRUITPIE.png","key":"AFRUITPIE","page":null},{"name":"Craigory Coppola","alias":"AgentEnder","url":"https://github.com/AgentEnder","imageURL":"https://github.com/AgentEnder.png","key":"AgentEnder","page":null},{"name":"Akshay Bhalotia","alias":"akshaybhalotia","url":"https://github.com/akshaybhalotia","imageURL":"https://github.com/akshaybhalotia.png","key":"akshaybhalotia","page":null},{"name":"allyw2002","alias":"allyw2002","url":"https://github.com/allyw2002","imageURL":"https://github.com/allyw2002.png","key":"allyw2002","page":null},{"name":"Ahmad Shrif","alias":"amdshrif","url":"https://github.com/amdshrif","imageURL":"https://github.com/amdshrif.png","key":"amdshrif","page":null},{"name":"Ahmed Mustafa Malik","alias":"amm98d","url":"https://github.com/amm98d","imageURL":"https://github.com/amm98d.png","key":"amm98d","page":null},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"Anton Kastritskii","alias":"antonk52","url":"https://github.com/antonk52","imageURL":"https://github.com/antonk52.png","key":"antonk52","page":null},{"name":"Antony Onipko","alias":"antonyoni","url":"https://github.com/antonyoni","imageURL":"https://github.com/antonyoni.png","key":"antonyoni","page":null},{"name":"Aqueeb","alias":"aqueeb","url":"https://github.com/aqueeb","imageURL":"https://github.com/aqueeb.png","key":"aqueeb","page":null},{"name":"Martin Adamko","alias":"attitude","url":"https://github.com/attitude","imageURL":"https://github.com/attitude.png","key":"attitude","page":null},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},{"name":"bitpredator","alias":"bitpredator","url":"https://github.com/bitpredator","imageURL":"https://github.com/bitpredator.png","key":"bitpredator","page":null},{"name":"Joe Williams","alias":"BubbaJoe","url":"https://github.com/BubbaJoe","imageURL":"https://github.com/BubbaJoe.png","key":"BubbaJoe","page":null},{"name":"Dinh Bao Dang","alias":"chillinPanda","url":"https://github.com/chillinPanda","imageURL":"https://github.com/chillinPanda.png","key":"chillinPanda","page":null},{"name":"Bei Chu","alias":"chubei","url":"https://github.com/chubei","imageURL":"https://github.com/chubei.png","key":"chubei","page":null},{"name":"\u521d\u51ac","alias":"chudongvip","url":"https://github.com/chudongvip","imageURL":"https://github.com/chudongvip.png","key":"chudongvip","page":null},{"name":"Ryosuke Igarashi","alias":"cm-igarashi-ryosuke","url":"https://github.com/cm-igarashi-ryosuke","imageURL":"https://github.com/cm-igarashi-ryosuke.png","key":"cm-igarashi-ryosuke","page":null},{"name":"Colin McDonnell","alias":"colinhacks","url":"https://github.com/colinhacks","imageURL":"https://github.com/colinhacks.png","key":"colinhacks","page":null},{"name":"conlacda","alias":"conlacda","url":"https://github.com/conlacda","imageURL":"https://github.com/conlacda.png","key":"conlacda","page":null},{"name":"Dan Dascalescu","alias":"dandv","url":"https://github.com/dandv","imageURL":"https://github.com/dandv.png","key":"dandv","page":null},{"name":"Danilo Woznica","alias":"danilowoz","url":"https://github.com/danilowoz","imageURL":"https://github.com/danilowoz.png","key":"danilowoz","page":null},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},{"name":"David J. Felix","alias":"DavidJFelix","url":"https://github.com/DavidJFelix","imageURL":"https://github.com/DavidJFelix.png","key":"DavidJFelix","page":null},{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},{"name":"Debbie O\'Brien","alias":"debs-obrien","url":"https://github.com/debs-obrien","imageURL":"https://github.com/debs-obrien.png","key":"debs-obrien","page":null},{"name":"Devansu Yadav","alias":"Devansu-Yadav","url":"https://github.com/Devansu-Yadav","imageURL":"https://github.com/Devansu-Yadav.png","key":"Devansu-Yadav","page":null},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Eduardo M\xednguez","alias":"e-minguez","url":"https://github.com/e-minguez","imageURL":"https://github.com/e-minguez.png","key":"e-minguez","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"FlorinaPacurar","alias":"FlorinaPacurar","url":"https://github.com/FlorinaPacurar","imageURL":"https://github.com/FlorinaPacurar.png","key":"FlorinaPacurar","page":null},{"name":"Charles Killer","alias":"Foosballfan","url":"https://github.com/Foosballfan","imageURL":"https://github.com/Foosballfan.png","key":"Foosballfan","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Francesco Ciulla","alias":"FrancescoXX","url":"https://github.com/FrancescoXX","imageURL":"https://github.com/FrancescoXX.png","key":"FrancescoXX","page":null},{"name":"Fredrik Stave","alias":"fredrikstave","url":"https://github.com/fredrikstave","imageURL":"https://github.com/fredrikstave.png","key":"fredrikstave","page":null},{"name":"Fxpby","alias":"fxpby","url":"https://github.com/fxpby","imageURL":"https://github.com/fxpby.png","key":"fxpby","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Alexander Nguyen","alias":"GalexyN","url":"https://github.com/GalexyN","imageURL":"https://github.com/GalexyN.png","key":"GalexyN","page":null},{"name":"Gustav Ton\xe9r","alias":"gazab","url":"https://github.com/gazab","imageURL":"https://github.com/gazab.png","key":"gazab","page":null},{"name":"Eunkwang Shin","alias":"gracefullight","url":"https://github.com/gracefullight","imageURL":"https://github.com/gracefullight.png","key":"gracefullight","page":null},{"name":"Greg Berg\xe9","alias":"gregberge","url":"https://github.com/gregberge","imageURL":"https://github.com/gregberge.png","key":"gregberge","page":null},{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},{"name":"Sujal Gupta","alias":"heysujal","url":"https://github.com/heysujal","imageURL":"https://github.com/heysujal.png","key":"heysujal","page":null},{"name":"Hidde de Vries","alias":"hidde","url":"https://github.com/hidde","imageURL":"https://github.com/hidde.png","key":"hidde","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Hyunseung","alias":"hslee2008","url":"https://github.com/hslee2008","imageURL":"https://github.com/hslee2008.png","key":"hslee2008","page":null},{"name":"Anna","alias":"HumbleDeer","url":"https://github.com/HumbleDeer","imageURL":"https://github.com/HumbleDeer.png","key":"HumbleDeer","page":null},{"name":"Coupy","alias":"HyeokjinKang","url":"https://github.com/HyeokjinKang","imageURL":"https://github.com/HyeokjinKang.png","key":"HyeokjinKang","page":null},{"name":"Jean Humann","alias":"jean-humann","url":"https://github.com/jean-humann","imageURL":"https://github.com/jean-humann.png","key":"jean-humann","page":null},{"name":"Jesper Engberg","alias":"jeengbe","url":"https://github.com/jeengbe","imageURL":"https://github.com/jeengbe.png","key":"jeengbe","page":null},{"name":"John Cao","alias":"jhcao23","url":"https://github.com/jhcao23","imageURL":"https://github.com/jhcao23.png","key":"jhcao23","page":null},{"name":"JJ Style","alias":"jj-style","url":"https://github.com/jj-style","imageURL":"https://github.com/jj-style.png","key":"jj-style","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Viktor Malmedal","alias":"JohnVicke","url":"https://github.com/JohnVicke","imageURL":"https://github.com/JohnVicke.png","key":"JohnVicke","page":null},{"name":"Jorens Merenjanu","alias":"JorensM","url":"https://github.com/JorensM","imageURL":"https://github.com/JorensM.png","key":"JorensM","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Juan Picado","alias":"juanpicado","url":"https://github.com/juanpicado","imageURL":"https://github.com/juanpicado.png","key":"juanpicado","page":null},{"name":"0x24Karthick","alias":"KarthickSakthi","url":"https://github.com/KarthickSakthi","imageURL":"https://github.com/KarthickSakthi.png","key":"KarthickSakthi","page":null},{"name":"Serenus","alias":"Kesyau","url":"https://github.com/Kesyau","imageURL":"https://github.com/Kesyau.png","key":"Kesyau","page":null},{"name":"Naffy Dharni","alias":"knownasnaffy","url":"https://github.com/knownasnaffy","imageURL":"https://github.com/knownasnaffy.png","key":"knownasnaffy","page":null},{"name":"la55u","alias":"la55u","url":"https://github.com/la55u","imageURL":"https://github.com/la55u.png","key":"la55u","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Oleksandr Fediashov","alias":"layershifter","url":"https://github.com/layershifter","imageURL":"https://github.com/layershifter.png","key":"layershifter","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lorenzo Lewis","alias":"lorenzolewis","url":"https://github.com/lorenzolewis","imageURL":"https://github.com/lorenzolewis.png","key":"lorenzolewis","page":null},{"name":"Silvestar Bistrovi\u0107","alias":"maliMirkec","url":"https://github.com/maliMirkec","imageURL":"https://github.com/maliMirkec.png","key":"maliMirkec","page":null},{"name":"Manuel","alias":"manuel-rw","url":"https://github.com/manuel-rw","imageURL":"https://github.com/manuel-rw.png","key":"manuel-rw","page":null},{"name":"Markshawn","alias":"MarkShawn2020","url":"https://github.com/MarkShawn2020","imageURL":"https://github.com/MarkShawn2020.png","key":"MarkShawn2020","page":null},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},{"name":"Michael Remediakis","alias":"mickremedi","url":"https://github.com/mickremedi","imageURL":"https://github.com/mickremedi.png","key":"mickremedi","page":null},{"name":"ModupeD","alias":"ModupeD","url":"https://github.com/ModupeD","imageURL":"https://github.com/ModupeD.png","key":"ModupeD","page":null},{"name":"Mogyuchi","alias":"Mogyuchi","url":"https://github.com/Mogyuchi","imageURL":"https://github.com/Mogyuchi.png","key":"Mogyuchi","page":null},{"name":"Mu-Jing-Tsai","alias":"moojing","url":"https://github.com/moojing","imageURL":"https://github.com/moojing.png","key":"moojing","page":null},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},{"name":"Marco Stroppel","alias":"mstroppel","url":"https://github.com/mstroppel","imageURL":"https://github.com/mstroppel.png","key":"mstroppel","page":null},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},{"name":"Naman Garg","alias":"NamanGarg2075","url":"https://github.com/NamanGarg2075","imageURL":"https://github.com/NamanGarg2075.png","key":"NamanGarg2075","page":null},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Maciek Palmowski","alias":"palmiak","url":"https://github.com/palmiak","imageURL":"https://github.com/palmiak.png","key":"palmiak","page":null},{"name":"Paul Razvan Berg","alias":"PaulRBerg","url":"https://github.com/PaulRBerg","imageURL":"https://github.com/PaulRBerg.png","key":"PaulRBerg","page":null},{"name":"Pinaki Bhattacharjee","alias":"pinakipb2","url":"https://github.com/pinakipb2","imageURL":"https://github.com/pinakipb2.png","key":"pinakipb2","page":null},{"name":"prateekbytes","alias":"prateekbytes","url":"https://github.com/prateekbytes","imageURL":"https://github.com/prateekbytes.png","key":"prateekbytes","page":null},{"name":"qwerzl","alias":"qwerzl","url":"https://github.com/qwerzl","imageURL":"https://github.com/qwerzl.png","key":"qwerzl","page":null},{"name":"Rashid","alias":"rashidmya","url":"https://github.com/rashidmya","imageURL":"https://github.com/rashidmya.png","key":"rashidmya","page":null},{"name":"Kolja","alias":"razzeee","url":"https://github.com/razzeee","imageURL":"https://github.com/razzeee.png","key":"razzeee","page":null},{"name":"Rapha\xebl Barbazza","alias":"rbarbazz","url":"https://github.com/rbarbazz","imageURL":"https://github.com/rbarbazz.png","key":"rbarbazz","page":null},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},{"name":"Chua Chee How","alias":"rojakcoder","url":"https://github.com/rojakcoder","imageURL":"https://github.com/rojakcoder.png","key":"rojakcoder","page":null},{"name":"rsteele6","alias":"rsteele6","url":"https://github.com/rsteele6","imageURL":"https://github.com/rsteele6.png","key":"rsteele6","page":null},{"name":"SADIK KUZU","alias":"sadikkuzu","url":"https://github.com/sadikkuzu","imageURL":"https://github.com/sadikkuzu.png","key":"sadikkuzu","page":null},{"name":"Sainan","alias":"Sainan","url":"https://github.com/Sainan","imageURL":"https://github.com/Sainan.png","key":"Sainan","page":null},{"name":"samatt14","alias":"samatt14","url":"https://github.com/samatt14","imageURL":"https://github.com/samatt14.png","key":"samatt14","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"Alex","alias":"sashashura","url":"https://github.com/sashashura","imageURL":"https://github.com/sashashura.png","key":"sashashura","page":null},{"name":"Marie","alias":"schneegansm","url":"https://github.com/schneegansm","imageURL":"https://github.com/schneegansm.png","key":"schneegansm","page":null},{"name":"Marco Kuper","alias":"scubamaggo","url":"https://github.com/scubamaggo","imageURL":"https://github.com/scubamaggo.png","key":"scubamaggo","page":null},{"name":"Shahriar","alias":"ShahriarKh","url":"https://github.com/ShahriarKh","imageURL":"https://github.com/ShahriarKh.png","key":"ShahriarKh","page":null},{"name":"Shashank Kumar","alias":"shawshankkumar","url":"https://github.com/shawshankkumar","imageURL":"https://github.com/shawshankkumar.png","key":"shawshankkumar","page":null},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},{"name":"Gareth Dwyer","alias":"sixhobbits","url":"https://github.com/sixhobbits","imageURL":"https://github.com/sixhobbits.png","key":"sixhobbits","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Surav Shrestha","alias":"suravshrestha","url":"https://github.com/suravshrestha","imageURL":"https://github.com/suravshrestha.png","key":"suravshrestha","page":null},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},{"name":"Tamal Anwar Chowdhury","alias":"tamalchowdhury","url":"https://github.com/tamalchowdhury","imageURL":"https://github.com/tamalchowdhury.png","key":"tamalchowdhury","page":null},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null},{"name":"James Kerrane","alias":"thatrobotdev","url":"https://github.com/thatrobotdev","imageURL":"https://github.com/thatrobotdev.png","key":"thatrobotdev","page":null},{"name":"thedevwonder","alias":"thedevwonder","url":"https://github.com/thedevwonder","imageURL":"https://github.com/thedevwonder.png","key":"thedevwonder","page":null},{"name":"Andr\xe9s Villanueva","alias":"Villanuevand","url":"https://github.com/Villanuevand","imageURL":"https://github.com/Villanuevand.png","key":"Villanuevand","page":null},{"name":"VinceCYLiao","alias":"VinceCYLiao","url":"https://github.com/VinceCYLiao","imageURL":"https://github.com/VinceCYLiao.png","key":"VinceCYLiao","page":null},{"name":"Waldir Pimenta","alias":"waldyrious","url":"https://github.com/waldyrious","imageURL":"https://github.com/waldyrious.png","key":"waldyrious","page":null},{"name":"Will Ceolin","alias":"wceolin","url":"https://github.com/wceolin","imageURL":"https://github.com/wceolin.png","key":"wceolin","page":null},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},{"name":"Jordan Manley","alias":"werner33","url":"https://github.com/werner33","imageURL":"https://github.com/werner33.png","key":"werner33","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"yosukekato165","alias":"yosukekato165","url":"https://github.com/yosukekato165","imageURL":"https://github.com/yosukekato165.png","key":"yosukekato165","page":null},{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-10-31T20:00","authors":["0420syj","abhinandanwadwa","Abinashbunty","adampatterson","adithyaakrishna","AFRUITPIE","AgentEnder","akshaybhalotia","allyw2002","amdshrif","amm98d","anaclumos","andrewnicols","antonk52","antonyoni","aqueeb","attitude","billy1624","biplavmz","bitpredator","BubbaJoe","chillinPanda","chubei","chudongvip","cm-igarashi-ryosuke","colinhacks","conlacda","dandv","danilowoz","DanRoscigno","DavidJFelix","dawei-wang","debs-obrien","Devansu-Yadav","Djunnni","Dr-Electron","e-minguez","edno","FlorinaPacurar","Foosballfan","forresst","FrancescoXX","fredrikstave","fxpby","gabrielcsapo","GalexyN","gazab","gracefullight","gregberge","harryzcy","heysujal","hidde","homotechsual","hslee2008","HumbleDeer","HyeokjinKang","jean-humann","jeengbe","jhcao23","jj-style","jodyheavener","johnnyreilly","JohnVicke","JorensM","Josh-Cena","juanpicado","KarthickSakthi","Kesyau","knownasnaffy","la55u","lanegoolsby","layershifter","lex111","lorenzolewis","maliMirkec","manuel-rw","MarkShawn2020","mcallisto","mickremedi","ModupeD","Mogyuchi","moojing","mrazauskas","mstroppel","mxschmitt","Mysterious-Dev","NamanGarg2075","ntucker","oluwatobiss","Oreoxmt","OzakIOne","palmiak","PaulRBerg","pinakipb2","prateekbytes","qwerzl","rashidmya","razzeee","rbarbazz","recallwei","rojakcoder","rsteele6","sadikkuzu","Sainan","samatt14","sanjaiyan-dev","sashashura","schneegansm","scubamaggo","ShahriarKh","shawshankkumar","shortcuts","shwaka","sixhobbits","slorber","suravshrestha","sykp241095","tamalchowdhury","tarunrajput","tats-u","thadguidry","thatrobotdev","thedevwonder","Villanuevand","VinceCYLiao","waldyrious","wceolin","webbertakken","werner33","yangshun","yosukekato165","Zwyx"]},"unlisted":false,"prevItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"nextItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#9316](https://github.com/facebook/docusaurus/pull/9316) chore: upgrade syntax highlighting dependencies, `prism-react-renderer` to v2, `react-live` to v4 ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#9348](https://github.com/facebook/docusaurus/pull/9348) chore: update node engine version 18 ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#9310](https://github.com/facebook/docusaurus/pull/9310) chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-tsconfig`, `docusaurus`\\n - [#9258](https://github.com/facebook/docusaurus/pull/9258) feat: Docusaurus v3 upgrades and require TypeScript 5 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9026](https://github.com/facebook/docusaurus/pull/9026) chore: remove facebook template ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9394](https://github.com/facebook/docusaurus/pull/9394) feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives ([@OzakIOne](https://github.com/OzakIOne))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9241](https://github.com/facebook/docusaurus/pull/9241) feat: support bun package manager in `create-docusaurus` ([@colinhacks](https://github.com/colinhacks))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`\\n - [#9152](https://github.com/facebook/docusaurus/pull/9152) feat(theme): add support for meta og locale and alternates ([@FlorinaPacurar](https://github.com/FlorinaPacurar))\\n - [#9028](https://github.com/facebook/docusaurus/pull/9028) feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page ([@slorber](https://github.com/slorber))\\n - [#8915](https://github.com/facebook/docusaurus/pull/8915) feat(theme): add queryString option to localeDropdown ([@wceolin](https://github.com/wceolin))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-validation`\\n - [#9171](https://github.com/facebook/docusaurus/pull/9171) feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9102](https://github.com/facebook/docusaurus/pull/9102) feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) ([@amdshrif](https://github.com/amdshrif))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9097](https://github.com/facebook/docusaurus/pull/9097) feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#9071](https://github.com/facebook/docusaurus/pull/9071) feat(pages): add support for missing SEO front matter + improve SEO docs ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8982](https://github.com/facebook/docusaurus/pull/8982) feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab ([@jj-style](https://github.com/jj-style))\\n - [#8870](https://github.com/facebook/docusaurus/pull/8870) feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8890](https://github.com/facebook/docusaurus/pull/8890) feat(theme): create more generic ThemedComponent util from ThemedImage ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `eslint-plugin`\\n - [#8384](https://github.com/facebook/docusaurus/pull/8384) feat(eslint-plugin): new prefer-docusaurus-heading rule ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`, `eslint-plugin`\\n - [#8156](https://github.com/facebook/docusaurus/pull/8156) feat: add eslint plugin no-html-links ([@JohnVicke](https://github.com/JohnVicke))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#8004](https://github.com/facebook/docusaurus/pull/8004) feat(docs,blog,pages): add support for \\"unlisted\\" front matter - hide md content in production ([@jodyheavener](https://github.com/jodyheavener))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#9446](https://github.com/facebook/docusaurus/pull/9446) fix(theme): fix useWindowSize React hydration issue ([@slorber](https://github.com/slorber))\\n - [#9276](https://github.com/facebook/docusaurus/pull/9276) fix(theme-common): remove useless useSyncExternalStore shim ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9437](https://github.com/facebook/docusaurus/pull/9437) fix(plugin-blog): blog archive should hide unlisted blog posts ([@slorber](https://github.com/slorber))\\n - [#9151](https://github.com/facebook/docusaurus/pull/9151) fix(content-blog): links in feed should be absolute ([@VinceCYLiao](https://github.com/VinceCYLiao))\\n- `docusaurus`\\n - [#9387](https://github.com/facebook/docusaurus/pull/9387) fix(core): log missing errorInfo in React 18 onRecoverableError callback ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#9309](https://github.com/facebook/docusaurus/pull/9309) fix(cli): disable vertical borders of the update notification ([@qwerzl](https://github.com/qwerzl))\\n - [#9112](https://github.com/facebook/docusaurus/pull/9112) fix(core): throw error if build folder already exists on initial clean ([@thedevwonder](https://github.com/thedevwonder))\\n - [#9006](https://github.com/facebook/docusaurus/pull/9006) fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades ([@0420syj](https://github.com/0420syj))\\n - [#7951](https://github.com/facebook/docusaurus/pull/7951) fix(core): make webpack HMR always listen to current location ([@jeengbe](https://github.com/jeengbe))\\n- `docusaurus-mdx-loader`\\n - [#9386](https://github.com/facebook/docusaurus/pull/9386) fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark ([@slorber](https://github.com/slorber))\\n - [#9262](https://github.com/facebook/docusaurus/pull/9262) fix(mdx-loader): improve mdxJsxTextElementToHtml ([@slorber](https://github.com/slorber))\\n - [#9202](https://github.com/facebook/docusaurus/pull/9202) fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior ([@yosukekato165](https://github.com/yosukekato165))\\n - [#9100](https://github.com/facebook/docusaurus/pull/9100) fix(mdx): fix for html multi-line comments ([@slorber](https://github.com/slorber))\\n - [#9091](https://github.com/facebook/docusaurus/pull/9091) fix(mdx-loader): loader error message should display stacktrace if no extra MDX details ([@slorber](https://github.com/slorber))\\n - [#8960](https://github.com/facebook/docusaurus/pull/8960) fix: allow html syntax in MDX v2 with format md ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9385](https://github.com/facebook/docusaurus/pull/9385) fix(theme): avoid rendering empty search container if site has no search plugin ([@slorber](https://github.com/slorber))\\n - [#9183](https://github.com/facebook/docusaurus/pull/9183) fix(theme): make Prism code block language / additionalLanguages case insensitive ([@heysujal](https://github.com/heysujal))\\n - [#9216](https://github.com/facebook/docusaurus/pull/9216) fix(theme): fix typo in swizzle component config ([@sixhobbits](https://github.com/sixhobbits))\\n - [#9093](https://github.com/facebook/docusaurus/pull/9093) fix(theme): support details/summary in CommonMark + add md dogfood test cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9369](https://github.com/facebook/docusaurus/pull/9369) fix(mdx-loader): prevent Open Graph images from being inserted as base64 ([@Zwyx](https://github.com/Zwyx))\\n- `docusaurus-theme-translations`\\n - [#9362](https://github.com/facebook/docusaurus/pull/9362) fix(theme-translations): add Japanese translation for \\"warning\\" ([@tats-u](https://github.com/tats-u))\\n - [#9321](https://github.com/facebook/docusaurus/pull/9321) fix(theme-translations): add missing zh-Hans messages ([@chudongvip](https://github.com/chudongvip))\\n - [#9338](https://github.com/facebook/docusaurus/pull/9338) fix(theme-translations): complete and fix hungarian translations ([@la55u](https://github.com/la55u))\\n - [#9292](https://github.com/facebook/docusaurus/pull/9292) fix(theme-translations): add missing Spanish theme translations ([@Villanuevand](https://github.com/Villanuevand))\\n - [#9021](https://github.com/facebook/docusaurus/pull/9021) fix(theme-transalations): fix Swedish translation of \\"last updated\\" ([@gazab](https://github.com/gazab))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n - [#9269](https://github.com/facebook/docusaurus/pull/9269) fix(theme): improve docs sidebar category caret aria-label accessibility ([@pinakipb2](https://github.com/pinakipb2))\\n- Other\\n - [#9260](https://github.com/facebook/docusaurus/pull/9260) fix(website): fix showcase search input ([@biplavmz](https://github.com/biplavmz))\\n - [#8193](https://github.com/facebook/docusaurus/pull/8193) fix(website): mobile scroll on homepage announcement ([@maliMirkec](https://github.com/maliMirkec))\\n - [#8042](https://github.com/facebook/docusaurus/pull/8042) fix(website): fix blog post social card ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9217](https://github.com/facebook/docusaurus/pull/9217) fix(create-docusaurus): increase Browserslist support query in dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`, `docusaurus`\\n - [#9160](https://github.com/facebook/docusaurus/pull/9160) fix(core): handle single quotes inside file paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`\\n - [#9116](https://github.com/facebook/docusaurus/pull/9116) fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9046](https://github.com/facebook/docusaurus/pull/9046) fix(utils): better handling of code blocks in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8927](https://github.com/facebook/docusaurus/pull/8927) fix(utils): make Markdown link replacement much more rigorous ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7864](https://github.com/facebook/docusaurus/pull/7864) fix(utils): always match exclusion root dirs as complete folder paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7801](https://github.com/facebook/docusaurus/pull/7801) fix(utils): recognize ~~~ as code fences in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#8872](https://github.com/facebook/docusaurus/pull/8872) fix(core): better error logging on SSR/dev failures + log stacktraces and error causes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#8258](https://github.com/facebook/docusaurus/pull/8258) fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as \\"/\\" ([@Djunnni](https://github.com/Djunnni))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8319](https://github.com/facebook/docusaurus/pull/8319) fix(docs,theme): auto-generated category index should not display unlisted content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#8015](https://github.com/facebook/docusaurus/pull/8015) fix(live-codeblock): add error boundary to live code preview ([@rashidmya](https://github.com/rashidmya))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9051](https://github.com/facebook/docusaurus/pull/9051) perf(core): use React 18 startTransition for hydration ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n - [#8081](https://github.com/facebook/docusaurus/pull/8081) perf(core): move scripts to document head + defer ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#8972](https://github.com/facebook/docusaurus/pull/8972) fix: remove useless js-loader in front of mdx-loader ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9438](https://github.com/facebook/docusaurus/pull/9438) refactor(blog-plugin): blog archive reverse ordering of posts ([@slorber](https://github.com/slorber))\\n - [#9184](https://github.com/facebook/docusaurus/pull/9184) fix(theme): change schema.org itemType prop urls from http to https ([@thedevwonder](https://github.com/thedevwonder))\\n- `docusaurus`\\n - [#9381](https://github.com/facebook/docusaurus/pull/9381) feat(core): throw error when official docusaurus dependencies use different versions ([@JorensM](https://github.com/JorensM))\\n- `docusaurus-theme-translations`\\n - [#9302](https://github.com/facebook/docusaurus/pull/9302) chore(theme-translations): complete zh-Hant translations ([@qwerzl](https://github.com/qwerzl))\\n - [#9025](https://github.com/facebook/docusaurus/pull/9025) chore(theme-translations): complete it translations ([@bitpredator](https://github.com/bitpredator))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#9133](https://github.com/facebook/docusaurus/pull/9133) fix(init): change initial site URL to one that is safe for the future ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8150](https://github.com/facebook/docusaurus/pull/8150) fix(theme-classic): polish admonition details, render title-only admonitions ([@attitude](https://github.com/attitude))\\n- `docusaurus-plugin-google-gtag`\\n - [#8143](https://github.com/facebook/docusaurus/pull/8143) refactor(plugin-gtag): update gtag plugin to modern SPA recommendations ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#9452](https://github.com/facebook/docusaurus/pull/9452) docs: v3 upgrade guide should mention MDX v1 compat options ([@slorber](https://github.com/slorber))\\n - [#9430](https://github.com/facebook/docusaurus/pull/9430) docs: update Kinsta deployment documentation ([@palmiak](https://github.com/palmiak))\\n - [#9417](https://github.com/facebook/docusaurus/pull/9417) docs: add Docusaurus v3.0 upgrade guide ([@slorber](https://github.com/slorber))\\n - [#9396](https://github.com/facebook/docusaurus/pull/9396) docs: fix typos in website/docs/i18n/i18n-git.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9397](https://github.com/facebook/docusaurus/pull/9397) docs: fix typos in website/docs/migration/migration-manual.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9388](https://github.com/facebook/docusaurus/pull/9388) docs: fix algolia crowler config template link for v3 ([@slorber](https://github.com/slorber))\\n - [#9377](https://github.com/facebook/docusaurus/pull/9377) docs(deployment): add permissions config to github action file in v2.4.3 ([@chillinPanda](https://github.com/chillinPanda))\\n - [#9333](https://github.com/facebook/docusaurus/pull/9333) docs: \\"Preparing your site for Docusaurus v3\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9330](https://github.com/facebook/docusaurus/pull/9330) docs: \\"Upgrading frontend dependencies with confidence\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9288](https://github.com/facebook/docusaurus/pull/9288) docs: fix bad link for create doc ([@forresst](https://github.com/forresst))\\n - [#9267](https://github.com/facebook/docusaurus/pull/9267) docs: fix typo in docs-introduction ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n - [#9247](https://github.com/facebook/docusaurus/pull/9247) docs: Reword comparison between React authoring and CSS authoring ([@hidde](https://github.com/hidde))\\n - [#9223](https://github.com/facebook/docusaurus/pull/9223) docs: fix grammatical error, rewrite sentence to make clearer ([@thatrobotdev](https://github.com/thatrobotdev))\\n - [#9233](https://github.com/facebook/docusaurus/pull/9233) docs(website): Add a \\"clearAll\\" Feature to site showcase ([@biplavmz](https://github.com/biplavmz))\\n - [#9180](https://github.com/facebook/docusaurus/pull/9180) docs: remove \'import type\' declaration in javascript snippet ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9177](https://github.com/facebook/docusaurus/pull/9177) docs: improve the opening sentence\'s clarity ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9149](https://github.com/facebook/docusaurus/pull/9149) docs: improve yarn deps upgrade command ([@webbertakken](https://github.com/webbertakken))\\n - [#9139](https://github.com/facebook/docusaurus/pull/9139) docs: add Flightcontrol as a deployment option ([@ModupeD](https://github.com/ModupeD))\\n - [#9082](https://github.com/facebook/docusaurus/pull/9082) docs: fix themeConfig.prism.defaultLanguage table api ref docs ([@razzeee](https://github.com/razzeee))\\n - [#9074](https://github.com/facebook/docusaurus/pull/9074) docs: fix filenames in docs/swizzling.mdx ([@shwaka](https://github.com/shwaka))\\n - [#9065](https://github.com/facebook/docusaurus/pull/9065) docs: update link for commonly used languages ([@heysujal](https://github.com/heysujal))\\n - [#9055](https://github.com/facebook/docusaurus/pull/9055) docs: update outdated links in showcase ([@manuel-rw](https://github.com/manuel-rw))\\n - [#9063](https://github.com/facebook/docusaurus/pull/9063) docs: add @markprompt/docusaurus-theme-search ([@schneegansm](https://github.com/schneegansm))\\n - [#9033](https://github.com/facebook/docusaurus/pull/9033) docs: update info for community plugin docusaurus2-graphql-doc-generator ([@edno](https://github.com/edno))\\n - [#9044](https://github.com/facebook/docusaurus/pull/9044) docs: fix prism theme broken link in code blocks docs ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n - [#9043](https://github.com/facebook/docusaurus/pull/9043) docs: fix grammar typo in swizzling.mdx ([@adampatterson](https://github.com/adampatterson))\\n - [#9018](https://github.com/facebook/docusaurus/pull/9018) docs: fix link to rehype ([@Mogyuchi](https://github.com/Mogyuchi))\\n - [#8993](https://github.com/facebook/docusaurus/pull/8993) docs: fix broken link in code blocks docs ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n - [#8975](https://github.com/facebook/docusaurus/pull/8975) docs: update link in md code blocks section ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8976](https://github.com/facebook/docusaurus/pull/8976) docs: update broken links theme configuration page ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8904](https://github.com/facebook/docusaurus/pull/8904) docs: fix broken link to Prism includeLangs.js default list of languages ([@conlacda](https://github.com/conlacda))\\n - [#8951](https://github.com/facebook/docusaurus/pull/8951) docs: mention equivalent config syntaxes ([@thadguidry](https://github.com/thadguidry))\\n - [#8950](https://github.com/facebook/docusaurus/pull/8950) docs: bidirectional link between api config and guide config ([@thadguidry](https://github.com/thadguidry))\\n - [#8953](https://github.com/facebook/docusaurus/pull/8953) docs: mention blog truncating marker edge case ([@allyw2002](https://github.com/allyw2002))\\n - [#8941](https://github.com/facebook/docusaurus/pull/8941) docs: rewrite some docs for mdx v2 ([@slorber](https://github.com/slorber))\\n - [#8943](https://github.com/facebook/docusaurus/pull/8943) docs: mention docusaurus.community site in resources ([@thadguidry](https://github.com/thadguidry))\\n - [#8920](https://github.com/facebook/docusaurus/pull/8920) docs: mdx-js is using v2 for next edition ([@jhcao23](https://github.com/jhcao23))\\n - [#8888](https://github.com/facebook/docusaurus/pull/8888) docs: improve sidebar items custom props docs ([@slorber](https://github.com/slorber))\\n - [#8877](https://github.com/facebook/docusaurus/pull/8877) docs: add \\"permissions.content: write\\" to GH workflow examples ([@e-minguez](https://github.com/e-minguez))\\n - [#8845](https://github.com/facebook/docusaurus/pull/8845) docs: add description on blog post file/folder naming conventions and date extraction patterns ([@rojakcoder](https://github.com/rojakcoder))\\n - [#8865](https://github.com/facebook/docusaurus/pull/8865) docs: correct small grammar error ([@werner33](https://github.com/werner33))\\n - [#8830](https://github.com/facebook/docusaurus/pull/8830) docs: link to mermaid config types ([@PaulRBerg](https://github.com/PaulRBerg))\\n - [#8804](https://github.com/facebook/docusaurus/pull/8804) docs: update suggestion for OSS meta projects ([@antonk52](https://github.com/antonk52))\\n - [#8788](https://github.com/facebook/docusaurus/pull/8788) docs: remove problematic mdx2 anchor id docs for MDX 2 migration ([@slorber](https://github.com/slorber))\\n - [#8780](https://github.com/facebook/docusaurus/pull/8780) docs: fix localhost url without link ([@slorber](https://github.com/slorber))\\n - [#8779](https://github.com/facebook/docusaurus/pull/8779) docs: v2 docs should discourage the usage of a lower-case MDX component (will not work in v3) ([@slorber](https://github.com/slorber))\\n - [#8761](https://github.com/facebook/docusaurus/pull/8761) docs: add mention that themeConfig.footer.copyright supports html strings ([@fxpby](https://github.com/fxpby))\\n - [#8723](https://github.com/facebook/docusaurus/pull/8723) docs: add TypeScript playgrounds to docusaurus.new + Playground page ([@slorber](https://github.com/slorber))\\n - [#8709](https://github.com/facebook/docusaurus/pull/8709) docs: add dark mode version of BrowserStack logo ([@fredrikstave](https://github.com/fredrikstave))\\n - [#8642](https://github.com/facebook/docusaurus/pull/8642) docs: clarify query string behavior ([@homotechsual](https://github.com/homotechsual))\\n - [#8576](https://github.com/facebook/docusaurus/pull/8576) docs(playground): use CodeSandbox cloud sandboxes ([@danilowoz](https://github.com/danilowoz))\\n - [#8543](https://github.com/facebook/docusaurus/pull/8543) docs: add link to pluralization docs ([@homotechsual](https://github.com/homotechsual))\\n - [#8556](https://github.com/facebook/docusaurus/pull/8556) docs: document plugin-content-pages wrapperClassName frontmatter. ([@homotechsual](https://github.com/homotechsual))\\n - [#8548](https://github.com/facebook/docusaurus/pull/8548) docs: fix typo \'validationOptions\' ([@gracefullight](https://github.com/gracefullight))\\n - [#8509](https://github.com/facebook/docusaurus/pull/8509) docs(website): fix broken external links wrongly modified to use the .mdx extension (ex: github README.mdx) ([@Kesyau](https://github.com/Kesyau))\\n - [#8507](https://github.com/facebook/docusaurus/pull/8507) docs: blog + community + dogfood docs should use .mdx extension ([@slorber](https://github.com/slorber))\\n - [#8490](https://github.com/facebook/docusaurus/pull/8490) docs(website): use .mdx extension for every docs ([@slorber](https://github.com/slorber))\\n - [#8484](https://github.com/facebook/docusaurus/pull/8484) docs: `plugin-content-sitemap` -> `plugin-sitemap` ([@chubei](https://github.com/chubei))\\n - [#8454](https://github.com/facebook/docusaurus/pull/8454) fix(docs): Update link for tooljet website(broken) ([@shawshankkumar](https://github.com/shawshankkumar))\\n - [#8443](https://github.com/facebook/docusaurus/pull/8443) docs: fix website home testimonials broken image URLs ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n - [#8438](https://github.com/facebook/docusaurus/pull/8438) docs: add hyperlink to swizzling in Search page ([@dandv](https://github.com/dandv))\\n - [#8431](https://github.com/facebook/docusaurus/pull/8431) docs: add diagrams page to 2.2.0 sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8307](https://github.com/facebook/docusaurus/pull/8307) docs: clarify additionalLanguages with custom language definitions. ([@homotechsual](https://github.com/homotechsual))\\n - [#8390](https://github.com/facebook/docusaurus/pull/8390) docs: changed actions/checkout version from 2 to 3 ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n - [#8262](https://github.com/facebook/docusaurus/pull/8262) docs: fix links to external plugin description ([@scubamaggo](https://github.com/scubamaggo))\\n - [#8375](https://github.com/facebook/docusaurus/pull/8375) docs: add Kinsta to deployment page ([@palmiak](https://github.com/palmiak))\\n - [#8417](https://github.com/facebook/docusaurus/pull/8417) docs: document theme-mermaid in API sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8392](https://github.com/facebook/docusaurus/pull/8392) docs: add i18n guide doc should link to i18n core config doc ([@mcallisto](https://github.com/mcallisto))\\n - [#8388](https://github.com/facebook/docusaurus/pull/8388) docs: point to where commit types are listed ([@dandv](https://github.com/dandv))\\n - [#8352](https://github.com/facebook/docusaurus/pull/8352) docs: actually demo the zero-width space workaround in MDX ([@waldyrious](https://github.com/waldyrious))\\n - [#8363](https://github.com/facebook/docusaurus/pull/8363) docs: fix unclosed admonition code block ([@Zwyx](https://github.com/Zwyx))\\n - [#8364](https://github.com/facebook/docusaurus/pull/8364) docs: autogenerated page comment does not matching dirName in examples ([@HumbleDeer](https://github.com/HumbleDeer))\\n - [#8359](https://github.com/facebook/docusaurus/pull/8359) docs: fix anchor link `#customFields` ([@Zwyx](https://github.com/Zwyx))\\n - [#8320](https://github.com/facebook/docusaurus/pull/8320) docs: remove blog.johnnyreilly.com Google Analytics tag from docs part 2 ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8335](https://github.com/facebook/docusaurus/pull/8335) docs: use Mermaid diagram for routing page ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n - [#8313](https://github.com/facebook/docusaurus/pull/8313) docs: link to migration guide from Blogger to Docusaurus / remove blog.johnnyreilly.com Google Analytics tag from docs ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8292](https://github.com/facebook/docusaurus/pull/8292) docs: document tag types for insertHtmlContent ([@homotechsual](https://github.com/homotechsual))\\n - [#8272](https://github.com/facebook/docusaurus/pull/8272) docs: fix mermaid theme options typo ([@ntucker](https://github.com/ntucker))\\n - [#8209](https://github.com/facebook/docusaurus/pull/8209) docs: removing community resource docusaurus-plugin-relative-paths ([@ShahriarKh](https://github.com/ShahriarKh))\\n - [#8146](https://github.com/facebook/docusaurus/pull/8146) docs(content-docs): add api doc for displayed_sidebar front matter ([@slorber](https://github.com/slorber))\\n - [#8115](https://github.com/facebook/docusaurus/pull/8115) docs: add caveat about using Translate in string contexts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8053](https://github.com/facebook/docusaurus/pull/8053) docs: document usage of docs `frontMatter.custom_edit_url: null` ([@homotechsual](https://github.com/homotechsual))\\n - [#8010](https://github.com/facebook/docusaurus/pull/8010) docs(showcase): add 74 new showcase sites ([@slorber](https://github.com/slorber))\\n - [#7955](https://github.com/facebook/docusaurus/pull/7955) docs: add docusaurus-post-generator to community resource list ([@moojing](https://github.com/moojing))\\n - [#7906](https://github.com/facebook/docusaurus/pull/7906) docs: add TOC heading level options to guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7884](https://github.com/facebook/docusaurus/pull/7884) docs: add baseUrl to example tsconfig ([@Foosballfan](https://github.com/Foosballfan))\\n - [#7835](https://github.com/facebook/docusaurus/pull/7835) docs: update workbox doc link ([@hslee2008](https://github.com/hslee2008))\\n - [#7799](https://github.com/facebook/docusaurus/pull/7799) docs: formally document how admonitions can be customized ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7796](https://github.com/facebook/docusaurus/pull/7796) docs: modify the description of deploying to Netlify ([@Oreoxmt](https://github.com/Oreoxmt))\\n- `docusaurus-logger`\\n - [#9210](https://github.com/facebook/docusaurus/pull/9210) docs: add the missing import logger statement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8047](https://github.com/facebook/docusaurus/pull/8047) docs: improve alt messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8944](https://github.com/facebook/docusaurus/pull/8944) polish(create-docusaurus): add comment in config to mention different ways to declare config + doc link ([@thadguidry](https://github.com/thadguidry))\\n - [#8323](https://github.com/facebook/docusaurus/pull/8323) docs: fix typo \'internalization\' ([@dandv](https://github.com/dandv))\\n- `docusaurus-plugin-ideal-image`\\n - [#8630](https://github.com/facebook/docusaurus/pull/8630) docs: normalize README for ideal-image plugin ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-mdx-loader`\\n - [#8419](https://github.com/facebook/docusaurus/pull/8419) docs: document siteConfig.markdown + better mdx-loader retrocompat ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- Other\\n - [#9440](https://github.com/facebook/docusaurus/pull/9440) chore(deps): bump actions/setup-node from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9441](https://github.com/facebook/docusaurus/pull/9441) chore(deps): bump actions/checkout from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9367](https://github.com/facebook/docusaurus/pull/9367) chore(deps): bump postcss from 8.4.26 to 8.4.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9344](https://github.com/facebook/docusaurus/pull/9344) chore(deps): bump actions/checkout from 4.0.0 to 4.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9298](https://github.com/facebook/docusaurus/pull/9298) chore(deps): bump actions/dependency-review-action from 3.0.8 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9277](https://github.com/facebook/docusaurus/pull/9277) chore(deps): bump actions/checkout from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9251](https://github.com/facebook/docusaurus/pull/9251) chore(deps): bump actions/dependency-review-action from 3.0.7 to 3.0.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9250](https://github.com/facebook/docusaurus/pull/9250) chore(deps): bump marocchino/sticky-pull-request-comment from 2.7.0 to 2.8.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9227](https://github.com/facebook/docusaurus/pull/9227) chore(deps): bump actions/dependency-review-action from 3.0.6 to 3.0.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9174](https://github.com/facebook/docusaurus/pull/9174) chore(deps): bump marocchino/sticky-pull-request-comment from 2.6.2 to 2.7.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9096](https://github.com/facebook/docusaurus/pull/9096) chore(deps): bump semver from 7.3.8 to 7.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9061](https://github.com/facebook/docusaurus/pull/9061) chore(deps): bump github/codeql-action from 2.3.6 to 2.13.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9038](https://github.com/facebook/docusaurus/pull/9038) chore(deps): bump github/codeql-action from 2.3.5 to 2.3.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9039](https://github.com/facebook/docusaurus/pull/9039) chore(deps): bump actions/dependency-review-action from 3.0.4 to 3.0.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9019](https://github.com/facebook/docusaurus/pull/9019) chore(deps): bump github/codeql-action from 2.3.3 to 2.3.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8964](https://github.com/facebook/docusaurus/pull/8964) chore(deps): bump github/codeql-action from 2.3.2 to 2.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8955](https://github.com/facebook/docusaurus/pull/8955) chore(deps): bump github/codeql-action from 2.3.0 to 2.3.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8922](https://github.com/facebook/docusaurus/pull/8922) chore(deps): bump marocchino/sticky-pull-request-comment from 2.5.0 to 2.6.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8923](https://github.com/facebook/docusaurus/pull/8923) chore(deps): bump treosh/lighthouse-ci-action from 9.6.8 to 10.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8924](https://github.com/facebook/docusaurus/pull/8924) chore(deps): bump github/codeql-action from 2.2.12 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8899](https://github.com/facebook/docusaurus/pull/8899) chore(deps): bump github/codeql-action from 2.2.11 to 2.2.12 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8900](https://github.com/facebook/docusaurus/pull/8900) chore(deps): bump actions/checkout from 3.5.0 to 3.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8879](https://github.com/facebook/docusaurus/pull/8879) chore(deps): bump actions/github-script from 6.4.0 to 6.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8878](https://github.com/facebook/docusaurus/pull/8878) chore(deps): bump github/codeql-action from 2.2.9 to 2.2.11 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8836](https://github.com/facebook/docusaurus/pull/8836) chore(deps): bump github/codeql-action from 2.2.7 to 2.2.9 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8837](https://github.com/facebook/docusaurus/pull/8837) chore(deps): bump actions/checkout from 3.4.0 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8797](https://github.com/facebook/docusaurus/pull/8797) chore(deps): bump actions/checkout from 3.3.0 to 3.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8796](https://github.com/facebook/docusaurus/pull/8796) chore(deps): bump actions/dependency-review-action from 3.0.3 to 3.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8795](https://github.com/facebook/docusaurus/pull/8795) chore(deps): bump github/codeql-action from 2.2.6 to 2.2.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8766](https://github.com/facebook/docusaurus/pull/8766) chore(deps): bump treosh/lighthouse-ci-action from 9.3.1 to 9.6.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8767](https://github.com/facebook/docusaurus/pull/8767) chore(deps): bump github/codeql-action from 2.2.5 to 2.2.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8739](https://github.com/facebook/docusaurus/pull/8739) chore(deps): bump github/codeql-action from 2.2.4 to 2.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8663](https://github.com/facebook/docusaurus/pull/8663) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.1 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8662](https://github.com/facebook/docusaurus/pull/8662) chore(deps): bump github/codeql-action from 2.2.2 to 2.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8638](https://github.com/facebook/docusaurus/pull/8638) chore(deps): bump github/codeql-action from 2.2.1 to 2.2.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8624](https://github.com/facebook/docusaurus/pull/8624) chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8604](https://github.com/facebook/docusaurus/pull/8604) chore(deps): bump actions/github-script from 6.3.3 to 6.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8605](https://github.com/facebook/docusaurus/pull/8605) chore(deps): bump github/codeql-action from 2.1.39 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8572](https://github.com/facebook/docusaurus/pull/8572) chore(deps): bump github/codeql-action from 2.1.38 to 2.1.39 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8553](https://github.com/facebook/docusaurus/pull/8553) chore(deps): bump github/codeql-action from 2.1.37 to 2.1.38 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8531](https://github.com/facebook/docusaurus/pull/8531) chore(deps): bump actions/checkout from 3.2.0 to 3.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8532](https://github.com/facebook/docusaurus/pull/8532) chore(deps): bump actions/dependency-review-action from 3.0.2 to 3.0.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8533](https://github.com/facebook/docusaurus/pull/8533) chore(deps): bump actions/setup-node from 3.5.1 to 3.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8496](https://github.com/facebook/docusaurus/pull/8496) chore(deps): bump jakepartusch/wait-for-netlify-action from 1.3 to 1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8464](https://github.com/facebook/docusaurus/pull/8464) chore(deps): bump actions/dependency-review-action from 3.0.1 to 3.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8440](https://github.com/facebook/docusaurus/pull/8440) chore(deps): bump github/codeql-action from 2.1.36 to 2.1.37 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8435](https://github.com/facebook/docusaurus/pull/8435) chore(deps): bump github/codeql-action from 2.1.35 to 2.1.36 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8434](https://github.com/facebook/docusaurus/pull/8434) chore(deps): bump actions/checkout from 3.1.0 to 3.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8412](https://github.com/facebook/docusaurus/pull/8412) chore(deps): bump github/codeql-action from 2.1.32 to 2.1.35 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8385](https://github.com/facebook/docusaurus/pull/8385) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.0 to 2.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8360](https://github.com/facebook/docusaurus/pull/8360) chore(deps): bump actions/dependency-review-action from 3.0.0 to 3.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8341](https://github.com/facebook/docusaurus/pull/8341) chore(deps): bump github/codeql-action from 2.1.31 to 2.1.32 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8340](https://github.com/facebook/docusaurus/pull/8340) chore(deps): bump actions/dependency-review-action from 2.5.1 to 3.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8339](https://github.com/facebook/docusaurus/pull/8339) chore(deps): bump treosh/lighthouse-ci-action from 9.3.0 to 9.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8295](https://github.com/facebook/docusaurus/pull/8295) chore(deps): bump github/codeql-action from 2.1.29 to 2.1.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8271](https://github.com/facebook/docusaurus/pull/8271) chore(deps): bump github/codeql-action from 2.1.28 to 2.1.29 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8270](https://github.com/facebook/docusaurus/pull/8270) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.1 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8240](https://github.com/facebook/docusaurus/pull/8240) chore(deps): bump actions/dependency-review-action from 2.5.0 to 2.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8241](https://github.com/facebook/docusaurus/pull/8241) chore(deps): bump github/codeql-action from 2.1.27 to 2.1.28 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8221](https://github.com/facebook/docusaurus/pull/8221) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.0 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8220](https://github.com/facebook/docusaurus/pull/8220) chore(deps): bump actions/dependency-review-action from 2.4.0 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8219](https://github.com/facebook/docusaurus/pull/8219) chore(deps): bump actions/github-script from 6.3.1 to 6.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8222](https://github.com/facebook/docusaurus/pull/8222) chore(deps): bump actions/setup-node from 3.5.0 to 3.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8200](https://github.com/facebook/docusaurus/pull/8200) chore(deps): bump github/codeql-action from 2.1.26 to 2.1.27 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8199](https://github.com/facebook/docusaurus/pull/8199) chore(deps): bump actions/checkout from 3.0.2 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8169](https://github.com/facebook/docusaurus/pull/8169) chore(deps): bump github/codeql-action from 2.1.22 to 2.1.26 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8170](https://github.com/facebook/docusaurus/pull/8170) chore(deps): bump actions/setup-node from 3.4.1 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8167](https://github.com/facebook/docusaurus/pull/8167) chore(deps): bump actions/github-script from 6.2.0 to 6.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8168](https://github.com/facebook/docusaurus/pull/8168) chore(deps): bump actions/dependency-review-action from 2.1.0 to 2.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8064](https://github.com/facebook/docusaurus/pull/8064) chore: bump react-medium-image-zoom ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8051](https://github.com/facebook/docusaurus/pull/8051) chore(deps): bump github/codeql-action from 2.1.21 to 2.1.22 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8019](https://github.com/facebook/docusaurus/pull/8019) chore(deps): bump actions/github-script from 6.1.1 to 6.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8020](https://github.com/facebook/docusaurus/pull/8020) chore(deps): bump github/codeql-action from 2.1.20 to 2.1.21 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7988](https://github.com/facebook/docusaurus/pull/7988) chore(deps): bump actions/dependency-review-action from 2.0.4 to 2.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7987](https://github.com/facebook/docusaurus/pull/7987) chore(deps): bump github/codeql-action from 2.1.18 to 2.1.20 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7957](https://github.com/facebook/docusaurus/pull/7957) chore(deps): bump actions/github-script from 6.1.0 to 6.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7925](https://github.com/facebook/docusaurus/pull/7925) chore(deps): bump github/codeql-action from 2.1.17 to 2.1.18 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7879](https://github.com/facebook/docusaurus/pull/7879) chore(deps): bump github/codeql-action from 2.1.16 to 2.1.17 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7804](https://github.com/facebook/docusaurus/pull/7804) chore(deps): bump github/codeql-action from 2.1.15 to 2.1.16 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7805](https://github.com/facebook/docusaurus/pull/7805) chore(deps): bump actions/dependency-review-action from 2.0.2 to 2.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7806](https://github.com/facebook/docusaurus/pull/7806) chore(deps): bump actions/setup-node from 3.4.0 to 3.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#9148](https://github.com/facebook/docusaurus/pull/9148) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8749](https://github.com/facebook/docusaurus/pull/8749) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8534](https://github.com/facebook/docusaurus/pull/8534) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8926](https://github.com/facebook/docusaurus/pull/8926) chore: upgrade TypeScript to v5.0 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#8537](https://github.com/facebook/docusaurus/pull/8537) chore: bump dependencies major versions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7993](https://github.com/facebook/docusaurus/pull/7993) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7883](https://github.com/facebook/docusaurus/pull/7883) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7822](https://github.com/facebook/docusaurus/pull/7822) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-pwa`, `docusaurus`, `eslint-plugin`\\n - [#7794](https://github.com/facebook/docusaurus/pull/7794) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-migrate`\\n - [#9400](https://github.com/facebook/docusaurus/pull/9400) chore: remove docusaurus-migrate ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9320](https://github.com/facebook/docusaurus/pull/9320) chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9304](https://github.com/facebook/docusaurus/pull/9304) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n- Other\\n - [#9264](https://github.com/facebook/docusaurus/pull/9264) ci: only install Chromium for Playwright Argos tests ([@mxschmitt](https://github.com/mxschmitt))\\n - [#9245](https://github.com/facebook/docusaurus/pull/9245) chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n - [#8947](https://github.com/facebook/docusaurus/pull/8947) test: add visual regression tests with Argos CI ([@slorber](https://github.com/slorber))\\n - [#8911](https://github.com/facebook/docusaurus/pull/8911) chore: migrate website config to createConfigAsync ([@slorber](https://github.com/slorber))\\n - [#8578](https://github.com/facebook/docusaurus/pull/8578) docs: fix dead anchor for issue reporting guidelines in template ([@Sainan](https://github.com/Sainan))\\n - [#8447](https://github.com/facebook/docusaurus/pull/8447) chore: update lerna to v6.2.0 ([@AgentEnder](https://github.com/AgentEnder))\\n - [#7967](https://github.com/facebook/docusaurus/pull/7967) test: improve e2e verdaccio configuration ([@juanpicado](https://github.com/juanpicado))\\n - [#7863](https://github.com/facebook/docusaurus/pull/7863) docs: publish 2.0.0 release blog post + adapt website for the launch ([@slorber](https://github.com/slorber))\\n - [#7828](https://github.com/facebook/docusaurus/pull/7828) misc: change showcase submission process, use GitHub discussion ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9195](https://github.com/facebook/docusaurus/pull/9195) test(blog-plugin): fix ability to generate proper blog website fixture build snapshot ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#9024](https://github.com/facebook/docusaurus/pull/9024) docs: remove Meta Data Policy footer link on website ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- `docusaurus`\\n - [#8660](https://github.com/facebook/docusaurus/pull/8660) chore: bump update-notifier ([@layershifter](https://github.com/layershifter))\\n\\n## Committers: 132\\n\\n- 0x24Karthick ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- Abhinandan Wadhwa ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n- Abinash Satapathy ([@Abinashbunty](https://github.com/Abinashbunty))\\n- Adam Patterson ([@adampatterson](https://github.com/adampatterson))\\n- Adithya Krishna ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n- Ahmad Shrif ([@amdshrif](https://github.com/amdshrif))\\n- Ahmed Mustafa Malik ([@amm98d](https://github.com/amm98d))\\n- Akshay Bhalotia ([@akshaybhalotia](https://github.com/akshaybhalotia))\\n- Alex ([@sashashura](https://github.com/sashashura))\\n- Alexander Nguyen ([@GalexyN](https://github.com/GalexyN))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Andr\xe9s Villanueva ([@Villanuevand](https://github.com/Villanuevand))\\n- Anna ([@HumbleDeer](https://github.com/HumbleDeer))\\n- Anton Kastritskii ([@antonk52](https://github.com/antonk52))\\n- Antony Onipko ([@antonyoni](https://github.com/antonyoni))\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Aqueeb ([@aqueeb](https://github.com/aqueeb))\\n- Bei Chu ([@chubei](https://github.com/chubei))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Biplav Kumar Mazumdar ([@biplavmz](https://github.com/biplavmz))\\n- Bruce ([@recallwei](https://github.com/recallwei))\\n- Charles Killer ([@Foosballfan](https://github.com/Foosballfan))\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- Chua Chee How ([@rojakcoder](https://github.com/rojakcoder))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Colin McDonnell ([@colinhacks](https://github.com/colinhacks))\\n- Coupy ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n- Craigory Coppola ([@AgentEnder](https://github.com/AgentEnder))\\n- Dan Dascalescu ([@dandv](https://github.com/dandv))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Danilo Woznica ([@danilowoz](https://github.com/danilowoz))\\n- David J. Felix ([@DavidJFelix](https://github.com/DavidJFelix))\\n- Debbie O\'Brien ([@debs-obrien](https://github.com/debs-obrien))\\n- Devansu Yadav ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- Dinh Bao Dang ([@chillinPanda](https://github.com/chillinPanda))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Eduardo M\xednguez ([@e-minguez](https://github.com/e-minguez))\\n- Eunkwang Shin ([@gracefullight](https://github.com/gracefullight))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Francesco Ciulla ([@FrancescoXX](https://github.com/FrancescoXX))\\n- Fredrik Stave ([@fredrikstave](https://github.com/fredrikstave))\\n- Fxpby ([@fxpby](https://github.com/fxpby))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Gareth Dwyer ([@sixhobbits](https://github.com/sixhobbits))\\n- Greg Berg\xe9 ([@gregberge](https://github.com/gregberge))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Gustav Ton\xe9r ([@gazab](https://github.com/gazab))\\n- Hayden Hong ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n- Hidde de Vries ([@hidde](https://github.com/hidde))\\n- Hyunseung ([@hslee2008](https://github.com/hslee2008))\\n- JJ Style ([@jj-style](https://github.com/jj-style))\\n- James Kerrane ([@thatrobotdev](https://github.com/thatrobotdev))\\n- Jean Humann ([@jean-humann](https://github.com/jean-humann))\\n- Jesper Engberg ([@jeengbe](https://github.com/jeengbe))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- Joe Williams ([@BubbaJoe](https://github.com/BubbaJoe))\\n- John Cao ([@jhcao23](https://github.com/jhcao23))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jordan Manley ([@werner33](https://github.com/werner33))\\n- Jorens Merenjanu ([@JorensM](https://github.com/JorensM))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Juan Picado ([@juanpicado](https://github.com/juanpicado))\\n- Kolja ([@razzeee](https://github.com/razzeee))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Lorenzo Lewis ([@lorenzolewis](https://github.com/lorenzolewis))\\n- Maciek Palmowski ([@palmiak](https://github.com/palmiak))\\n- Manuel ([@manuel-rw](https://github.com/manuel-rw))\\n- Marco Kuper ([@scubamaggo](https://github.com/scubamaggo))\\n- Marco Stroppel ([@mstroppel](https://github.com/mstroppel))\\n- Marie ([@schneegansm](https://github.com/schneegansm))\\n- Markshawn ([@MarkShawn2020](https://github.com/MarkShawn2020))\\n- Martin Adamko ([@attitude](https://github.com/attitude))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Michael Remediakis ([@mickremedi](https://github.com/mickremedi))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- ModupeD ([@ModupeD](https://github.com/ModupeD))\\n- Mu-Jing-Tsai ([@moojing](https://github.com/moojing))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Naffy Dharni ([@knownasnaffy](https://github.com/knownasnaffy))\\n- Naman Garg ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Oleksandr Fediashov ([@layershifter](https://github.com/layershifter))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Paul Razvan Berg ([@PaulRBerg](https://github.com/PaulRBerg))\\n- Pinaki Bhattacharjee ([@pinakipb2](https://github.com/pinakipb2))\\n- Rapha\xebl Barbazza ([@rbarbazz](https://github.com/rbarbazz))\\n- Rashid ([@rashidmya](https://github.com/rashidmya))\\n- Ryosuke Igarashi ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n- SADIK KUZU ([@sadikkuzu](https://github.com/sadikkuzu))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Serenus ([@Kesyau](https://github.com/Kesyau))\\n- Shahriar ([@ShahriarKh](https://github.com/ShahriarKh))\\n- Shashank Kumar ([@shawshankkumar](https://github.com/shawshankkumar))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- Silvestar Bistrovi\u0107 ([@maliMirkec](https://github.com/maliMirkec))\\n- Sujal Gupta ([@heysujal](https://github.com/heysujal))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Surav Shrestha ([@suravshrestha](https://github.com/suravshrestha))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Anwar Chowdhury ([@tamalchowdhury](https://github.com/tamalchowdhury))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Viktor Malmedal ([@JohnVicke](https://github.com/JohnVicke))\\n- Waldir Pimenta ([@waldyrious](https://github.com/waldyrious))\\n- Wan Sim ([@0420syj](https://github.com/0420syj))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Will Ceolin ([@wceolin](https://github.com/wceolin))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zwyx ([@Zwyx](https://github.com/Zwyx))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@FlorinaPacurar](https://github.com/FlorinaPacurar)\\n- [@Mogyuchi](https://github.com/Mogyuchi)\\n- [@Sainan](https://github.com/Sainan)\\n- [@VinceCYLiao](https://github.com/VinceCYLiao)\\n- [@allyw2002](https://github.com/allyw2002)\\n- [@bitpredator](https://github.com/bitpredator)\\n- [@conlacda](https://github.com/conlacda)\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@la55u](https://github.com/la55u)\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@prateekbytes](https://github.com/prateekbytes)\\n- [@qwerzl](https://github.com/qwerzl)\\n- [@rsteele6](https://github.com/rsteele6)\\n- [@samatt14](https://github.com/samatt14)\\n- [@thedevwonder](https://github.com/thedevwonder)\\n- [@yosukekato165](https://github.com/yosukekato165)\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))\\n- \u521d\u51ac ([@chudongvip](https://github.com/chudongvip))"},{"id":"/2.4.3","metadata":{"permalink":"/changelog/2.4.3","source":"@site/changelog/source/2.4.3.md","title":"2.4.3","description":"Bug Fix","date":"2023-09-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T20:00","authors":["homotechsual","ori-shalom","slorber","TheCatLady"]},"unlisted":false,"prevItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"nextItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`\\n - [#9107](https://github.com/facebook/docusaurus/pull/9107) fix(content-docs): sidebar generator should return customProps for doc items ([@TheCatLady](https://github.com/TheCatLady))\\n- `docusaurus-theme-classic`\\n - [#9108](https://github.com/facebook/docusaurus/pull/9108) feat(theme-classic): add description & keywords microdata to blog posts ([@TheCatLady](https://github.com/TheCatLady))\\n - [#9099](https://github.com/facebook/docusaurus/pull/9099) fix(theme): only set classname on ul elements if they have an existing class ([@homotechsual](https://github.com/homotechsual))\\n - [#9243](https://github.com/facebook/docusaurus/pull/9243) fix(theme-common): ThemedComponent should display something when JS is disabled ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9130](https://github.com/facebook/docusaurus/pull/9130) fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash ([@ori-shalom](https://github.com/ori-shalom))\\n\\n## Committers: 4\\n\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@TheCatLady](https://github.com/TheCatLady)"},{"id":"/2.4.2","metadata":{"permalink":"/changelog/2.4.2","source":"@site/changelog/source/2.4.2.md","title":"2.4.2","description":"Bad npm publish, please use 2.4.3","date":"2023-09-20T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T19:00"},"unlisted":false,"prevItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"nextItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.4.3"},{"id":"/2.4.1","metadata":{"permalink":"/changelog/2.4.1","source":"@site/changelog/source/2.4.1.md","title":"2.4.1","description":"Bug Fix","date":"2023-05-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"MetuMortis","alias":"LiberaTeMetuMortis","url":"https://github.com/LiberaTeMetuMortis","imageURL":"https://github.com/LiberaTeMetuMortis.png","key":"LiberaTeMetuMortis","page":null},{"name":"Aleksandr Vladykin","alias":"morsko1","url":"https://github.com/morsko1","imageURL":"https://github.com/morsko1.png","key":"morsko1","page":null},{"name":"Sachin Nanayakkara","alias":"SACHINnANYAKKARA","url":"https://github.com/SACHINnANYAKKARA","imageURL":"https://github.com/SACHINnANYAKKARA.png","key":"SACHINnANYAKKARA","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-05-15T20:00","authors":["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},"unlisted":false,"prevItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"nextItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8971](https://github.com/facebook/docusaurus/pull/8971) fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8933](https://github.com/facebook/docusaurus/pull/8933) fix(theme-translations): fix Turkish translation for aria label \\"Enter key\\" ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- `docusaurus`\\n - [#8908](https://github.com/facebook/docusaurus/pull/8908) fix(core): Correct yarn upgrade command for yarn 2.x ([@andrewnicols](https://github.com/andrewnicols))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8909](https://github.com/facebook/docusaurus/pull/8909) fix(theme): add \\\\_\\\\_ prefix to technical anchors, search crawlers (Algolia) should ignore them ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8906](https://github.com/facebook/docusaurus/pull/8906) fix(theme-common): fix collapsible component with prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n - [#8873](https://github.com/facebook/docusaurus/pull/8873) fix(theme-common): fix confusing theme error message: bad sidebar id suggestions ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#8874](https://github.com/facebook/docusaurus/pull/8874) fix(utils): handle Markdown links with spaces to route correctly ([@morsko1](https://github.com/morsko1))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8842](https://github.com/facebook/docusaurus/pull/8842) fix(theme-translations): remove redundant navigation text in aria label ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`\\n - [#8831](https://github.com/facebook/docusaurus/pull/8831) fix(create): add missing await ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#8862](https://github.com/facebook/docusaurus/pull/8862) refactor(theme): expose copy, success and word-wrap icons as standalone components ([@armano2](https://github.com/armano2))\\n\\n## Committers: 7\\n\\n- Aleksandr Vladykin ([@morsko1](https://github.com/morsko1))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Armano ([@armano2](https://github.com/armano2))\\n- MetuMortis ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- Sachin Nanayakkara ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))"},{"id":"/2.4.0","metadata":{"permalink":"/changelog/2.4.0","source":"@site/changelog/source/2.4.0.md","title":"2.4.0","description":"New Feature","date":"2023-03-23T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anas","alias":"Anasqx","url":"https://github.com/Anasqx","imageURL":"https://github.com/Anasqx.png","key":"Anasqx","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},{"name":"Dewansh Thakur","alias":"dewanshDT","url":"https://github.com/dewanshDT","imageURL":"https://github.com/dewanshDT.png","key":"dewanshDT","page":null},{"name":"Petter Dr\xf8nnen","alias":"dr0nn1","url":"https://github.com/dr0nn1","imageURL":"https://github.com/dr0nn1.png","key":"dr0nn1","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kagan","alias":"kagankan","url":"https://github.com/kagankan","imageURL":"https://github.com/kagankan.png","key":"kagankan","page":null},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},{"name":"Moritz St\xfcckler","alias":"pReya","url":"https://github.com/pReya","imageURL":"https://github.com/pReya.png","key":"pReya","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tanner Dolby","alias":"tannerdolby","url":"https://github.com/tannerdolby","imageURL":"https://github.com/tannerdolby.png","key":"tannerdolby","page":null},{"name":"TrueQAP","alias":"trueqap","url":"https://github.com/trueqap","imageURL":"https://github.com/trueqap.png","key":"trueqap","page":null},{"name":"Vishruta Patil","alias":"Vishruta-Patil","url":"https://github.com/Vishruta-Patil","imageURL":"https://github.com/Vishruta-Patil.png","key":"Vishruta-Patil","page":null},{"name":"Davide Donadio","alias":"ZarakiKanzaki","url":"https://github.com/ZarakiKanzaki","imageURL":"https://github.com/ZarakiKanzaki.png","key":"ZarakiKanzaki","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-03-23T20:00","authors":["Anasqx","armano2","biplavmz","dewanshDT","dr0nn1","Josh-Cena","kagankan","Mysterious-Dev","pReya","slorber","tannerdolby","trueqap","Vishruta-Patil","ZarakiKanzaki"]},"unlisted":false,"prevItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"nextItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#8236](https://github.com/facebook/docusaurus/pull/8236) feat(content-docs): add support for sidebar item category/link descriptions in generated index page ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- `docusaurus-theme-classic`\\n - [#8708](https://github.com/facebook/docusaurus/pull/8708) feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark ([@slorber](https://github.com/slorber))\\n - [#8616](https://github.com/facebook/docusaurus/pull/8616) feat(theme): add ability to translate navbar+footer logo alt text ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#8690](https://github.com/facebook/docusaurus/pull/8690) feat(npm-to-yarn): add support for PnPm and custom converters ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#8677](https://github.com/facebook/docusaurus/pull/8677) feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8674](https://github.com/facebook/docusaurus/pull/8674) feat(theme-classic): respect `prefers-reduced-motion: reduce` mediaquery, bump Infima to alpha.43 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8668](https://github.com/facebook/docusaurus/pull/8668) feat(theme-translations): add Hungarian theme translations ([@trueqap](https://github.com/trueqap))\\n - [#8631](https://github.com/facebook/docusaurus/pull/8631) feat(theme-translations): add Norwegian (Bokm\xe5l) theme translation ([@dr0nn1](https://github.com/dr0nn1))\\n- `docusaurus-theme-common`\\n - [#8656](https://github.com/facebook/docusaurus/pull/8656) feat(theme-common): allow passing a string for details summary ([@pReya](https://github.com/pReya))\\n- `docusaurus-plugin-google-gtag`\\n - [#8620](https://github.com/facebook/docusaurus/pull/8620) feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#8803](https://github.com/facebook/docusaurus/pull/8803) fix(theme): codeblock buttons should be kept on the right when using RTL locale ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n - [#8615](https://github.com/facebook/docusaurus/pull/8615) fix(theme): improve color toggle when using dark navbar ([@dewanshDT](https://github.com/dewanshDT))\\n - [#8699](https://github.com/facebook/docusaurus/pull/8699) fix(theme-classic): fix tab focus bug in dropdown (#8697) ([@kagankan](https://github.com/kagankan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8801](https://github.com/facebook/docusaurus/pull/8801) fix(theme): allow tabs children to be falsy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#8757](https://github.com/facebook/docusaurus/pull/8757) fix(search): search page should react to querystring changes + cleanup/refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8746](https://github.com/facebook/docusaurus/pull/8746) fix(core): baseUrl error banner link anchor case ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8744](https://github.com/facebook/docusaurus/pull/8744) fix(theme-translations): fix wrong arabic words (tip/next) ([@Anasqx](https://github.com/Anasqx))\\n\\n## :nail_care: Polish\\n\\n- `create-docusaurus`\\n - [#8712](https://github.com/facebook/docusaurus/pull/8712) polish(create-docusaurus): the starter template should use a navbar item \\"docSidebar\\" instead of \\"doc\\" (less fragile on updates) ([@biplavmz](https://github.com/biplavmz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8735](https://github.com/facebook/docusaurus/pull/8735) polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API ([@tannerdolby](https://github.com/tannerdolby))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8736](https://github.com/facebook/docusaurus/pull/8736) polish(core): better styling for error screens ([@tannerdolby](https://github.com/tannerdolby))\\n\\n## Committers: 14\\n\\n- Anas ([@Anasqx](https://github.com/Anasqx))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Davide Donadio ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- Dewansh Thakur ([@dewanshDT](https://github.com/dewanshDT))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kagan ([@kagankan](https://github.com/kagankan))\\n- Moritz St\xfcckler ([@pReya](https://github.com/pReya))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Petter Dr\xf8nnen ([@dr0nn1](https://github.com/dr0nn1))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tanner Dolby ([@tannerdolby](https://github.com/tannerdolby))\\n- TrueQAP ([@trueqap](https://github.com/trueqap))\\n- Vishruta Patil ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n- [@biplavmz](https://github.com/biplavmz)"},{"id":"/2.3.1","metadata":{"permalink":"/changelog/2.3.1","source":"@site/changelog/source/2.3.1.md","title":"2.3.1","description":"Bug Fix","date":"2023-02-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"S\xe9bastien Castiel","alias":"scastiel","url":"https://github.com/scastiel","imageURL":"https://github.com/scastiel.png","key":"scastiel","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-02-03T20:00","authors":["Josh-Cena","scastiel","slorber"]},"unlisted":false,"prevItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"nextItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#8628](https://github.com/facebook/docusaurus/pull/8628) fix(theme-common): fix issue in tab scroll position restoration on tab click ([@slorber](https://github.com/slorber))\\n - [#8619](https://github.com/facebook/docusaurus/pull/8619) fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop ([@slorber](https://github.com/slorber))\\n - [#8618](https://github.com/facebook/docusaurus/pull/8618) fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8593](https://github.com/facebook/docusaurus/pull/8593) fix(theme-classic): allow rendering single tab item ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#8606](https://github.com/facebook/docusaurus/pull/8606) fix(utils): handle CRLF when parsing MDX imports ([@scastiel](https://github.com/scastiel))\\n- `docusaurus-preset-classic`\\n - [#8597](https://github.com/facebook/docusaurus/pull/8597) fix(preset-classic): install the right plugin for googleTagManager ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8614](https://github.com/facebook/docusaurus/pull/8614) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#8610](https://github.com/facebook/docusaurus/pull/8610) chore(deps): bump eta from 1.12.3 to 2.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 3\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Castiel ([@scastiel](https://github.com/scastiel))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.3.0","metadata":{"permalink":"/changelog/2.3.0","source":"@site/changelog/source/2.3.0.md","title":"2.3.0","description":"New Feature","date":"2023-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Danny Kim","alias":"0916dhkim","url":"https://github.com/0916dhkim","imageURL":"https://github.com/0916dhkim.png","key":"0916dhkim","page":null},{"name":"Riccardo","alias":"3v0k4","url":"https://github.com/3v0k4","imageURL":"https://github.com/3v0k4.png","key":"3v0k4","page":null},{"name":"Denis Al-Khelali","alias":"denis-alkhelali","url":"https://github.com/denis-alkhelali","imageURL":"https://github.com/denis-alkhelali.png","key":"denis-alkhelali","page":null},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},{"name":"Frieder Bluemle","alias":"friederbluemle","url":"https://github.com/friederbluemle","imageURL":"https://github.com/friederbluemle.png","key":"friederbluemle","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},{"name":"Lachlan Heywood","alias":"lachieh","url":"https://github.com/lachieh","imageURL":"https://github.com/lachieh.png","key":"lachieh","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Matija Sirk","alias":"MatijaSi","url":"https://github.com/MatijaSi","imageURL":"https://github.com/MatijaSi.png","key":"MatijaSi","page":null},{"name":"Muhammad Hammad","alias":"mhnaeem","url":"https://github.com/mhnaeem","imageURL":"https://github.com/mhnaeem.png","key":"mhnaeem","page":null},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},{"name":"\u5b8b\u9526\u4e30","alias":"SJFCS","url":"https://github.com/SJFCS","imageURL":"https://github.com/SJFCS.png","key":"SJFCS","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},{"name":"Thomas.CA","alias":"Thomascogez","url":"https://github.com/Thomascogez","imageURL":"https://github.com/Thomascogez.png","key":"Thomascogez","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-01-26T20:00","authors":["0916dhkim","3v0k4","denis-alkhelali","Djunnni","friederbluemle","johnnyreilly","Josh-Cena","JoshuaKGoldberg","lachieh","lanegoolsby","MatijaSi","mhnaeem","mturoci","SJFCS","slorber","stnor","Thomascogez"]},"unlisted":false,"prevItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"nextItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#8541](https://github.com/facebook/docusaurus/pull/8541) feat(theme-translations): default translations for Slovenian (sl-SI) ([@MatijaSi](https://github.com/MatijaSi))\\n- `docusaurus-plugin-content-blog`\\n - [#8378](https://github.com/facebook/docusaurus/pull/8378) feat(blog): add options.createFeedItems to filter/limit/transform feed items ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8225](https://github.com/facebook/docusaurus/pull/8225) feat(theme-classic): store selected tab in query string. ([@mturoci](https://github.com/mturoci))\\n- `docusaurus`\\n - [#8397](https://github.com/facebook/docusaurus/pull/8397) feat(core): deploy CLI - add support for git url \\"insteadOf\\": use \'remote get-url\' to determine source repo url ([@friederbluemle](https://github.com/friederbluemle))\\n- `docusaurus-theme-search-algolia`\\n - [#8428](https://github.com/facebook/docusaurus/pull/8428) feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls\\n- `docusaurus-plugin-google-tag-manager`\\n - [#8470](https://github.com/facebook/docusaurus/pull/8470) feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#8303](https://github.com/facebook/docusaurus/pull/8303) fix(mdx-loader): support nested admonitions\\n - [#8282](https://github.com/facebook/docusaurus/pull/8282) fix(mermaid): fix Mermaid integration for v9.2 release\\n- `docusaurus-theme-common`\\n - [#8539](https://github.com/facebook/docusaurus/pull/8539) fix(algolia): make search footer respect searchPagePath ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#8538](https://github.com/facebook/docusaurus/pull/8538) fix(core): avoid hash collision when generating chunk names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8481](https://github.com/facebook/docusaurus/pull/8481) fix(core): explicitly define CopyWebpackPlugin toType: \'dir\' ([@Thomascogez](https://github.com/Thomascogez))\\n - [#8342](https://github.com/facebook/docusaurus/pull/8342) fix(core): normalize input for poll option ([@mhnaeem](https://github.com/mhnaeem))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-search-algolia`\\n - [#8462](https://github.com/facebook/docusaurus/pull/8462) fix(search-algolia): pass custom transformItems function to SearchBar ([@mturoci](https://github.com/mturoci))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8486](https://github.com/facebook/docusaurus/pull/8486) fix(theme): refactor Tabs, make groupId + queryString work fine together ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#8463](https://github.com/facebook/docusaurus/pull/8463) fix(theme-classic): content container grow to take all the available space ([@Djunnni](https://github.com/Djunnni))\\n - [#8328](https://github.com/facebook/docusaurus/pull/8328) fix(theme): preserve sidebar height on collapse ([@0916dhkim](https://github.com/0916dhkim))\\n - [#8350](https://github.com/facebook/docusaurus/pull/8350) fix(theme): forward className prop in theme-classic\'s Heading ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `docusaurus-theme-translations`\\n - [#8424](https://github.com/facebook/docusaurus/pull/8424) fix(translations): typo in lastUpdatedAtBy Vietnamese translation ([@slorber](https://github.com/slorber))\\n - [#8289](https://github.com/facebook/docusaurus/pull/8289) fix(theme-translations): complete Turkish theme translations\\n - [#8406](https://github.com/facebook/docusaurus/pull/8406) fix(translations): complete farsi theme translations\\n - [#8450](https://github.com/facebook/docusaurus/pull/8450) fix(theme-translations): complete Vietnamese theme translations\\n - [#8525](https://github.com/facebook/docusaurus/pull/8525) chore(theme-translations): complete pl translations\\n- `docusaurus-plugin-content-blog`\\n - [#8381](https://github.com/facebook/docusaurus/pull/8381) fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#8275](https://github.com/facebook/docusaurus/pull/8275) fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- `docusaurus-utils`\\n - [#8314](https://github.com/facebook/docusaurus/pull/8314) fix(utils): allow partially backticked markdown h1 contentTitles ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#8279](https://github.com/facebook/docusaurus/pull/8279) fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-translations`\\n - [#8423](https://github.com/facebook/docusaurus/pull/8423) fix(translations): complete Chinese theme translations ([@SJFCS](https://github.com/SJFCS))\\n - [#8312](https://github.com/facebook/docusaurus/pull/8312) fix(theme-translations): complete Swedish theme translations ([@stnor](https://github.com/stnor))\\n- `eslint-plugin`\\n - [#8281](https://github.com/facebook/docusaurus/pull/8281) feat(eslint-plugin): add plugin to exported configs ([@lachieh](https://github.com/lachieh))\\n\\n## Committers: 16\\n\\n- Danny Kim ([@0916dhkim](https://github.com/0916dhkim))\\n- Denis Al-Khelali ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Frieder Bluemle ([@friederbluemle](https://github.com/friederbluemle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lachlan Heywood ([@lachieh](https://github.com/lachieh))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Matija Sirk ([@MatijaSi](https://github.com/MatijaSi))\\n- Muhammad Hammad ([@mhnaeem](https://github.com/mhnaeem))\\n- Riccardo ([@3v0k4](https://github.com/3v0k4))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thomas.CA ([@Thomascogez](https://github.com/Thomascogez))\\n- [@mturoci](https://github.com/mturoci)\\n- \u5b8b\u9526\u4e30 ([@SJFCS](https://github.com/SJFCS))"},{"id":"/2.2.0","metadata":{"permalink":"/changelog/2.2.0","source":"@site/changelog/source/2.2.0.md","title":"2.2.0","description":"New Feature","date":"2022-10-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adnan Hashmi","alias":"adnanhashmi09","url":"https://github.com/adnanhashmi09","imageURL":"https://github.com/adnanhashmi09.png","key":"adnanhashmi09","page":null},{"name":"Johan Fagerberg","alias":"birjj","url":"https://github.com/birjj","imageURL":"https://github.com/birjj.png","key":"birjj","page":null},{"name":"evan","alias":"e-im","url":"https://github.com/e-im","imageURL":"https://github.com/e-im.png","key":"e-im","page":null},{"name":"forgeRW","alias":"forgeRW","url":"https://github.com/forgeRW","imageURL":"https://github.com/forgeRW.png","key":"forgeRW","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jeferson S. Brito","alias":"jeferson-sb","url":"https://github.com/jeferson-sb","imageURL":"https://github.com/jeferson-sb.png","key":"jeferson-sb","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},{"name":"Masahiko Hara","alias":"pasora","url":"https://github.com/pasora","imageURL":"https://github.com/pasora.png","key":"pasora","page":null},{"name":"Pranav Joglekar","alias":"Pranav2612000","url":"https://github.com/Pranav2612000","imageURL":"https://github.com/Pranav2612000.png","key":"Pranav2612000","page":null},{"name":"Ramazan SANCAR","alias":"ramazansancar","url":"https://github.com/ramazansancar","imageURL":"https://github.com/ramazansancar.png","key":"ramazansancar","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"Shanmughapriyan S","alias":"shanpriyan","url":"https://github.com/shanpriyan","imageURL":"https://github.com/shanpriyan.png","key":"shanpriyan","page":null},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Xabier Lahuerta Vazquez","alias":"Xabilahu","url":"https://github.com/Xabilahu","imageURL":"https://github.com/Xabilahu.png","key":"Xabilahu","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-10-29T20:00","authors":["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},"unlisted":false,"prevItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"nextItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-client-redirects`\\n - [#8227](https://github.com/facebook/docusaurus/pull/8227) feat(plugin-client-redirects): keep the query string + hash ([@Xabilahu](https://github.com/Xabilahu))\\n- `docusaurus`\\n - [#8210](https://github.com/facebook/docusaurus/pull/8210) feat(core): add --config param to swizzle command ([@e-im](https://github.com/e-im))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus`\\n - [#7490](https://github.com/facebook/docusaurus/pull/7490) feat: support mermaid code blocks in Markdown ([@sjwall](https://github.com/sjwall))\\n- `docusaurus-types`, `docusaurus`\\n - [#8151](https://github.com/facebook/docusaurus/pull/8151) feat(core): siteConfig.headTags API to render extra tags in document head ([@johnnyreilly](https://github.com/johnnyreilly))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#8250](https://github.com/facebook/docusaurus/pull/8250) fix(ideal-image): do not pass down `img` prop ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`\\n - [#8246](https://github.com/facebook/docusaurus/pull/8246) fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#8234](https://github.com/facebook/docusaurus/pull/8234) fix(plugin-content-docs): fix error message context (error cause) when doc processing fails ([@shanpriyan](https://github.com/shanpriyan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8207](https://github.com/facebook/docusaurus/pull/8207) fix(theme-classic): hamburger menu control navigation by keyboard ([@jeferson-sb](https://github.com/jeferson-sb))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8204](https://github.com/facebook/docusaurus/pull/8204) fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API ([@mturoci](https://github.com/mturoci))\\n - [#8059](https://github.com/facebook/docusaurus/pull/8059) fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8192](https://github.com/facebook/docusaurus/pull/8192) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n- `docusaurus-theme-classic`\\n - [#8174](https://github.com/facebook/docusaurus/pull/8174) fix(theme): announce theme switches ([@mturoci](https://github.com/mturoci))\\n - [#8190](https://github.com/facebook/docusaurus/pull/8190) fix(theme): add more tag names to inline code element set ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8163](https://github.com/facebook/docusaurus/pull/8163) fix(theme): mobile navbar & skipToContent should cover announcementBar ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n - [#8068](https://github.com/facebook/docusaurus/pull/8068) fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-utils`\\n - [#8137](https://github.com/facebook/docusaurus/pull/8137) fix(utils): remove non-ASCII limitation for path normalization ([@birjj](https://github.com/birjj))\\n - [#8158](https://github.com/facebook/docusaurus/pull/8158) fix(content-blog): make RSS feed generation work with slugs with .html extension ([@Pranav2612000](https://github.com/Pranav2612000))\\n- `docusaurus-theme-translations`\\n - [#8105](https://github.com/facebook/docusaurus/pull/8105) fix(theme-translations): complete turkish theme default translations ([@ramazansancar](https://github.com/ramazansancar))\\n - [#8087](https://github.com/facebook/docusaurus/pull/8087) fix(theme-translations): remove extra vi translations ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- `docusaurus-plugin-client-redirects`\\n - [#8067](https://github.com/facebook/docusaurus/pull/8067) fix(redirect): tolerate trailing slash difference if config is undefined ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8253](https://github.com/facebook/docusaurus/pull/8253) chore(theme-translations): complete ru translations ([@lex111](https://github.com/lex111))\\n - [#8243](https://github.com/facebook/docusaurus/pull/8243) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#8075](https://github.com/facebook/docusaurus/pull/8075) fix(theme-translation): complete Japanese theme default translation ([@pasora](https://github.com/pasora))\\n- `docusaurus`\\n - [#8159](https://github.com/facebook/docusaurus/pull/8159) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n - [#8109](https://github.com/facebook/docusaurus/pull/8109) feat(core): prefetch on mobile touchstart ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-theme-classic`\\n - [#8161](https://github.com/facebook/docusaurus/pull/8161) fix(theme): do not show tab content when tabbing over it; show after selection only ([@mturoci](https://github.com/mturoci))\\n - [#8062](https://github.com/facebook/docusaurus/pull/8062) refactor(theme): remove hard-coded tag border-radius ([@homotechsual](https://github.com/homotechsual))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#8066](https://github.com/facebook/docusaurus/pull/8066) fix(core): normalize slashes for url/baseUrl instead of throwing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 22\\n\\n- Adnan Hashmi ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeferson S. Brito ([@jeferson-sb](https://github.com/jeferson-sb))\\n- Johan Fagerberg ([@birjj](https://github.com/birjj))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Masahiko Hara ([@pasora](https://github.com/pasora))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Nguy\u1ec5n Th\xe0nh Nam ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- Pranav Joglekar ([@Pranav2612000](https://github.com/Pranav2612000))\\n- Ramazan SANCAR ([@ramazansancar](https://github.com/ramazansancar))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Shanmughapriyan S ([@shanpriyan](https://github.com/shanpriyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Xabier Lahuerta Vazquez ([@Xabilahu](https://github.com/Xabilahu))\\n- [@forgeRW](https://github.com/forgeRW)\\n- [@mturoci](https://github.com/mturoci)\\n- evan ([@e-im](https://github.com/e-im))"},{"id":"/2.1.0","metadata":{"permalink":"/changelog/2.1.0","source":"@site/changelog/source/2.1.0.md","title":"2.1.0","description":"New Feature","date":"2022-09-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adventure-yunfei","alias":"adventure-yunfei","url":"https://github.com/adventure-yunfei","imageURL":"https://github.com/adventure-yunfei.png","key":"adventure-yunfei","page":null},{"name":"Bagdasar Ovsepyan","alias":"b-ovsepian","url":"https://github.com/b-ovsepian","imageURL":"https://github.com/b-ovsepian.png","key":"b-ovsepian","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kevin \xd8sterkilde","alias":"Kosai106","url":"https://github.com/Kosai106","imageURL":"https://github.com/Kosai106.png","key":"Kosai106","page":null},{"name":"Morgane Dubus","alias":"mdubus","url":"https://github.com/mdubus","imageURL":"https://github.com/mdubus.png","key":"mdubus","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"whiteand","alias":"whiteand","url":"https://github.com/whiteand","imageURL":"https://github.com/whiteand.png","key":"whiteand","page":null},{"name":"Yoni Chechik","alias":"YoniChechik","url":"https://github.com/YoniChechik","imageURL":"https://github.com/YoniChechik.png","key":"YoniChechik","page":null},{"name":"yzhe819","alias":"yzhe819","url":"https://github.com/yzhe819","imageURL":"https://github.com/yzhe819.png","key":"yzhe819","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-09-01T20:00","authors":["adventure-yunfei","b-ovsepian","datlechin","Josh-Cena","Kosai106","mdubus","slorber","whiteand","YoniChechik","yzhe819"]},"unlisted":false,"prevItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"nextItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8008](https://github.com/facebook/docusaurus/pull/8008) feat(theme): ability to use `<DocCardList>` without items prop, on any doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7963](https://github.com/facebook/docusaurus/pull/7963) feat(docs): allow to configure noIndex per doc version ([@slorber](https://github.com/slorber))\\n - [#7949](https://github.com/facebook/docusaurus/pull/7949) feat(plugin-docs): docs sidebar item link: support \\"autoAddBaseUrl\\" attribute ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7953](https://github.com/facebook/docusaurus/pull/7953) feat(theme): adds Ukrainian default theme translations ([@b-ovsepian](https://github.com/b-ovsepian))\\n\\n## :bug: Bug Fix\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-classic`\\n - [#8029](https://github.com/facebook/docusaurus/pull/8029) fix(preset-classic): broken link in \\"unrecognized keys\\" error message ([@mdubus](https://github.com/mdubus))\\n- `docusaurus`\\n - [#7977](https://github.com/facebook/docusaurus/pull/7977) fix(core): preload should support encoded page links ([@adventure-yunfei](https://github.com/adventure-yunfei))\\n - [#7996](https://github.com/facebook/docusaurus/pull/7996) fix(core): CLI command write-translations should extract translations from @docu\u2026 ([@slorber](https://github.com/slorber))\\n - [#7952](https://github.com/facebook/docusaurus/pull/7952) fix(core): allow overriding ssr/dev template meta tags ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#7964](https://github.com/facebook/docusaurus/pull/7964) fix(sitemap): filter all routes with robots meta containing noindex ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7910](https://github.com/facebook/docusaurus/pull/7910) fix(theme-classic): code block line number display with line wrapping ([@yzhe819](https://github.com/yzhe819))\\n - [#7786](https://github.com/facebook/docusaurus/pull/7786) fix: collapse siblings when first category is selected ([@whiteand](https://github.com/whiteand))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#7982](https://github.com/facebook/docusaurus/pull/7982) fix(theme): add aria-label to skip to content link region ([@YoniChechik](https://github.com/YoniChechik))\\n - [#7940](https://github.com/facebook/docusaurus/pull/7940) refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow ([@slorber](https://github.com/slorber))\\n - [#7876](https://github.com/facebook/docusaurus/pull/7876) refactor(theme-classic): make tag text visually certered ([@Kosai106](https://github.com/Kosai106))\\n- `docusaurus-utils`\\n - [#7941](https://github.com/facebook/docusaurus/pull/7941) feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`\\n - [#7942](https://github.com/facebook/docusaurus/pull/7942) feat(theme-classic): use lang attribute in navbar locale dropdown items ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7928](https://github.com/facebook/docusaurus/pull/7928) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`\\n - [#7905](https://github.com/facebook/docusaurus/pull/7905) docs: remove mention of beta ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 10\\n\\n- Bagdasar Ovsepyan ([@b-ovsepian](https://github.com/b-ovsepian))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kevin \xd8sterkilde ([@Kosai106](https://github.com/Kosai106))\\n- Morgane Dubus ([@mdubus](https://github.com/mdubus))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Yoni Chechik ([@YoniChechik](https://github.com/YoniChechik))\\n- [@whiteand](https://github.com/whiteand)\\n- [@yzhe819](https://github.com/yzhe819)\\n- adventure-yunfei ([@adventure-yunfei](https://github.com/adventure-yunfei))"},{"id":"/2.0.1","metadata":{"permalink":"/changelog/2.0.1","source":"@site/changelog/source/2.0.1.md","title":"2.0.1","description":"Fix bad npm publish of 2.0.0","date":"2022-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T20:00","authors":["slorber"]},"unlisted":false,"prevItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"nextItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nFix bad npm publish of 2.0.0\\n\\n## Committers: 1\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0","metadata":{"permalink":"/changelog/2.0.0","source":"@site/changelog/source/2.0.0.md","title":"2.0.0","description":"Bad npm publish, please use 2.0.1","date":"2022-08-01T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T19:00","authors":["Josh-Cena","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"nextItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.0.1\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#7781](https://github.com/facebook/docusaurus/pull/7781) refactor(core): log Docusaurus & Node version before exiting ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 2\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-rc.1","metadata":{"permalink":"/changelog/2.0.0-rc.1","source":"@site/changelog/source/2.0.0-rc.1.md","title":"2.0.0-rc.1","description":"Bug Fix","date":"2022-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"LichLord91","alias":"LichLord91","url":"https://github.com/LichLord91","imageURL":"https://github.com/LichLord91.png","key":"LichLord91","page":null},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},{"name":"Arthur Brugi\xe8re","alias":"RoiArthurB","url":"https://github.com/RoiArthurB","imageURL":"https://github.com/RoiArthurB.png","key":"RoiArthurB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"The Nguyen","alias":"treoden","url":"https://github.com/treoden","imageURL":"https://github.com/treoden.png","key":"treoden","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-14T20:00","authors":["anaclumos","DigiPie","Gary50613","ghostsquad","jeffreyaven","Josh-Cena","LichLord91","recallwei","RoiArthurB","slorber","treoden"]},"unlisted":false,"prevItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"nextItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7776](https://github.com/facebook/docusaurus/pull/7776) fix(core): swizzle --eject js should not copy theme .d.ts files ([@slorber](https://github.com/slorber))\\n - [#7750](https://github.com/facebook/docusaurus/pull/7750) fix(deploy): revert \\"feat(deploy): copy local git config to tmp repo (#7702)\\" ([@ghostsquad](https://github.com/ghostsquad))\\n- `docusaurus-plugin-sitemap`\\n - [#7774](https://github.com/facebook/docusaurus/pull/7774) fix(sitemap): complete gracefully when all pages have noIndex meta ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n - [#7755](https://github.com/facebook/docusaurus/pull/7755) fix(theme-classic): validate options properly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7752](https://github.com/facebook/docusaurus/pull/7752) fix(theme-classic): fix Layout theme height CSS ([@LichLord91](https://github.com/LichLord91))\\n- `docusaurus-migrate`\\n - [#7766](https://github.com/facebook/docusaurus/pull/7766) fix(migrate): import siteConfig with file extension ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#7761](https://github.com/facebook/docusaurus/pull/7761) fix(algolia-search): test for canUseIntersectionObserver ([@RoiArthurB](https://github.com/RoiArthurB))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7762](https://github.com/facebook/docusaurus/pull/7762) chore(theme-translations): complete ko translations ([@anaclumos](https://github.com/anaclumos))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-plugin-content-docs`\\n - [#7706](https://github.com/facebook/docusaurus/pull/7706) docs: release process, versioning, breaking changes, public API surface ([@slorber](https://github.com/slorber))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`\\n - [#7777](https://github.com/facebook/docusaurus/pull/7777) refactor(theme): fix duplicate page metadata usage ([@slorber](https://github.com/slorber))\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Arthur Brugi\xe8re ([@RoiArthurB](https://github.com/RoiArthurB))\\n- Bruce Song ([@recallwei](https://github.com/recallwei))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- The Nguyen ([@treoden](https://github.com/treoden))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- [@LichLord91](https://github.com/LichLord91)\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.22","metadata":{"permalink":"/changelog/2.0.0-beta.22","source":"@site/changelog/source/2.0.0-beta.22.md","title":"2.0.0-beta.22","description":"Breaking Change","date":"2022-07-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Fl\xe1vio Silva","alias":"201flaviosilva","url":"https://github.com/201flaviosilva","imageURL":"https://github.com/201flaviosilva.png","key":"201flaviosilva","page":null},{"name":"7Wate","alias":"7Wate","url":"https://github.com/7Wate","imageURL":"https://github.com/7Wate.png","key":"7Wate","page":null},{"name":"\u8d64\u57ce\u7ed3\u8863","alias":"AkagiYui","url":"https://github.com/AkagiYui","imageURL":"https://github.com/AkagiYui.png","key":"AkagiYui","page":null},{"name":"alewolf","alias":"alewolf","url":"https://github.com/alewolf","imageURL":"https://github.com/alewolf.png","key":"alewolf","page":null},{"name":"Alexander Nestorov","alias":"alexandernst","url":"https://github.com/alexandernst","imageURL":"https://github.com/alexandernst.png","key":"alexandernst","page":null},{"name":"Ahmed Altomy","alias":"Altomy","url":"https://github.com/Altomy","imageURL":"https://github.com/Altomy.png","key":"Altomy","page":null},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Benjamin Cabanes","alias":"bcabanes","url":"https://github.com/bcabanes","imageURL":"https://github.com/bcabanes.png","key":"bcabanes","page":null},{"name":"Ben Myers","alias":"BenDMyers","url":"https://github.com/BenDMyers","imageURL":"https://github.com/BenDMyers.png","key":"BenDMyers","page":null},{"name":"Boulet","alias":"Boulet-","url":"https://github.com/Boulet-","imageURL":"https://github.com/Boulet-.png","key":"Boulet-","page":null},{"name":"Charles Ancheta","alias":"cbebe","url":"https://github.com/cbebe","imageURL":"https://github.com/cbebe.png","key":"cbebe","page":null},{"name":"Clemie McCartney","alias":"clemiee","url":"https://github.com/clemiee","imageURL":"https://github.com/clemiee.png","key":"clemiee","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dharsan B","alias":"DharsanB","url":"https://github.com/DharsanB","imageURL":"https://github.com/DharsanB.png","key":"DharsanB","page":null},{"name":"dht","alias":"dht","url":"https://github.com/dht","imageURL":"https://github.com/dht.png","key":"dht","page":null},{"name":"Diego Fran\xe7a","alias":"difranca","url":"https://github.com/difranca","imageURL":"https://github.com/difranca.png","key":"difranca","page":null},{"name":"dpang314","alias":"dpang314","url":"https://github.com/dpang314","imageURL":"https://github.com/dpang314.png","key":"dpang314","page":null},{"name":"emattia","alias":"emattia","url":"https://github.com/emattia","imageURL":"https://github.com/emattia.png","key":"emattia","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},{"name":"Hyunseung Lee","alias":"HyunseungLee-Travis","url":"https://github.com/HyunseungLee-Travis","imageURL":"https://github.com/HyunseungLee-Travis.png","key":"HyunseungLee-Travis","page":null},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},{"name":"Johnie Hjelm","alias":"johnie","url":"https://github.com/johnie","imageURL":"https://github.com/johnie.png","key":"johnie","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"JP","alias":"jpdriver","url":"https://github.com/jpdriver","imageURL":"https://github.com/jpdriver.png","key":"jpdriver","page":null},{"name":"Joshua Schmitt","alias":"jqshuv","url":"https://github.com/jqshuv","imageURL":"https://github.com/jqshuv.png","key":"jqshuv","page":null},{"name":"K\xfcr\u015fat \u015eim\u015fek","alias":"kursatsmsek","url":"https://github.com/kursatsmsek","imageURL":"https://github.com/kursatsmsek.png","key":"kursatsmsek","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},{"name":"\u674e\u5c0f\u96e8","alias":"metal-young","url":"https://github.com/metal-young","imageURL":"https://github.com/metal-young.png","key":"metal-young","page":null},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},{"name":"pincman","alias":"pincman","url":"https://github.com/pincman","imageURL":"https://github.com/pincman.png","key":"pincman","page":null},{"name":"Redcamel","alias":"redcamel","url":"https://github.com/redcamel","imageURL":"https://github.com/redcamel.png","key":"redcamel","page":null},{"name":"Rein van Haaren","alias":"reinvanhaaren","url":"https://github.com/reinvanhaaren","imageURL":"https://github.com/reinvanhaaren.png","key":"reinvanhaaren","page":null},{"name":"Rudra Sen","alias":"RudraSen2","url":"https://github.com/RudraSen2","imageURL":"https://github.com/RudraSen2.png","key":"RudraSen2","page":null},{"name":"sado","alias":"sado0823","url":"https://github.com/sado0823","imageURL":"https://github.com/sado0823.png","key":"sado0823","page":null},{"name":"Dzung Do","alias":"saosangmo","url":"https://github.com/saosangmo","imageURL":"https://github.com/saosangmo.png","key":"saosangmo","page":null},{"name":"Dima Grossman","alias":"scopsy","url":"https://github.com/scopsy","imageURL":"https://github.com/scopsy.png","key":"scopsy","page":null},{"name":"SheetJSDev","alias":"SheetJSDev","url":"https://github.com/SheetJSDev","imageURL":"https://github.com/SheetJSDev.png","key":"SheetJSDev","page":null},{"name":"Joe Harrison","alias":"sigwinch28","url":"https://github.com/sigwinch28","imageURL":"https://github.com/sigwinch28.png","key":"sigwinch28","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Huy Nguyen","alias":"Smilefounder","url":"https://github.com/Smilefounder","imageURL":"https://github.com/Smilefounder.png","key":"Smilefounder","page":null},{"name":"Steven Serrata","alias":"sserrata","url":"https://github.com/sserrata","imageURL":"https://github.com/sserrata.png","key":"sserrata","page":null},{"name":"Szil\xe1rd D\xf3r\xf3","alias":"szilarddoro","url":"https://github.com/szilarddoro","imageURL":"https://github.com/szilarddoro.png","key":"szilarddoro","page":null},{"name":"Le Thi Van","alias":"vannyle","url":"https://github.com/vannyle","imageURL":"https://github.com/vannyle.png","key":"vannyle","page":null},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-08T20:00","authors":["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"nextItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#7740](https://github.com/facebook/docusaurus/pull/7740) refactor(theme): nest theme icons under subfolder @theme/Icon/\\\\* ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7716](https://github.com/facebook/docusaurus/pull/7716) refactor(theme): split BlogPostItem into smaller theme subcomponents ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7660](https://github.com/facebook/docusaurus/pull/7660) refactor(theme-common): split package into public/internal API entrypoints ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7644](https://github.com/facebook/docusaurus/pull/7644) refactor(docs,theme): split DocItem comp, useDoc hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7642](https://github.com/facebook/docusaurus/pull/7642) refactor: remove \\"error\\" reporting level, move reportMessage to logger ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7152](https://github.com/facebook/docusaurus/pull/7152) refactor: handle all admonitions via JSX component ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#7732](https://github.com/facebook/docusaurus/pull/7732) feat(theme-translations): Dutch translation ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n - [#7715](https://github.com/facebook/docusaurus/pull/7715) feat(theme-translations): Swedish translation ([@johnie](https://github.com/johnie))\\n- `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#7666](https://github.com/facebook/docusaurus/pull/7666) feat(algolia-search): allow translating search modal ([@forresst](https://github.com/forresst))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7643](https://github.com/facebook/docusaurus/pull/7643) feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#7649](https://github.com/facebook/docusaurus/pull/7649) feat(client-redirects): make plugin respect onDuplicateRoutes config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7624](https://github.com/facebook/docusaurus/pull/7624) feat: allow customizing localization path of each locale ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7581](https://github.com/facebook/docusaurus/pull/7581) feat(core): allow opting out of HTML minification ([@alexandernst](https://github.com/alexandernst))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7557](https://github.com/facebook/docusaurus/pull/7557) feat: allow specifying custom target for FooterLogo ([@vannyle](https://github.com/vannyle))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7556](https://github.com/facebook/docusaurus/pull/7556) feat: add admonition type title translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7386](https://github.com/facebook/docusaurus/pull/7386) feat(core): allow customizing the i18n directory path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#7514](https://github.com/facebook/docusaurus/pull/7514) feat(live-codeblock): add support for noInline to interactive code blocks ([@jpdriver](https://github.com/jpdriver))\\n- `docusaurus-plugin-content-docs`\\n - [#7461](https://github.com/facebook/docusaurus/pull/7461) feat(content-docs): last_update front matter ([@dpang314](https://github.com/dpang314))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7727](https://github.com/facebook/docusaurus/pull/7727) fix(theme): show blog post edit link even when no tag & not truncated ([@anaclumos](https://github.com/anaclumos))\\n - [#7659](https://github.com/facebook/docusaurus/pull/7659) fix(theme-classic): expose empty string alt text in navbar logos ([@BenDMyers](https://github.com/BenDMyers))\\n - [#7595](https://github.com/facebook/docusaurus/pull/7595) fix(content-pages): add article wrapper around MDXContent ([@matkoch](https://github.com/matkoch))\\n- `docusaurus-theme-translations`\\n - [#7694](https://github.com/facebook/docusaurus/pull/7694) fix(theme-translations): typo in vi locale ([@saosangmo](https://github.com/saosangmo))\\n- `docusaurus-plugin-content-docs`\\n - [#7638](https://github.com/facebook/docusaurus/pull/7638) fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category ([@slorber](https://github.com/slorber))\\n - [#7634](https://github.com/facebook/docusaurus/pull/7634) fix(content-docs): allow translating doc labels in sidebars.js ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7604](https://github.com/facebook/docusaurus/pull/7604) fix(utils): allow any non-boundary characters in Markdown heading ID ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7593](https://github.com/facebook/docusaurus/pull/7593) fix(cssnano-preset): disable z-index minification ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-theme-common`\\n - [#7551](https://github.com/facebook/docusaurus/pull/7551) fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word ([@slorber](https://github.com/slorber))\\n - [#7485](https://github.com/facebook/docusaurus/pull/7485) fix(theme-classic): inconsistent code block wrapping ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`\\n - [#7521](https://github.com/facebook/docusaurus/pull/7521) fix: make type-checking work in Yarn PnP ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7696](https://github.com/facebook/docusaurus/pull/7696) fix(theme-translations): improve grammar of zh translation ([@AkagiYui](https://github.com/AkagiYui))\\n - [#7691](https://github.com/facebook/docusaurus/pull/7691) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n - [#7683](https://github.com/facebook/docusaurus/pull/7683) chore(theme-translations): complete ar translations ([@Altomy](https://github.com/Altomy))\\n - [#7633](https://github.com/facebook/docusaurus/pull/7633) chore(theme-translations): complete ko translations ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- `docusaurus`\\n - [#7702](https://github.com/facebook/docusaurus/pull/7702) feat(deploy): copy local git config to tmp repo ([@ghostsquad](https://github.com/ghostsquad))\\n - [#7600](https://github.com/facebook/docusaurus/pull/7600) fix: force refresh on chunk preload error ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#7673](https://github.com/facebook/docusaurus/pull/7673) fix(content-docs): format last update date as \\"Jun 19, 2020\\" ([@sigwinch28](https://github.com/sigwinch28))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7671](https://github.com/facebook/docusaurus/pull/7671) refactor(theme-common): rename useDynamicCallback to useEvent ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#7648](https://github.com/facebook/docusaurus/pull/7648) fix(theme-common): make useShallowMemoObject key-order-insensitive ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#7639](https://github.com/facebook/docusaurus/pull/7639) chore(create): update the facebook template with current assets ([@zpao](https://github.com/zpao))\\n - [#7520](https://github.com/facebook/docusaurus/pull/7520) feat: add engines field to templates\' package.json ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7579](https://github.com/facebook/docusaurus/pull/7579) refactor(pwa): simplify registerSW code, fix ESLint errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#7545](https://github.com/facebook/docusaurus/pull/7545) feat(analytics): allow query/hash changes to be sent to GA ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#7739](https://github.com/facebook/docusaurus/pull/7739) docs: swizzle react-live with eject ([@SheetJSDev](https://github.com/SheetJSDev))\\n - [#7723](https://github.com/facebook/docusaurus/pull/7723) docs: add GitHub pages deployment troubleshooting guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7705](https://github.com/facebook/docusaurus/pull/7705) docs: mention MDXContent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7675](https://github.com/facebook/docusaurus/pull/7675) docs: add docusaurus-openapi-docs to resources ([@sserrata](https://github.com/sserrata))\\n - [#7677](https://github.com/facebook/docusaurus/pull/7677) docs: add more info on github cross repo deployment ([@bcabanes](https://github.com/bcabanes))\\n - [#7563](https://github.com/facebook/docusaurus/pull/7563) docs: add awesome-docusaurus resource ([@webbertakken](https://github.com/webbertakken))\\n - [#7665](https://github.com/facebook/docusaurus/pull/7665) docs: add link from every category index page to the guide page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7519](https://github.com/facebook/docusaurus/pull/7519) docs: multiple documentation elaborations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7518](https://github.com/facebook/docusaurus/pull/7518) docs: remove useless front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7512](https://github.com/facebook/docusaurus/pull/7512) docs: update Kent C. Dodds Twitter avatar ([@DharsanB](https://github.com/DharsanB))\\n- `create-docusaurus`\\n - [#7611](https://github.com/facebook/docusaurus/pull/7611) docs: advise using Node 18 in deployment ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7582](https://github.com/facebook/docusaurus/pull/7582) docs: make localhost links clickable ([@dht](https://github.com/dht))\\n- `docusaurus-plugin-client-redirects`\\n - [#7607](https://github.com/facebook/docusaurus/pull/7607) refactor(client-redirects): elaborate documentation, minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7676](https://github.com/facebook/docusaurus/pull/7676) refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7674](https://github.com/facebook/docusaurus/pull/7674) chore: prevent importing theme components with relative paths ([@slorber](https://github.com/slorber))\\n - [#7664](https://github.com/facebook/docusaurus/pull/7664) chore: upgrade Infima to alpha.40 ([@slorber](https://github.com/slorber))\\n- Other\\n - [#7663](https://github.com/facebook/docusaurus/pull/7663) misc: share .vscode/extensions.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7583](https://github.com/facebook/docusaurus/pull/7583) refactor(cli): make the CLI an even thinner wrapper around command functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7547](https://github.com/facebook/docusaurus/pull/7547) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7586](https://github.com/facebook/docusaurus/pull/7586) chore: upgrade to TS 4.7, compile with NodeNext ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 51\\n\\n- 7Wate ([@7Wate](https://github.com/7Wate))\\n- Ahmed Altomy ([@Altomy](https://github.com/Altomy))\\n- Alexander Nestorov ([@alexandernst](https://github.com/alexandernst))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ben Myers ([@BenDMyers](https://github.com/BenDMyers))\\n- Benjamin Cabanes ([@bcabanes](https://github.com/bcabanes))\\n- Boulet ([@Boulet-](https://github.com/Boulet-))\\n- Charles Ancheta ([@cbebe](https://github.com/cbebe))\\n- Clemie McCartney ([@clemiee](https://github.com/clemiee))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- Dharsan B ([@DharsanB](https://github.com/DharsanB))\\n- Diego Fran\xe7a ([@difranca](https://github.com/difranca))\\n- Dima Grossman ([@scopsy](https://github.com/scopsy))\\n- Dzung Do ([@saosangmo](https://github.com/saosangmo))\\n- Fl\xe1vio Silva ([@201flaviosilva](https://github.com/201flaviosilva))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Huy Nguyen ([@Smilefounder](https://github.com/Smilefounder))\\n- Hyunseung Lee ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- JP ([@jpdriver](https://github.com/jpdriver))\\n- Joe Harrison ([@sigwinch28](https://github.com/sigwinch28))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Johnie Hjelm ([@johnie](https://github.com/johnie))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Joshua Schmitt ([@jqshuv](https://github.com/jqshuv))\\n- K\xfcr\u015fat \u015eim\u015fek ([@kursatsmsek](https://github.com/kursatsmsek))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Le Thi Van ([@vannyle](https://github.com/vannyle))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Redcamel ([@redcamel](https://github.com/redcamel))\\n- Rein van Haaren ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n- Rudra Sen ([@RudraSen2](https://github.com/RudraSen2))\\n- Steven Serrata ([@sserrata](https://github.com/sserrata))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Szil\xe1rd D\xf3r\xf3 ([@szilarddoro](https://github.com/szilarddoro))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@SheetJSDev](https://github.com/SheetJSDev)\\n- [@alewolf](https://github.com/alewolf)\\n- [@dpang314](https://github.com/dpang314)\\n- dht ([@dht](https://github.com/dht))\\n- emattia ([@emattia](https://github.com/emattia))\\n- pincman ([@pincman](https://github.com/pincman))\\n- sado ([@sado0823](https://github.com/sado0823))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))\\n- \u674e\u5c0f\u96e8 ([@metal-young](https://github.com/metal-young))\\n- \u8d64\u57ce\u7ed3\u8863 ([@AkagiYui](https://github.com/AkagiYui))"},{"id":"/2.0.0-beta.21","metadata":{"permalink":"/changelog/2.0.0-beta.21","source":"@site/changelog/source/2.0.0-beta.21.md","title":"2.0.0-beta.21","description":"Breaking Change","date":"2022-05-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Benjamin Diolez","alias":"BenDz","url":"https://github.com/BenDz","imageURL":"https://github.com/BenDz.png","key":"BenDz","page":null},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Designatory","alias":"Designatory","url":"https://github.com/Designatory","imageURL":"https://github.com/Designatory.png","key":"Designatory","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Ggicci","alias":"ggicci","url":"https://github.com/ggicci","imageURL":"https://github.com/ggicci.png","key":"ggicci","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},{"name":"Jeremy","alias":"jrmyw92","url":"https://github.com/jrmyw92","imageURL":"https://github.com/jrmyw92.png","key":"jrmyw92","page":null},{"name":"Junjie","alias":"junjieweb","url":"https://github.com/junjieweb","imageURL":"https://github.com/junjieweb.png","key":"junjieweb","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},{"name":"Akara","alias":"Messiahhh","url":"https://github.com/Messiahhh","imageURL":"https://github.com/Messiahhh.png","key":"Messiahhh","page":null},{"name":"Michael Hughes","alias":"mhughes2k","url":"https://github.com/mhughes2k","imageURL":"https://github.com/mhughes2k.png","key":"mhughes2k","page":null},{"name":"Nitya Narasimhan","alias":"nitya","url":"https://github.com/nitya","imageURL":"https://github.com/nitya.png","key":"nitya","page":null},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Rui Peres","alias":"RuiAAPeres","url":"https://github.com/RuiAAPeres","imageURL":"https://github.com/RuiAAPeres.png","key":"RuiAAPeres","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"James","alias":"Zamiell","url":"https://github.com/Zamiell","imageURL":"https://github.com/Zamiell.png","key":"Zamiell","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-27T20:00","authors":["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"nextItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-pwa`\\n - [#7422](https://github.com/facebook/docusaurus/pull/7422) refactor(pwa): remove reloadPopup option in favor of swizzling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7501](https://github.com/facebook/docusaurus/pull/7501) chore: require Node 16.14 ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-sitemap`\\n - [#7469](https://github.com/facebook/docusaurus/pull/7469) feat(sitemap): allow customizing the output name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7371](https://github.com/facebook/docusaurus/pull/7371) feat(core): support docusaurus.config.cjs as default file name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7500](https://github.com/facebook/docusaurus/pull/7500) feat: make docusaurus serve automatically open in browser ([@Zamiell](https://github.com/Zamiell))\\n - [#7452](https://github.com/facebook/docusaurus/pull/7452) feat: add --no-minify flag to docusaurus start ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-theme-classic`\\n - [#7357](https://github.com/facebook/docusaurus/pull/7357) feat(theme-classic): allow className as option for type: \\"search\\" ([@JPeer264](https://github.com/JPeer264))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7362](https://github.com/facebook/docusaurus/pull/7362) fix: always emit SEO title + og:title meta ([@charleskorn](https://github.com/charleskorn))\\n - [#7453](https://github.com/facebook/docusaurus/pull/7453) fix(core): avoid using logger and fs.readJSON in SSR ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7369](https://github.com/facebook/docusaurus/pull/7369) fix(cli): output correct path when swizzling bare-file component in subfolder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7360](https://github.com/facebook/docusaurus/pull/7360) fix(core): allow githubPort in config validation ([@mhughes2k](https://github.com/mhughes2k))\\n- `docusaurus-plugin-google-gtag`\\n - [#7424](https://github.com/facebook/docusaurus/pull/7424) fix(gtag): send the newly rendered page\'s title instead of the old one\'s ([@ori-shalom](https://github.com/ori-shalom))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#7507](https://github.com/facebook/docusaurus/pull/7507) fix(create-docusaurus): potential security issue with command injection ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7492](https://github.com/facebook/docusaurus/pull/7492) fix(core): always treat error boundary fallback as a callback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7438](https://github.com/facebook/docusaurus/pull/7438) fix(theme-classic): allow nested task lists to preserve the indent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7430](https://github.com/facebook/docusaurus/pull/7430) fix(theme-classic): consistently apply the right active class name for all navbar items ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7411](https://github.com/facebook/docusaurus/pull/7411) fix(theme-classic): autocollapse sidebar categories when navigating with paginator ([@pranabdas](https://github.com/pranabdas))\\n - [#7363](https://github.com/facebook/docusaurus/pull/7363) fix(theme-classic): resolve customCss from site dir ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7464](https://github.com/facebook/docusaurus/pull/7464) fix(utils): fix Markdown link replacement when link text is same as href ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7458](https://github.com/facebook/docusaurus/pull/7458) fix(utils): avoid replacing Markdown links missing the directly next link ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#7392](https://github.com/facebook/docusaurus/pull/7392) fix(mdx-loader): use React.Fragment as fragment factory ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7385](https://github.com/facebook/docusaurus/pull/7385) fix(content-docs): restore functionality when a category only has index page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7493](https://github.com/facebook/docusaurus/pull/7493) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#7474](https://github.com/facebook/docusaurus/pull/7474) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7400](https://github.com/facebook/docusaurus/pull/7400) chore(theme-translations): complete Farsi translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- `docusaurus`\\n - [#7499](https://github.com/facebook/docusaurus/pull/7499) fix: avoid printing period after localhost URL ([@Zamiell](https://github.com/Zamiell))\\n- `create-docusaurus`\\n - [#7374](https://github.com/facebook/docusaurus/pull/7374) refactor(create): clean up logic when prompting for unspecified arguments ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7503](https://github.com/facebook/docusaurus/pull/7503) docs: document MDXComponents scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7497](https://github.com/facebook/docusaurus/pull/7497) docs: link every reference of types in API table to the type definition ([@Zamiell](https://github.com/Zamiell))\\n- [#7407](https://github.com/facebook/docusaurus/pull/7407) docs: add Azure SWA as deployment option ([@nitya](https://github.com/nitya))\\n- [#7390](https://github.com/facebook/docusaurus/pull/7390) fix(website): use react-lite-youtube-embed for lazy YouTube video ([@matkoch](https://github.com/matkoch))\\n\\n## :wrench: Maintenance\\n\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#7477](https://github.com/facebook/docusaurus/pull/7477) refactor: fix a lot of errors in type-aware linting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7447](https://github.com/facebook/docusaurus/pull/7447) refactor(theme-classic): migrate to tsc for build ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `stylelint-copyright`\\n - [#7441](https://github.com/facebook/docusaurus/pull/7441) refactor(stylelint-copyright): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7440](https://github.com/facebook/docusaurus/pull/7440) refactor(cssnano-preset): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7437](https://github.com/facebook/docusaurus/pull/7437) refactor: use TS project references instead of running tsc multiple times ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#7421](https://github.com/facebook/docusaurus/pull/7421) refactor(pwa): migrate client modules to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7415](https://github.com/facebook/docusaurus/pull/7415) refactor(theme-classic): always collocate stylesheets with components in one folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7405](https://github.com/facebook/docusaurus/pull/7405) refactor(core): properly code-split NotFound page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 23\\n\\n- Akara ([@Messiahhh](https://github.com/Messiahhh))\\n- Benjamin Diolez ([@BenDz](https://github.com/BenDz))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- Designatory ([@Designatory](https://github.com/Designatory))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ggicci ([@ggicci](https://github.com/ggicci))\\n- James ([@Zamiell](https://github.com/Zamiell))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeremy ([@jrmyw92](https://github.com/jrmyw92))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Junjie ([@junjieweb](https://github.com/junjieweb))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Michael Hughes ([@mhughes2k](https://github.com/mhughes2k))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Nitya Narasimhan ([@nitya](https://github.com/nitya))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Rui Peres ([@RuiAAPeres](https://github.com/RuiAAPeres))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.20","metadata":{"permalink":"/changelog/2.0.0-beta.20","source":"@site/changelog/source/2.0.0-beta.20.md","title":"2.0.0-beta.20","description":"Bug Fix","date":"2022-05-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Steven Hicks","alias":"pepopowitz","url":"https://github.com/pepopowitz","imageURL":"https://github.com/pepopowitz.png","key":"pepopowitz","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sergey Gromkov","alias":"sgromkov","url":"https://github.com/sgromkov","imageURL":"https://github.com/sgromkov.png","key":"sgromkov","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-05T20:00","authors":["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"nextItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7342](https://github.com/facebook/docusaurus/pull/7342) fix: avoid flash of page scrolling to top on refresh ([@slorber](https://github.com/slorber))\\n - [#7329](https://github.com/facebook/docusaurus/pull/7329) fix(core): inject docusaurus version into SSR as local ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`\\n - [#7341](https://github.com/facebook/docusaurus/pull/7341) fix(theme-classic): properly highlight code block line numbers ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7334](https://github.com/facebook/docusaurus/pull/7334) feat(website): make canary release page display actual canary version name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7343](https://github.com/facebook/docusaurus/pull/7343) docs: add page for create-docusaurus API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7340](https://github.com/facebook/docusaurus/pull/7340) docs: add Yandex Metrika plugin to community plugins ([@sgromkov](https://github.com/sgromkov))\\n- [#7336](https://github.com/facebook/docusaurus/pull/7336) fix(website): fix multiple accessibility issues around color contrast ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7327](https://github.com/facebook/docusaurus/pull/7327) docs: add clarity to versioning behavior ([@pepopowitz](https://github.com/pepopowitz))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sergey Gromkov ([@sgromkov](https://github.com/sgromkov))\\n- Steven Hicks ([@pepopowitz](https://github.com/pepopowitz))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.19","metadata":{"permalink":"/changelog/2.0.0-beta.19","source":"@site/changelog/source/2.0.0-beta.19.md","title":"2.0.0-beta.19","description":"New Feature","date":"2022-05-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aaron Nwabuoku","alias":"aerovulpe","url":"https://github.com/aerovulpe","imageURL":"https://github.com/aerovulpe.png","key":"aerovulpe","page":null},{"name":"AkiraVoid","alias":"AkiraVoid","url":"https://github.com/AkiraVoid","imageURL":"https://github.com/AkiraVoid.png","key":"AkiraVoid","page":null},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"apq","alias":"AntonPalmqvist","url":"https://github.com/AntonPalmqvist","imageURL":"https://github.com/AntonPalmqvist.png","key":"AntonPalmqvist","page":null},{"name":"ApsarasX","alias":"ApsarasX","url":"https://github.com/ApsarasX","imageURL":"https://github.com/ApsarasX.png","key":"ApsarasX","page":null},{"name":"chelproc","alias":"chelproc","url":"https://github.com/chelproc","imageURL":"https://github.com/chelproc.png","key":"chelproc","page":null},{"name":"Viktor Chernodub","alias":"chernodub","url":"https://github.com/chernodub","imageURL":"https://github.com/chernodub.png","key":"chernodub","page":null},{"name":"curatorcat.pcc.eth","alias":"CuratorCat","url":"https://github.com/CuratorCat","imageURL":"https://github.com/CuratorCat.png","key":"CuratorCat","page":null},{"name":"Cwen Yin","alias":"cwen0","url":"https://github.com/cwen0","imageURL":"https://github.com/cwen0.png","key":"cwen0","page":null},{"name":"Fusang\u2740","alias":"cxOrz","url":"https://github.com/cxOrz","imageURL":"https://github.com/cxOrz.png","key":"cxOrz","page":null},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},{"name":"Andrei Canta","alias":"deiucanta","url":"https://github.com/deiucanta","imageURL":"https://github.com/deiucanta.png","key":"deiucanta","page":null},{"name":"deployn","alias":"deployn","url":"https://github.com/deployn","imageURL":"https://github.com/deployn.png","key":"deployn","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Chinazaekpere Ngubo","alias":"dr-ngubo","url":"https://github.com/dr-ngubo","imageURL":"https://github.com/dr-ngubo.png","key":"dr-ngubo","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Elias Papavasileiou","alias":"elias-pap","url":"https://github.com/elias-pap","imageURL":"https://github.com/elias-pap.png","key":"elias-pap","page":null},{"name":"Indermohan Singh","alias":"imsingh","url":"https://github.com/imsingh","imageURL":"https://github.com/imsingh.png","key":"imsingh","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"JMW","alias":"JohnnyMcWeed","url":"https://github.com/JohnnyMcWeed","imageURL":"https://github.com/JohnnyMcWeed.png","key":"JohnnyMcWeed","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},{"name":"kgolubic","alias":"kgolubic","url":"https://github.com/kgolubic","imageURL":"https://github.com/kgolubic.png","key":"kgolubic","page":null},{"name":"loic","alias":"layerzzzio","url":"https://github.com/layerzzzio","imageURL":"https://github.com/layerzzzio.png","key":"layerzzzio","page":null},{"name":"Leedom","alias":"leedom92","url":"https://github.com/leedom92","imageURL":"https://github.com/leedom92.png","key":"leedom92","page":null},{"name":"Martin Blom","alias":"LeviticusMB","url":"https://github.com/LeviticusMB","imageURL":"https://github.com/LeviticusMB.png","key":"LeviticusMB","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},{"name":"Karl Ward","alias":"mjau-mjau","url":"https://github.com/mjau-mjau","imageURL":"https://github.com/mjau-mjau.png","key":"mjau-mjau","page":null},{"name":"mehdim","alias":"mxhdx","url":"https://github.com/mxhdx","imageURL":"https://github.com/mxhdx.png","key":"mxhdx","page":null},{"name":"Chau Tran","alias":"nartc","url":"https://github.com/nartc","imageURL":"https://github.com/nartc.png","key":"nartc","page":null},{"name":"Naveen","alias":"naveensrinivasan","url":"https://github.com/naveensrinivasan","imageURL":"https://github.com/naveensrinivasan.png","key":"naveensrinivasan","page":null},{"name":"Pablo Cordon","alias":"pcordon","url":"https://github.com/pcordon","imageURL":"https://github.com/pcordon.png","key":"pcordon","page":null},{"name":"Lenz Weber-Tronic","alias":"phryneas","url":"https://github.com/phryneas","imageURL":"https://github.com/phryneas.png","key":"phryneas","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"redhat123456","alias":"redhat123456","url":"https://github.com/redhat123456","imageURL":"https://github.com/redhat123456.png","key":"redhat123456","page":null},{"name":"rev","alias":"rev4324","url":"https://github.com/rev4324","imageURL":"https://github.com/rev4324.png","key":"rev4324","page":null},{"name":"Zac A","alias":"sandypockets","url":"https://github.com/sandypockets","imageURL":"https://github.com/sandypockets.png","key":"sandypockets","page":null},{"name":"czhen","alias":"shczhen","url":"https://github.com/shczhen","imageURL":"https://github.com/shczhen.png","key":"shczhen","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Evan","alias":"sulu5890","url":"https://github.com/sulu5890","imageURL":"https://github.com/sulu5890.png","key":"sulu5890","page":null},{"name":"surendran82","alias":"surendran82","url":"https://github.com/surendran82","imageURL":"https://github.com/surendran82.png","key":"surendran82","page":null},{"name":"svix-ken","alias":"svix-ken","url":"https://github.com/svix-ken","imageURL":"https://github.com/svix-ken.png","key":"svix-ken","page":null},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},{"name":"Qi Zhang","alias":"zzzhangqi","url":"https://github.com/zzzhangqi","imageURL":"https://github.com/zzzhangqi.png","key":"zzzhangqi","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-04T20:00","authors":["aerovulpe","AkiraVoid","andrewnicols","AntonPalmqvist","ApsarasX","chelproc","chernodub","CuratorCat","cwen0","cxOrz","DanRoscigno","deiucanta","deployn","Dr-Electron","dr-ngubo","duanwilliam","elias-pap","imsingh","jeffreyaven","jodyheavener","JohnnyMcWeed","johnnyreilly","Josh-Cena","kaycebasques","kgolubic","layerzzzio","leedom92","LeviticusMB","lex111","lukasbach","mjau-mjau","mxhdx","nartc","naveensrinivasan","pcordon","phryneas","Pierre-Gilles","redhat123456","rev4324","sandypockets","shczhen","slorber","sulu5890","surendran82","svix-ken","sykp241095","zzzhangqi"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"nextItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7178](https://github.com/facebook/docusaurus/pull/7178) feat(theme-classic): extensible code block magic comment system ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7007](https://github.com/facebook/docusaurus/pull/7007) feat(theme-classic): code block showLineNumbers ([@lex111](https://github.com/lex111))\\n - [#7012](https://github.com/facebook/docusaurus/pull/7012) feat(theme-classic): show blog sidebar on mobile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`, `eslint-plugin`\\n - [#7206](https://github.com/facebook/docusaurus/pull/7206) feat: Docusaurus ESLint plugin to enforce best Docusaurus practices ([@elias-pap](https://github.com/elias-pap))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7231](https://github.com/facebook/docusaurus/pull/7231) feat: allow custom navbarItem types to pass through validation ([@slorber](https://github.com/slorber))\\n - [#7058](https://github.com/facebook/docusaurus/pull/7058) feat(theme-classic): new \'html\' type navbar item ([@lex111](https://github.com/lex111))\\n - [#7079](https://github.com/facebook/docusaurus/pull/7079) feat: allow using pure HTML as label in navbar links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7036](https://github.com/facebook/docusaurus/pull/7036) feat(theme-classic): toggle code wrap button ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6457](https://github.com/facebook/docusaurus/pull/6457) feat(content-docs): draft docs excluded from build & sidebars ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6430](https://github.com/facebook/docusaurus/pull/6430) feat: allow setting calendar for i18n date formatting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#7083](https://github.com/facebook/docusaurus/pull/7083) feat(core): fail-safe global data fetching ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7106](https://github.com/facebook/docusaurus/pull/7106) feat(content-docs): make docs:version command work on localized docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7082](https://github.com/facebook/docusaurus/pull/7082) feat(core): allow plugins to declare custom route context ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7124](https://github.com/facebook/docusaurus/pull/7124) feat(core): allow plugin/preset config to contain false/null ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils`\\n - [#6979](https://github.com/facebook/docusaurus/pull/6979) feat(sitemap): add ignorePatterns option ([@ApsarasX](https://github.com/ApsarasX))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#7257](https://github.com/facebook/docusaurus/pull/7257) refactor: remove long-deprecated routesLoaded lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7277](https://github.com/facebook/docusaurus/pull/7277) refactor(theme-classic): move all sidebar-related config under themeConfig.docs.sidebar ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#7117](https://github.com/facebook/docusaurus/pull/7117) refactor(content-{blog,docs}): unify handling of tags ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7304](https://github.com/facebook/docusaurus/pull/7304) fix(theme-classic): remove breadcrumb items without href from microdata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7179](https://github.com/facebook/docusaurus/pull/7179) fix(theme-classic): do not add microdata item prop to trailing breadcrumb ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7173](https://github.com/facebook/docusaurus/pull/7173) fix(theme-classic): admonition title: disable text-transform on inline code blocks ([@chelproc](https://github.com/chelproc))\\n - [#7048](https://github.com/facebook/docusaurus/pull/7048) fix(theme-classic): add caret for dropdown on mobile ([@lex111](https://github.com/lex111))\\n - [#7025](https://github.com/facebook/docusaurus/pull/7025) fix: make docs page wrapper take full height ([@lex111](https://github.com/lex111))\\n - [#7013](https://github.com/facebook/docusaurus/pull/7013) fix(theme-classic): adjust shadow on code block ([@chernodub](https://github.com/chernodub))\\n - [#7015](https://github.com/facebook/docusaurus/pull/7015) fix(theme-classic): do not add caret for non-collapsible categories ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7294](https://github.com/facebook/docusaurus/pull/7294) fix(\\\\*): make TypeScript realize that each plugin package has a default export ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7285](https://github.com/facebook/docusaurus/pull/7285) fix(core): allow empty static directories ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7180](https://github.com/facebook/docusaurus/pull/7180) fix: pass pollOptions to webpack ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n - [#7184](https://github.com/facebook/docusaurus/pull/7184) fix(core): prevent 404 when accessing /page.html ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7225](https://github.com/facebook/docusaurus/pull/7225) fix: allow swizzling a component\'s parent folder ([@slorber](https://github.com/slorber))\\n - [#7066](https://github.com/facebook/docusaurus/pull/7066) fix(core): all plugin lifecycles should receive translated content ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7233](https://github.com/facebook/docusaurus/pull/7233) fix(content-docs): make category index text translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#7200](https://github.com/facebook/docusaurus/pull/7200) fix(theme-common): do not persist color mode for OS-triggered changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7057](https://github.com/facebook/docusaurus/pull/7057) fix(theme-common): use native scrolling when smooth behavior set in CSS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7033](https://github.com/facebook/docusaurus/pull/7033) fix(theme): only parse HTML- and JSX-style comments in MD code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#7212](https://github.com/facebook/docusaurus/pull/7212) fix(content-blog): make footnote reference DOM ID unique on post listing page ([@AkiraVoid](https://github.com/AkiraVoid))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7187](https://github.com/facebook/docusaurus/pull/7187) fix(core): handle case where package.json is not available at CWD ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#7222](https://github.com/facebook/docusaurus/pull/7222) fix(theme-translations): fix invalid pluralization in cs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7166](https://github.com/facebook/docusaurus/pull/7166) fix(theme-translations): always try all possible locale resolutions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#7164](https://github.com/facebook/docusaurus/pull/7164) fix: adjust spacing for custom search properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-types`, `docusaurus`\\n - [#7143](https://github.com/facebook/docusaurus/pull/7143) fix(sitemap): exclude pages with robots noindex from sitemap ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-types`\\n - [#7078](https://github.com/facebook/docusaurus/pull/7078) fix(create): install types for JS template as well ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7043](https://github.com/facebook/docusaurus/pull/7043) fix(utils): parse Markdown headings with CRLF line break ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7023](https://github.com/facebook/docusaurus/pull/7023) refactor: fix a few places of path handling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#7014](https://github.com/facebook/docusaurus/pull/7014) fix(types): declare history and react-loadable as dependencies ([@sulu5890](https://github.com/sulu5890))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7299](https://github.com/facebook/docusaurus/pull/7299) refactor: minor improvements for breadcrumbs ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#7290](https://github.com/facebook/docusaurus/pull/7290) refactor(create): add i18n config in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7286](https://github.com/facebook/docusaurus/pull/7286) refactor(create): update screenshots in quick start tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7223](https://github.com/facebook/docusaurus/pull/7223) refactor: use generated-index in init templates ([@slorber](https://github.com/slorber))\\n - [#7118](https://github.com/facebook/docusaurus/pull/7118) refactor(create): mention that the edit links can be removed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#7306](https://github.com/facebook/docusaurus/pull/7306) chore: upgrade Infima to alpha.39 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#7291](https://github.com/facebook/docusaurus/pull/7291) feat(types): JSDoc for docusaurus config fields ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7267](https://github.com/facebook/docusaurus/pull/7267) fix(theme-common): allow details to not provide a summary ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7172](https://github.com/facebook/docusaurus/pull/7172) refactor: control base styling of code blocks via CSS vars ([@lex111](https://github.com/lex111))\\n - [#7129](https://github.com/facebook/docusaurus/pull/7129) refactor(theme-classic): fix a few margin inconsistencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7244](https://github.com/facebook/docusaurus/pull/7244) refactor: semantic markup improvement, fix validation warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7183](https://github.com/facebook/docusaurus/pull/7183) refactor: use SVG icon for home breadcrumb ([@Dr-Electron](https://github.com/Dr-Electron))\\n - [#7139](https://github.com/facebook/docusaurus/pull/7139) fix: proper spacing between generated card items on mobiles ([@lex111](https://github.com/lex111))\\n - [#7134](https://github.com/facebook/docusaurus/pull/7134) fix(theme-classic): fix docs sidebar layout shifts when expanding categories ([@slorber](https://github.com/slorber))\\n - [#7068](https://github.com/facebook/docusaurus/pull/7068) refactor(theme-classic): blog mobile secondary menu use consistent styles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7004](https://github.com/facebook/docusaurus/pull/7004) fix(theme-classic): shrink title size on mobile ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-translations`\\n - [#7214](https://github.com/facebook/docusaurus/pull/7214) chore(theme-translations): complete Polish translations ([@rev4324](https://github.com/rev4324))\\n - [#7031](https://github.com/facebook/docusaurus/pull/7031) chore(theme-translations): complete German translations ([@deployn](https://github.com/deployn))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#7218](https://github.com/facebook/docusaurus/pull/7218) fix(cli): always show error stack to unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7142](https://github.com/facebook/docusaurus/pull/7142) refactor(core): lower timeout before rendering progress bar to 200ms ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7103](https://github.com/facebook/docusaurus/pull/7103) fix(core): preserve Interpolate children semantics ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7029](https://github.com/facebook/docusaurus/pull/7029) refactor: console output improvements ([@lex111](https://github.com/lex111))\\n - [#7017](https://github.com/facebook/docusaurus/pull/7017) refactor: remove copyright comment from swizzled components ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7148](https://github.com/facebook/docusaurus/pull/7148) feat(preset-classic, content-docs/client): JSDoc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#7122](https://github.com/facebook/docusaurus/pull/7122) feat(preset-classic): exclude debug plugin routes from sitemap ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#7113](https://github.com/facebook/docusaurus/pull/7113) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7080](https://github.com/facebook/docusaurus/pull/7080) refactor: replace non-prop interface with type; allow plugin lifecycles to have sync type ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#7019](https://github.com/facebook/docusaurus/pull/7019) feat(logger): new \\"url\\" format, add double quotes around paths ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7006](https://github.com/facebook/docusaurus/pull/7006) refactor: split and cleanup theme/DocPage ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7005](https://github.com/facebook/docusaurus/pull/7005) refactor: split DocSidebarItem by item type ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-logger`\\n - [#7305](https://github.com/facebook/docusaurus/pull/7305) docs: update docs for logger, add API docs to website ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#7284](https://github.com/facebook/docusaurus/pull/7284) docs: add a paragraph about SSR as an optimization technique ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7278](https://github.com/facebook/docusaurus/pull/7278) docs: enhance docs about Markdown TOC and metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7271](https://github.com/facebook/docusaurus/pull/7271) docs: specify Node version requirement to a minor ([@DanRoscigno](https://github.com/DanRoscigno))\\n - [#7252](https://github.com/facebook/docusaurus/pull/7252) docs: update gtag docs to reflect what a GA4 tag looks like ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#7240](https://github.com/facebook/docusaurus/pull/7240) docs: add PCC Archive site to showcase ([@CuratorCat](https://github.com/CuratorCat))\\n - [#7239](https://github.com/facebook/docusaurus/pull/7239) docs: add Chaos mesh site to showcase ([@cwen0](https://github.com/cwen0))\\n - [#7235](https://github.com/facebook/docusaurus/pull/7235) docs: add TiDB community books to showcase ([@shczhen](https://github.com/shczhen))\\n - [#7236](https://github.com/facebook/docusaurus/pull/7236) docs: add documentation about pluralization ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7230](https://github.com/facebook/docusaurus/pull/7230) docs: add OSS Insight to showcase ([@sykp241095](https://github.com/sykp241095))\\n - [#7208](https://github.com/facebook/docusaurus/pull/7208) docs: remove mention of \\"template\\" from README installation guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7159](https://github.com/facebook/docusaurus/pull/7159) docs: explain more clearly the purpose of a ref sidebar type ([@andrewnicols](https://github.com/andrewnicols))\\n - [#7126](https://github.com/facebook/docusaurus/pull/7126) docs: multiple documentation improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7123](https://github.com/facebook/docusaurus/pull/7123) refactor(showcase): enforce descriptions with maximum length of 120 characters ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7026](https://github.com/facebook/docusaurus/pull/7026) docs: correct plugin example filename ([@mxhdx](https://github.com/mxhdx))\\n - [#7110](https://github.com/facebook/docusaurus/pull/7110) docs: add a note about additional languages needing to be Prism component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6746](https://github.com/facebook/docusaurus/pull/6746) fix(website): lazy-load YT iframe ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7061](https://github.com/facebook/docusaurus/pull/7061) docs: add docusaurus-plugin-typedoc to resources ([@nartc](https://github.com/nartc))\\n - [#7059](https://github.com/facebook/docusaurus/pull/7059) docs: add firelordjs to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7050](https://github.com/facebook/docusaurus/pull/7050) docs: add import React statement in JSX file example ([@kaycebasques](https://github.com/kaycebasques))\\n - [#7022](https://github.com/facebook/docusaurus/pull/7022) docs: add Easypanel to showcase ([@deiucanta](https://github.com/deiucanta))\\n - [#7016](https://github.com/facebook/docusaurus/pull/7016) docs: consistently use sidebars.js filename ([@leedom92](https://github.com/leedom92))\\n - [#7020](https://github.com/facebook/docusaurus/pull/7020) docs: add Divine WSF and Ghostly to showcase ([@LeviticusMB](https://github.com/LeviticusMB))\\n - [#7000](https://github.com/facebook/docusaurus/pull/7000) docs: remove unnecessary semicolon ([@imsingh](https://github.com/imsingh))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#7081](https://github.com/facebook/docusaurus/pull/7081) docs: fix some casing inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- Other\\n - [#7309](https://github.com/facebook/docusaurus/pull/7309) chore: use \\"Maintenance\\" instead of \\"Internal\\" in changelog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7300](https://github.com/facebook/docusaurus/pull/7300) misc: check doc page by Lighthouse CI ([@lex111](https://github.com/lex111))\\n - [#7266](https://github.com/facebook/docusaurus/pull/7266) misc: add links section to PR template ([@slorber](https://github.com/slorber))\\n - [#7224](https://github.com/facebook/docusaurus/pull/7224) chore: GitHub Actions cancel-in-progress ([@slorber](https://github.com/slorber))\\n - [#7216](https://github.com/facebook/docusaurus/pull/7216) chore: remove netlify-cli from devDependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7211](https://github.com/facebook/docusaurus/pull/7211) chore: replace node 17 with 18 in CI matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7168](https://github.com/facebook/docusaurus/pull/7168) misc: add CI actions/dependency-review-action for security ([@slorber](https://github.com/slorber))\\n - [#6984](https://github.com/facebook/docusaurus/pull/6984) misc: pin actions to a full-length commit SHA ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n - [#7002](https://github.com/facebook/docusaurus/pull/7002) chore: regen examples for 2.0 beta.18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-remark-plugin-npm2yarn`\\n - [#7295](https://github.com/facebook/docusaurus/pull/7295) refactor: use export = syntax for Node utility packages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7293](https://github.com/facebook/docusaurus/pull/7293) refactor(types): move non-core, non-public types out of the types package ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7292](https://github.com/facebook/docusaurus/pull/7292) refactor(core): collocate CLI commands and their option types ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7084](https://github.com/facebook/docusaurus/pull/7084) refactor(core): code cleanup ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#7282](https://github.com/facebook/docusaurus/pull/7282) refactor(core): prefetch/preload refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7273](https://github.com/facebook/docusaurus/pull/7273) refactor(theme-classic): multiple re-arrangements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7268](https://github.com/facebook/docusaurus/pull/7268) refactor(theme-classic): DocPage theme refactors polish ([@slorber](https://github.com/slorber))\\n - [#7269](https://github.com/facebook/docusaurus/pull/7269) refactor: extract useSkipToContent() ([@slorber](https://github.com/slorber))\\n - [#7175](https://github.com/facebook/docusaurus/pull/7175) refactor(theme-classic): split CodeBlock ([@slorber](https://github.com/slorber))\\n - [#7067](https://github.com/facebook/docusaurus/pull/7067) refactor(theme-classic): extract doc-related navbar items\' logic to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7021](https://github.com/facebook/docusaurus/pull/7021) refactor(theme): extract plumbing code of BTT button into theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7270](https://github.com/facebook/docusaurus/pull/7270) refactor(theme-classic): refactor TOC-related theme components ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#7220](https://github.com/facebook/docusaurus/pull/7220) refactor(cli): normalize the application of default option values ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7141](https://github.com/facebook/docusaurus/pull/7141) refactor(core): minor PendingNavigation refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7243](https://github.com/facebook/docusaurus/pull/7243) chore: upgrade Jest to 28; add GitHub-actions reporter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7140](https://github.com/facebook/docusaurus/pull/7140) refactor(content-docs): split version handling into several files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#7194](https://github.com/facebook/docusaurus/pull/7194) fix: fix a few internal declaration semantic errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-theme-translations`, `docusaurus`\\n - [#7186](https://github.com/facebook/docusaurus/pull/7186) refactor: prefer fs.readJSON over readFile.then(JSON.parse) ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#7145](https://github.com/facebook/docusaurus/pull/7145) refactor: unify how MDX content types are represented ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#7138](https://github.com/facebook/docusaurus/pull/7138) chore: upgrade dependencies + upgrade React types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7131](https://github.com/facebook/docusaurus/pull/7131) chore: disable string escaping in snapshots ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7054](https://github.com/facebook/docusaurus/pull/7054) refactor(core): refactor routes generation logic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#7042](https://github.com/facebook/docusaurus/pull/7042) refactor(core): reorganize files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7037](https://github.com/facebook/docusaurus/pull/7037) refactor(core): reorganize functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`\\n - [#7085](https://github.com/facebook/docusaurus/pull/7085) refactor: mark a few client-side packages as side-effect-free ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#4997](https://github.com/facebook/docusaurus/pull/4997) perf(mdx-loader): cache mdx/remark compiler instances ([@phryneas](https://github.com/phryneas))\\n\\n## Committers: 47\\n\\n- Aaron Nwabuoku ([@aerovulpe](https://github.com/aerovulpe))\\n- AkiraVoid ([@AkiraVoid](https://github.com/AkiraVoid))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrei Canta ([@deiucanta](https://github.com/deiucanta))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- ApsarasX ([@ApsarasX](https://github.com/ApsarasX))\\n- Chau Tran ([@nartc](https://github.com/nartc))\\n- Chinazaekpere Ngubo ([@dr-ngubo](https://github.com/dr-ngubo))\\n- Cwen Yin ([@cwen0](https://github.com/cwen0))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Elias Papavasileiou ([@elias-pap](https://github.com/elias-pap))\\n- Evan ([@sulu5890](https://github.com/sulu5890))\\n- Fusang\u2740 ([@cxOrz](https://github.com/cxOrz))\\n- Indermohan Singh ([@imsingh](https://github.com/imsingh))\\n- JMW ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Karl Ward ([@mjau-mjau](https://github.com/mjau-mjau))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Leedom ([@leedom92](https://github.com/leedom92))\\n- Lenz Weber-Tronic ([@phryneas](https://github.com/phryneas))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Martin Blom ([@LeviticusMB](https://github.com/LeviticusMB))\\n- Naveen ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n- Pablo Cordon ([@pcordon](https://github.com/pcordon))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Qi Zhang ([@zzzhangqi](https://github.com/zzzhangqi))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Viktor Chernodub ([@chernodub](https://github.com/chernodub))\\n- Zac A ([@sandypockets](https://github.com/sandypockets))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@chelproc](https://github.com/chelproc)\\n- [@deployn](https://github.com/deployn)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@kgolubic](https://github.com/kgolubic)\\n- [@redhat123456](https://github.com/redhat123456)\\n- [@surendran82](https://github.com/surendran82)\\n- [@svix-ken](https://github.com/svix-ken)\\n- apq ([@AntonPalmqvist](https://github.com/AntonPalmqvist))\\n- curatorcat.pcc.eth ([@CuratorCat](https://github.com/CuratorCat))\\n- czhen ([@shczhen](https://github.com/shczhen))\\n- loic ([@layerzzzio](https://github.com/layerzzzio))\\n- mehdim ([@mxhdx](https://github.com/mxhdx))\\n- rev ([@rev4324](https://github.com/rev4324))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))"},{"id":"/2.0.0-beta.18","metadata":{"permalink":"/changelog/2.0.0-beta.18","source":"@site/changelog/source/2.0.0-beta.18.md","title":"2.0.0-beta.18","description":"New Feature","date":"2022-03-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afonso Jorge Ramos","alias":"afonsojramos","url":"https://github.com/afonsojramos","imageURL":"https://github.com/afonsojramos.png","key":"afonsojramos","page":null},{"name":"Alessandro Festa","alias":"alefesta","url":"https://github.com/alefesta","imageURL":"https://github.com/alefesta.png","key":"alefesta","page":null},{"name":"Alois Klink","alias":"aloisklink","url":"https://github.com/aloisklink","imageURL":"https://github.com/aloisklink.png","key":"aloisklink","page":null},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"Bugo","alias":"dragomano","url":"https://github.com/dragomano","imageURL":"https://github.com/dragomano.png","key":"dragomano","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Kyohei Fukuda","alias":"hand-dot","url":"https://github.com/hand-dot","imageURL":"https://github.com/hand-dot.png","key":"hand-dot","page":null},{"name":"WonChul Heo","alias":"heowc","url":"https://github.com/heowc","imageURL":"https://github.com/heowc.png","key":"heowc","page":null},{"name":"Jadon N","alias":"jadonn","url":"https://github.com/jadonn","imageURL":"https://github.com/jadonn.png","key":"jadonn","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Roberto Vidal","alias":"jrvidal","url":"https://github.com/jrvidal","imageURL":"https://github.com/jrvidal.png","key":"jrvidal","page":null},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"nate contino","alias":"nathan-contino-mongo","url":"https://github.com/nathan-contino-mongo","imageURL":"https://github.com/nathan-contino-mongo.png","key":"nathan-contino-mongo","page":null},{"name":"Odarpi","alias":"odarpi","url":"https://github.com/odarpi","imageURL":"https://github.com/odarpi.png","key":"odarpi","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"Pawel Kowaluk","alias":"pkowaluk","url":"https://github.com/pkowaluk","imageURL":"https://github.com/pkowaluk.png","key":"pkowaluk","page":null},{"name":"Tsz W. TAM","alias":"rccttwd","url":"https://github.com/rccttwd","imageURL":"https://github.com/rccttwd.png","key":"rccttwd","page":null},{"name":"Sam Gutentag","alias":"samgutentag","url":"https://github.com/samgutentag","imageURL":"https://github.com/samgutentag.png","key":"samgutentag","page":null},{"name":"seladb","alias":"seladb","url":"https://github.com/seladb","imageURL":"https://github.com/seladb.png","key":"seladb","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"tae","alias":"taejs","url":"https://github.com/taejs","imageURL":"https://github.com/taejs.png","key":"taejs","page":null},{"name":"Begula","alias":"vedantmgoyal2009","url":"https://github.com/vedantmgoyal2009","imageURL":"https://github.com/vedantmgoyal2009.png","key":"vedantmgoyal2009","page":null},{"name":"Yorkie Liu","alias":"yorkie","url":"https://github.com/yorkie","imageURL":"https://github.com/yorkie.png","key":"yorkie","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-25T20:00","authors":["afonsojramos","alefesta","aloisklink","arifszn","billy1624","datlechin","DigiPie","dragomano","felipecrs","hand-dot","heowc","jadonn","Josh-Cena","jrvidal","kaycebasques","lex111","moonrailgun","nathan-contino-mongo","odarpi","PatelN123","pkowaluk","rccttwd","samgutentag","seladb","slorber","taejs","vedantmgoyal2009","yorkie"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"nextItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6990](https://github.com/facebook/docusaurus/pull/6990) feat: lazy-load external images + ability to customize image display ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#6933](https://github.com/facebook/docusaurus/pull/6933) feat(core,theme): useRouteContext + HtmlClassNameProvider ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6921](https://github.com/facebook/docusaurus/pull/6921) feat(core): allow plugin lifecycles to return relative paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6697](https://github.com/facebook/docusaurus/pull/6697) feat: add SEO microdata for doc breadcrumbs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6842](https://github.com/facebook/docusaurus/pull/6842) feat(theme-classic): MDXContent wrapper component ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6780](https://github.com/facebook/docusaurus/pull/6780) feat(content-docs): allow custom props through _category_.json ([@taejs](https://github.com/taejs))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#6993](https://github.com/facebook/docusaurus/pull/6993) fix(core): prevent useBaseUrl returning /base/base when on /base ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6936](https://github.com/facebook/docusaurus/pull/6936) fix: remove semicolon from HTML output ([@lex111](https://github.com/lex111))\\n - [#6849](https://github.com/facebook/docusaurus/pull/6849) fix(cli): write-heading-id should not generate colliding slugs when not overwriting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6983](https://github.com/facebook/docusaurus/pull/6983) fix(search): bump Infima, fix search issue due to broken CSS selector ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils-validation`\\n - [#6977](https://github.com/facebook/docusaurus/pull/6977) fix(validation): allow non-object params to remark/rehype plugins ([@aloisklink](https://github.com/aloisklink))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6973](https://github.com/facebook/docusaurus/pull/6973) fix(content-docs): suppress git error on multiple occurrences ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-blog`\\n - [#6947](https://github.com/facebook/docusaurus/pull/6947) fix(content-blog): only create archive route if there are blog posts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6918](https://github.com/facebook/docusaurus/pull/6918) fix(content-blog): remove double leading slash in blog-only paginated view ([@heowc](https://github.com/heowc))\\n- `docusaurus-theme-search-algolia`\\n - [#6888](https://github.com/facebook/docusaurus/pull/6888) fix(theme-algolia): declare content-docs as dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6847](https://github.com/facebook/docusaurus/pull/6847) fix: minor Chinese translation fixes ([@rccttwd](https://github.com/rccttwd))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6887](https://github.com/facebook/docusaurus/pull/6887) fix(content-docs): give context about sidebar loading failure ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6997](https://github.com/facebook/docusaurus/pull/6997) fix(validation): improve error messages for a few schemas ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6971](https://github.com/facebook/docusaurus/pull/6971) refactor: improve a11y of dropdown menu ([@lex111](https://github.com/lex111))\\n - [#6987](https://github.com/facebook/docusaurus/pull/6987) refactor(theme-classic): cleanup of code blocks ([@lex111](https://github.com/lex111))\\n - [#6950](https://github.com/facebook/docusaurus/pull/6950) refactor(theme-classic): clean up CSS of doc cards ([@lex111](https://github.com/lex111))\\n - [#6994](https://github.com/facebook/docusaurus/pull/6994) refactor: better external link icon positioning ([@lex111](https://github.com/lex111))\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n - [#6985](https://github.com/facebook/docusaurus/pull/6985) refactor(theme-classic): remove span wrappers from layout links ([@lex111](https://github.com/lex111))\\n - [#6986](https://github.com/facebook/docusaurus/pull/6986) fix(theme-classic): minor code copy button improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6964](https://github.com/facebook/docusaurus/pull/6964) refactor: replace text-based copy code button with icons ([@lex111](https://github.com/lex111))\\n - [#6932](https://github.com/facebook/docusaurus/pull/6932) refactor(theme-classic): little breadcrumbs improvements ([@lex111](https://github.com/lex111))\\n - [#6914](https://github.com/facebook/docusaurus/pull/6914) feat(theme-classic): set aria-expanded on expandable sidebar categories ([@pkowaluk](https://github.com/pkowaluk))\\n - [#6844](https://github.com/facebook/docusaurus/pull/6844) refactor(theme-classic): split sidebar into smaller parts ([@slorber](https://github.com/slorber))\\n - [#6846](https://github.com/facebook/docusaurus/pull/6846) refactor(theme-classic): consistently add span wrapper for layout links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6980](https://github.com/facebook/docusaurus/pull/6980) feat(utils): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6974](https://github.com/facebook/docusaurus/pull/6974) feat(theme-common): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6784](https://github.com/facebook/docusaurus/pull/6784) feat(core): allow configureWebpack to return undefined ([@yorkie](https://github.com/yorkie))\\n - [#6941](https://github.com/facebook/docusaurus/pull/6941) refactor(core): improve error message when a page has no default-export ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6878](https://github.com/facebook/docusaurus/pull/6878) fix(core): ensure stable webpack theme aliases sorting ([@jrvidal](https://github.com/jrvidal))\\n - [#6854](https://github.com/facebook/docusaurus/pull/6854) fix(core): fix swizzle legend typo ([@DigiPie](https://github.com/DigiPie))\\n - [#6850](https://github.com/facebook/docusaurus/pull/6850) fix(core): make plugin lifecycles consistently bound to the plugin instance ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6937](https://github.com/facebook/docusaurus/pull/6937) fix(content-docs): warn when files are not tracked ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n - [#6894](https://github.com/facebook/docusaurus/pull/6894) refactor(theme-classic): split theme footer into smaller components + swizzle config ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#6929](https://github.com/facebook/docusaurus/pull/6929) refactor(core): minor routes type improvement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`\\n - [#6928](https://github.com/facebook/docusaurus/pull/6928) chore(pwa, sitemap, client-redirects, ideal-image): JSDoc for types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#6922](https://github.com/facebook/docusaurus/pull/6922) refactor(content-blog): clean up type definitions; in-code documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6781](https://github.com/facebook/docusaurus/pull/6781) feat(theme-translations): complete Russian translations ([@dragomano](https://github.com/dragomano))\\n - [#6877](https://github.com/facebook/docusaurus/pull/6877) chore(theme-translations): complete Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-plugin-content-blog`\\n - [#6909](https://github.com/facebook/docusaurus/pull/6909) refactor(content-blog): improve error message of authors map validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6860](https://github.com/facebook/docusaurus/pull/6860) fix(create): load entry file after node version checking ([@taejs](https://github.com/taejs))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6988](https://github.com/facebook/docusaurus/pull/6988) docs: fix example admonition syntax ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6978](https://github.com/facebook/docusaurus/pull/6978) docs: npm run tsc -> npx tsc ([@jadonn](https://github.com/jadonn))\\n - [#6952](https://github.com/facebook/docusaurus/pull/6952) docs: add K3ai to showcase ([@alefesta](https://github.com/alefesta))\\n - [#6948](https://github.com/facebook/docusaurus/pull/6948) docs: add pdfme docs to showcase ([@hand-dot](https://github.com/hand-dot))\\n - [#6943](https://github.com/facebook/docusaurus/pull/6943) docs: add SeaORM docs to showcase ([@billy1624](https://github.com/billy1624))\\n - [#6926](https://github.com/facebook/docusaurus/pull/6926) docs: clarify the usage of slug ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6911](https://github.com/facebook/docusaurus/pull/6911) docs: add Reactive Button site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6904](https://github.com/facebook/docusaurus/pull/6904) docs: update image for digital support services ([@PatelN123](https://github.com/PatelN123))\\n - [#6892](https://github.com/facebook/docusaurus/pull/6892) docs: add EduLinks site to showcase ([@odarpi](https://github.com/odarpi))\\n - [#6889](https://github.com/facebook/docusaurus/pull/6889) docs: editorial fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6883](https://github.com/facebook/docusaurus/pull/6883) docs(cli): add info about development on github codespaces ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n - [#6856](https://github.com/facebook/docusaurus/pull/6856) docs: add Reddit Image Fetcher site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6875](https://github.com/facebook/docusaurus/pull/6875) docs: update TRPG Engine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#6871](https://github.com/facebook/docusaurus/pull/6871) docs: mark clutch and gulp as open-source ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6862](https://github.com/facebook/docusaurus/pull/6862) docs: update showcase data ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6837](https://github.com/facebook/docusaurus/pull/6837) docs: add PcapPlusPlus to showcase ([@seladb](https://github.com/seladb))\\n - [#6832](https://github.com/facebook/docusaurus/pull/6832) docs: add Spicetify site to showcase ([@afonsojramos](https://github.com/afonsojramos))\\n - [#6830](https://github.com/facebook/docusaurus/pull/6830) docs: simplify imported code blocks syntax ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- `docusaurus-types`\\n - [#6881](https://github.com/facebook/docusaurus/pull/6881) docs: mention configureWebpack devServer return value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6833](https://github.com/facebook/docusaurus/pull/6833) docs: make tutorial code block directly copyable ([@samgutentag](https://github.com/samgutentag))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6995](https://github.com/facebook/docusaurus/pull/6995) refactor: ensure all types are using index signature instead of Record ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6991](https://github.com/facebook/docusaurus/pull/6991) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `lqip-loader`\\n - [#6992](https://github.com/facebook/docusaurus/pull/6992) refactor(lqip-loader): remove unused palette option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6975](https://github.com/facebook/docusaurus/pull/6975) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#6967](https://github.com/facebook/docusaurus/pull/6967) chore: publish stylelint-copyright again ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6961](https://github.com/facebook/docusaurus/pull/6961) refactor: unify how validateOptions is handled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#6957](https://github.com/facebook/docusaurus/pull/6957) chore(types): remove querystring from dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus`\\n - [#6956](https://github.com/facebook/docusaurus/pull/6956) test: improve test coverage; reorder theme-common files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6955](https://github.com/facebook/docusaurus/pull/6955) refactor(core): move browserContext and docusaurusContext out of client exports ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6944](https://github.com/facebook/docusaurus/pull/6944) chore: migrate Jest and website to SWC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6951](https://github.com/facebook/docusaurus/pull/6951) test: fix Windows test for gitUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6931](https://github.com/facebook/docusaurus/pull/6931) chore: tighten ESLint config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`\\n - [#6924](https://github.com/facebook/docusaurus/pull/6924) refactor(client-redirects): migrate validation to validateOptions lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6916](https://github.com/facebook/docusaurus/pull/6916) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6912](https://github.com/facebook/docusaurus/pull/6912) test: improve test coverage; multiple internal refactors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6910](https://github.com/facebook/docusaurus/pull/6910) refactor: convert Jest infrastructure to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6838](https://github.com/facebook/docusaurus/pull/6838) fix(website): changelog plugin leads to CI bugs on release ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#6908](https://github.com/facebook/docusaurus/pull/6908) chore: do not print prototype in jest snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6906](https://github.com/facebook/docusaurus/pull/6906) refactor: install eslint-plugin-regexp ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#6905](https://github.com/facebook/docusaurus/pull/6905) test: improve test coverage; properly test core client APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6903](https://github.com/facebook/docusaurus/pull/6903) chore: spell-check test files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6902](https://github.com/facebook/docusaurus/pull/6902) test(theme-common): improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6900](https://github.com/facebook/docusaurus/pull/6900) test: enable a few jest eslint rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6898](https://github.com/facebook/docusaurus/pull/6898) refactor: import jest as global; unify import style of some modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6891](https://github.com/facebook/docusaurus/pull/6891) refactor(theme-classic): avoid using clsx class dict with CSS modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6880](https://github.com/facebook/docusaurus/pull/6880) refactor: prefer fs.outputFile to ensureDir + writeFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#6866](https://github.com/facebook/docusaurus/pull/6866) refactor: improve types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#6864](https://github.com/facebook/docusaurus/pull/6864) refactor: remove unnecessary default values normalized during validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus`\\n - [#6861](https://github.com/facebook/docusaurus/pull/6861) refactor: make JS executables included in the tsconfig for editor hints ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6857](https://github.com/facebook/docusaurus/pull/6857) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6852](https://github.com/facebook/docusaurus/pull/6852) refactor: enable a few TS flags ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 28\\n\\n- Afonso Jorge Ramos ([@afonsojramos](https://github.com/afonsojramos))\\n- Alessandro Festa ([@alefesta](https://github.com/alefesta))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Alois Klink ([@aloisklink](https://github.com/aloisklink))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- Begula ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Bugo ([@dragomano](https://github.com/dragomano))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Jadon N ([@jadonn](https://github.com/jadonn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Kyohei Fukuda ([@hand-dot](https://github.com/hand-dot))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Odarpi ([@odarpi](https://github.com/odarpi))\\n- Pawel Kowaluk ([@pkowaluk](https://github.com/pkowaluk))\\n- Roberto Vidal ([@jrvidal](https://github.com/jrvidal))\\n- Sam Gutentag ([@samgutentag](https://github.com/samgutentag))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tsz W. TAM ([@rccttwd](https://github.com/rccttwd))\\n- WonChul Heo ([@heowc](https://github.com/heowc))\\n- Yorkie Liu ([@yorkie](https://github.com/yorkie))\\n- [@seladb](https://github.com/seladb)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- nate contino ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- tae ([@taejs](https://github.com/taejs))"},{"id":"/2.0.0-beta.17","metadata":{"permalink":"/changelog/2.0.0-beta.17","source":"@site/changelog/source/2.0.0-beta.17.md","title":"2.0.0-beta.17","description":"New Feature","date":"2022-03-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alex Nicholls","alias":"anicholls","url":"https://github.com/anicholls","imageURL":"https://github.com/anicholls.png","key":"anicholls","page":null},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},{"name":"David Stotijn","alias":"dstotijn","url":"https://github.com/dstotijn","imageURL":"https://github.com/dstotijn.png","key":"dstotijn","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-03T20:00","authors":["anicholls","arifszn","dmitryvinn","dstotijn","Josh-Cena","PatelN123","slorber","vaibhavshn"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"nextItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6783](https://github.com/facebook/docusaurus/pull/6783) feat: allow blog authors email ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#6827](https://github.com/facebook/docusaurus/pull/6827) fix(theme-classic): restore docusaurus search meta ([@slorber](https://github.com/slorber))\\n - [#6767](https://github.com/facebook/docusaurus/pull/6767) fix(theme-classic): allow code tags containing inline elements to stay inline ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6824](https://github.com/facebook/docusaurus/pull/6824) fix(theme-common): breadcrumbs home bug in docs-only ([@slorber](https://github.com/slorber))\\n - [#6816](https://github.com/facebook/docusaurus/pull/6816) fix(theme-common): docs breadcrumbs not working with baseUrl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6700](https://github.com/facebook/docusaurus/pull/6700) fix(content-docs): always sort autogenerated sidebar items by file/folder name by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6812](https://github.com/facebook/docusaurus/pull/6812) fix(core): remove hash/query when filtering existing files for broken link check ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6779](https://github.com/facebook/docusaurus/pull/6779) fix(mdx-loader): suppress image reading warning in Yarn PnP; log warning instead of error ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6762](https://github.com/facebook/docusaurus/pull/6762) fix(create): update broken SVG paths in templates ([@anicholls](https://github.com/anicholls))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#6826](https://github.com/facebook/docusaurus/pull/6826) refactor(theme-common): unify missing context errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6769](https://github.com/facebook/docusaurus/pull/6769) refactor(theme-classic): use Material icon for language dropdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6792](https://github.com/facebook/docusaurus/pull/6792) fix(mdx-loader): allow image paths to be URL encoded ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6825](https://github.com/facebook/docusaurus/pull/6825) docs: Adds Netlify one click deploy to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6818](https://github.com/facebook/docusaurus/pull/6818) docs: add deploy with vercel button to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6817](https://github.com/facebook/docusaurus/pull/6817) docs: fix broken links ([@PatelN123](https://github.com/PatelN123))\\n - [#6811](https://github.com/facebook/docusaurus/pull/6811) docs: add homepage banner in support of Ukraine ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6813](https://github.com/facebook/docusaurus/pull/6813) docs: mark dyte as opensource in showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6776](https://github.com/facebook/docusaurus/pull/6776) docs: make GitHub actions explanation aligned with the code ([@arifszn](https://github.com/arifszn))\\n - [#6772](https://github.com/facebook/docusaurus/pull/6772) docs: add basic documentation about client modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6815](https://github.com/facebook/docusaurus/pull/6815) fix: consistently use `max-width: 996px` in media queries ([@dstotijn](https://github.com/dstotijn))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6821](https://github.com/facebook/docusaurus/pull/6821) test(content-docs): refactor navigation test snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6768](https://github.com/facebook/docusaurus/pull/6768) test: add TypeScript template to E2E test matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6773](https://github.com/facebook/docusaurus/pull/6773) refactor(utils): categorize functions into separate files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6761](https://github.com/facebook/docusaurus/pull/6761) chore: various internal fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 8\\n\\n- Alex Nicholls ([@anicholls](https://github.com/anicholls))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- David Stotijn ([@dstotijn](https://github.com/dstotijn))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))"},{"id":"/2.0.0-beta.16","metadata":{"permalink":"/changelog/2.0.0-beta.16","source":"@site/changelog/source/2.0.0-beta.16.md","title":"2.0.0-beta.16","description":"New Feature","date":"2022-02-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Gaurish","alias":"apidev234","url":"https://github.com/apidev234","imageURL":"https://github.com/apidev234.png","key":"apidev234","page":null},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"BigDataWriter","alias":"BigDataWriter","url":"https://github.com/BigDataWriter","imageURL":"https://github.com/BigDataWriter.png","key":"BigDataWriter","page":null},{"name":"Clement Demonchy","alias":"cdemonchy-pro","url":"https://github.com/cdemonchy-pro","imageURL":"https://github.com/cdemonchy-pro.png","key":"cdemonchy-pro","page":null},{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},{"name":"CookieJarApps","alias":"CookieJarApps","url":"https://github.com/CookieJarApps","imageURL":"https://github.com/CookieJarApps.png","key":"CookieJarApps","page":null},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},{"name":"Dmitry Vinnik | Meta","alias":"dmitryvinn-fb","url":"https://github.com/dmitryvinn-fb","imageURL":"https://github.com/dmitryvinn-fb.png","key":"dmitryvinn-fb","page":null},{"name":"Everardo J. Barojas M.","alias":"ebarojas","url":"https://github.com/ebarojas","imageURL":"https://github.com/ebarojas.png","key":"ebarojas","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Daniel Kalevski","alias":"kalevski","url":"https://github.com/kalevski","imageURL":"https://github.com/kalevski.png","key":"kalevski","page":null},{"name":"Kishan Gajera","alias":"kgajera","url":"https://github.com/kgajera","imageURL":"https://github.com/kgajera.png","key":"kgajera","page":null},{"name":"Konstantin Tarkus","alias":"koistya","url":"https://github.com/koistya","imageURL":"https://github.com/koistya.png","key":"koistya","page":null},{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Miles Johnson","alias":"milesj","url":"https://github.com/milesj","imageURL":"https://github.com/milesj.png","key":"milesj","page":null},{"name":"Matheus Ricardo Brunelli","alias":"mrbrunelli","url":"https://github.com/mrbrunelli","imageURL":"https://github.com/mrbrunelli.png","key":"mrbrunelli","page":null},{"name":"Naseel Niyas","alias":"NaseelNiyas","url":"https://github.com/NaseelNiyas","imageURL":"https://github.com/NaseelNiyas.png","key":"NaseelNiyas","page":null},{"name":"nick-verida","alias":"nick-verida","url":"https://github.com/nick-verida","imageURL":"https://github.com/nick-verida.png","key":"nick-verida","page":null},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Muhammad Redho Ayassa","alias":"redhoyasa","url":"https://github.com/redhoyasa","imageURL":"https://github.com/redhoyasa.png","key":"redhoyasa","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"Ruben Arushanyan","alias":"Ruben-Arushanyan","url":"https://github.com/Ruben-Arushanyan","imageURL":"https://github.com/Ruben-Arushanyan.png","key":"Ruben-Arushanyan","page":null},{"name":"seyoon20087","alias":"seyoon20087","url":"https://github.com/seyoon20087","imageURL":"https://github.com/seyoon20087.png","key":"seyoon20087","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tamal Web","alias":"tamalweb","url":"https://github.com/tamalweb","imageURL":"https://github.com/tamalweb.png","key":"tamalweb","page":null},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null},{"name":"Daniel Hanke","alias":"thedanielhanke","url":"https://github.com/thedanielhanke","imageURL":"https://github.com/thedanielhanke.png","key":"thedanielhanke","page":null},{"name":"toto6038","alias":"toto6038","url":"https://github.com/toto6038","imageURL":"https://github.com/toto6038.png","key":"toto6038","page":null},{"name":"Matthew Ailes","alias":"vidarc","url":"https://github.com/vidarc","imageURL":"https://github.com/vidarc.png","key":"vidarc","page":null},{"name":"\uc774\uc815\ud658","alias":"winterlood","url":"https://github.com/winterlood","imageURL":"https://github.com/winterlood.png","key":"winterlood","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-02-25T20:00","authors":["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"nextItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-logger`, `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6243](https://github.com/facebook/docusaurus/pull/6243) feat(core): brand new swizzle CLI experience ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6750](https://github.com/facebook/docusaurus/pull/6750) feat(create): new --package-manager option; interactive package manager selection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6610](https://github.com/facebook/docusaurus/pull/6610) feat(create): allow specifying a git clone strategy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6723](https://github.com/facebook/docusaurus/pull/6723) feat: sync color mode between browser tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#6692](https://github.com/facebook/docusaurus/pull/6692) feat(search-algolia): allow disabling search page and configuring path ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6517](https://github.com/facebook/docusaurus/pull/6517) feat(docs,theme-classic): docs breadcrumbs ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6519](https://github.com/facebook/docusaurus/pull/6519) feat(content-docs): sidebar item type \\"html\\" for rendering pure markup ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6593](https://github.com/facebook/docusaurus/pull/6593) feat(content-blog): infer blog post date from git history ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-docs`\\n - [#6619](https://github.com/facebook/docusaurus/pull/6619) feat(content-docs): add custom props front matter ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6452](https://github.com/facebook/docusaurus/pull/6452) feat(content-docs): allow explicitly disabling index page for generated category ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6603](https://github.com/facebook/docusaurus/pull/6603) feat(content-blog): allow customizing blog archive component through option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6221](https://github.com/facebook/docusaurus/pull/6221) feat(content-blog): Allow pagination for BlogTagsPostsPage ([@redhoyasa](https://github.com/redhoyasa))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6752](https://github.com/facebook/docusaurus/pull/6752) chore: upgrade docsearch-react to v3 stable, bump dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#6729](https://github.com/facebook/docusaurus/pull/6729) refactor: make MDX export a flat TOC list instead of tree ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6740](https://github.com/facebook/docusaurus/pull/6740) refactor: remove deprecated Webpack utils & validation escape hatch ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6707](https://github.com/facebook/docusaurus/pull/6707) refactor(theme-classic): bias again search metadata toward Algolia DocSearch ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6758](https://github.com/facebook/docusaurus/pull/6758) fix(theme-common): isSamePath should be case-insensitive ([@slorber](https://github.com/slorber))\\n - [#6748](https://github.com/facebook/docusaurus/pull/6748) fix(theme-classic): temporarily disable toc heading autoscrolling ([@slorber](https://github.com/slorber))\\n - [#6696](https://github.com/facebook/docusaurus/pull/6696) fix(theme-common): do not run useLocationChange when hot reloading ([@lex111](https://github.com/lex111))\\n - [#6490](https://github.com/facebook/docusaurus/pull/6490) fix(theme-classic): do not switch color modes when printing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6749](https://github.com/facebook/docusaurus/pull/6749) fix(theme-classic): fix breadcrumb home link bug with new useHomePageRoute() hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6720](https://github.com/facebook/docusaurus/pull/6720) fix(content-docs): create assets for frontmatter images ([@lebalz](https://github.com/lebalz))\\n - [#6592](https://github.com/facebook/docusaurus/pull/6592) fix(content-docs): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n - [#6477](https://github.com/facebook/docusaurus/pull/6477) fix(content-docs): export versioning utils ([@milesj](https://github.com/milesj))\\n- `docusaurus-mdx-loader`\\n - [#6712](https://github.com/facebook/docusaurus/pull/6712) fix(mdx-loader): make headings containing links properly formatted in ToC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6701](https://github.com/facebook/docusaurus/pull/6701) fix(cli): disable directory listing in serve ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6607](https://github.com/facebook/docusaurus/pull/6607) fix(cli): log error itself on unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6500](https://github.com/facebook/docusaurus/pull/6500) fix(cli): allow passing a list of file names to write-heading-ids ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6496](https://github.com/facebook/docusaurus/pull/6496) fix(core): configValidation should allow inline theme functions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6652](https://github.com/facebook/docusaurus/pull/6652) fix(theme-classic): minor BTT button fixes ([@lex111](https://github.com/lex111))\\n - [#6612](https://github.com/facebook/docusaurus/pull/6612) fix(theme-classic): make Prism additional languages properly server-side rendered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6599](https://github.com/facebook/docusaurus/pull/6599) fix(theme-classic): add docSidebar as allowed item in dropdown ([@homotechsual](https://github.com/homotechsual))\\n - [#6531](https://github.com/facebook/docusaurus/pull/6531) fix(theme-classic): highlight active collapsible doc category properly ([@lex111](https://github.com/lex111))\\n - [#6515](https://github.com/facebook/docusaurus/pull/6515) fix(theme-classic): add key prop for SimpleLinks map ([@kgajera](https://github.com/kgajera))\\n - [#6508](https://github.com/facebook/docusaurus/pull/6508) fix(theme-classic): apply width/height for footer logos without href ([@kgajera](https://github.com/kgajera))\\n- `docusaurus-utils`\\n - [#6617](https://github.com/facebook/docusaurus/pull/6617) fix(utils): convert Markdown links in reference-style links with multiple spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6489](https://github.com/facebook/docusaurus/pull/6489) fix(utils): do not resolve Markdown paths with @site prefix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6478](https://github.com/facebook/docusaurus/pull/6478) fix(utils): Markdown linkification match local paths beginning with http ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6495](https://github.com/facebook/docusaurus/pull/6495) fix(content-docs): render category with no subitems as a normal link ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6755](https://github.com/facebook/docusaurus/pull/6755) refactor: unify error handling behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6679](https://github.com/facebook/docusaurus/pull/6679) feat(create): better detection of package manager preference ([@lex111](https://github.com/lex111))\\n - [#6481](https://github.com/facebook/docusaurus/pull/6481) refactor(init): promote good practices; use site alias ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6745](https://github.com/facebook/docusaurus/pull/6745) fix(content-docs): improve sidebar shorthand normalization error message ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6602](https://github.com/facebook/docusaurus/pull/6602) feat(content-docs): allow omitting enclosing array consistently for category shorthand ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6596](https://github.com/facebook/docusaurus/pull/6596) refactor(content-docs): clean up sidebars logic; validate generator returns ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6586](https://github.com/facebook/docusaurus/pull/6586) refactor(content-docs): read category metadata files before autogenerating ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6730](https://github.com/facebook/docusaurus/pull/6730) refactor: declare all props as interfaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6711](https://github.com/facebook/docusaurus/pull/6711) chore(theme-translations): complete Korean translations ([@revi](https://github.com/revi))\\n - [#6686](https://github.com/facebook/docusaurus/pull/6686) fix(theme-translations): improve Korean translations ([@winterlood](https://github.com/winterlood))\\n - [#6635](https://github.com/facebook/docusaurus/pull/6635) refactor(theme-translation): improve Traditional Chinese translation quality ([@toto6038](https://github.com/toto6038))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#6674](https://github.com/facebook/docusaurus/pull/6674) fix(theme-classic): improve aria label of color mode toggle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6668](https://github.com/facebook/docusaurus/pull/6668) refactor: recommend using data-theme without html element selector ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6622](https://github.com/facebook/docusaurus/pull/6622) refactor(theme-classic): clean up CSS of doc sidebar item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#6644](https://github.com/facebook/docusaurus/pull/6644) fix(core): forward ref to Link\'s anchor element ([@koistya](https://github.com/koistya))\\n - [#6646](https://github.com/facebook/docusaurus/pull/6646) fix(cli): make docusaurus clear also remove .yarn/.cache folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6306](https://github.com/facebook/docusaurus/pull/6306) feat(core): use react-helmet-async ([@seyoon20087](https://github.com/seyoon20087))\\n- `docusaurus-utils-validation`\\n - [#6656](https://github.com/facebook/docusaurus/pull/6656) feat: allow numbers in plugin ID ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `lqip-loader`\\n - [#6650](https://github.com/facebook/docusaurus/pull/6650) refactor(utils): replace hash with contenthash for file loader ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6615](https://github.com/facebook/docusaurus/pull/6615) fix: remove more peer dependency warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6598](https://github.com/facebook/docusaurus/pull/6598) feat: make Markdown images lazy loaded ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6505](https://github.com/facebook/docusaurus/pull/6505) fix(theme-classic): make focused link outlined with JS disabled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#6507](https://github.com/facebook/docusaurus/pull/6507) refactor: improve internal typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6498](https://github.com/facebook/docusaurus/pull/6498) fix: updating peerDependency fields for yarn berry ([@vidarc](https://github.com/vidarc))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#6482](https://github.com/facebook/docusaurus/pull/6482) feat: mark some text labels as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6727](https://github.com/facebook/docusaurus/pull/6727) docs: add Blog Matheus Brunelli site to showcase ([@mrbrunelli](https://github.com/mrbrunelli))\\n - [#6721](https://github.com/facebook/docusaurus/pull/6721) docs: add Butterfly Documentation to showcase ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n - [#6710](https://github.com/facebook/docusaurus/pull/6710) docs(website): Add techharvesting to showcase ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n - [#6708](https://github.com/facebook/docusaurus/pull/6708) docs: add doc for generated-index keyword/image metadata ([@slorber](https://github.com/slorber))\\n - [#6709](https://github.com/facebook/docusaurus/pull/6709) docs(website): fix video responsiveness ([@lex111](https://github.com/lex111))\\n - [#6687](https://github.com/facebook/docusaurus/pull/6687) docs: add deep dive video for Docusaurus ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6704](https://github.com/facebook/docusaurus/pull/6704) docs(website): search doc typo searchParameters ([@slorber](https://github.com/slorber))\\n - [#6682](https://github.com/facebook/docusaurus/pull/6682) docs: add redux-cool site to showcase ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n - [#6677](https://github.com/facebook/docusaurus/pull/6677) docs: add Rivalis to showcase ([@kalevski](https://github.com/kalevski))\\n - [#6676](https://github.com/facebook/docusaurus/pull/6676) docs: add SmartCookieWeb site to showcase ([@CookieJarApps](https://github.com/CookieJarApps))\\n - [#6675](https://github.com/facebook/docusaurus/pull/6675) docs: mention that all official themes are TypeScript-covered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6673](https://github.com/facebook/docusaurus/pull/6673) docs: mention about blog date in front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6672](https://github.com/facebook/docusaurus/pull/6672) refactor(website): extract homepage data from UI; feature text updates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6670](https://github.com/facebook/docusaurus/pull/6670) docs: add CyberDrain Improved Partner Portal (CIPP) to showcase ([@homotechsual](https://github.com/homotechsual))\\n - [#6667](https://github.com/facebook/docusaurus/pull/6667) fix(website): make YT iframe responsive ([@lex111](https://github.com/lex111))\\n - [#6659](https://github.com/facebook/docusaurus/pull/6659) docs: add eli5 video to home page ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n - [#6633](https://github.com/facebook/docusaurus/pull/6633) docs: improve wording of using Markdown file paths ([@BigDataWriter](https://github.com/BigDataWriter))\\n - [#6624](https://github.com/facebook/docusaurus/pull/6624) docs: add Resoto & Some Engineering Inc. to showcase ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6611](https://github.com/facebook/docusaurus/pull/6611) docs: fix bad anchor link syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6591](https://github.com/facebook/docusaurus/pull/6591) docs: improve GitHub Actions example jobs ([@ebarojas](https://github.com/ebarojas))\\n - [#6426](https://github.com/facebook/docusaurus/pull/6426) feat(website): add Tweets section ([@yangshun](https://github.com/yangshun))\\n - [#6532](https://github.com/facebook/docusaurus/pull/6532) docs: add SAP Cloud SDK to showcase ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#6513](https://github.com/facebook/docusaurus/pull/6513) docs: clean up CONTRIBUTING ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6501](https://github.com/facebook/docusaurus/pull/6501) docs: add Cloudflare pages deployment guide ([@apidev234](https://github.com/apidev234))\\n - [#6499](https://github.com/facebook/docusaurus/pull/6499) docs: mention how env vars can be read ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6492](https://github.com/facebook/docusaurus/pull/6492) docs: mention where to find the sitemap ([@tamalweb](https://github.com/tamalweb))\\n - [#6491](https://github.com/facebook/docusaurus/pull/6491) docs: add developers.verida to showcase ([@nick-verida](https://github.com/nick-verida))\\n - [#6414](https://github.com/facebook/docusaurus/pull/6414) feat(website): new plugin to load CHANGELOG and render as blog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6404](https://github.com/facebook/docusaurus/pull/6404) docs: elaborate on Markdown asset linking; document pathname:// protocol ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6484](https://github.com/facebook/docusaurus/pull/6484) docs: remove mention that CDN resources are cached cross-domain ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6429](https://github.com/facebook/docusaurus/pull/6429) refactor: self-host KaTeX assets ([@pranabdas](https://github.com/pranabdas))\\n - [#6483](https://github.com/facebook/docusaurus/pull/6483) docs: mark a lot of website texts as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#6627](https://github.com/facebook/docusaurus/pull/6627) docs: fix presets documentation link ([@thedanielhanke](https://github.com/thedanielhanke))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6759](https://github.com/facebook/docusaurus/pull/6759) refactor(theme-classic): merge CSS files for Heading ([@slorber](https://github.com/slorber))\\n - [#6584](https://github.com/facebook/docusaurus/pull/6584) misc: enable jsx-key eslint rule ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6756](https://github.com/facebook/docusaurus/pull/6756) test: sort migration test FS mock calls ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6609](https://github.com/facebook/docusaurus/pull/6609) refactor(migrate): change internal methods\' parameter style ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6476](https://github.com/facebook/docusaurus/pull/6476) chore: fix Stylelint globs for editor support ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6744](https://github.com/facebook/docusaurus/pull/6744) fix(content-docs): properly display collocated social card image ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6742](https://github.com/facebook/docusaurus/pull/6742) refactor: improve client modules types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#6741](https://github.com/facebook/docusaurus/pull/6741) chore(module-type-aliases): add react as peer dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6658](https://github.com/facebook/docusaurus/pull/6658) refactor(module-aliases): remove react-helmet dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6726](https://github.com/facebook/docusaurus/pull/6726) misc: improve bug report template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6512](https://github.com/facebook/docusaurus/pull/6512) misc: configure linguist behavior to show better language stats ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6487](https://github.com/facebook/docusaurus/pull/6487) chore: fix codesandbox example link + mention npm publish recovery ([@slorber](https://github.com/slorber))\\n - [#6486](https://github.com/facebook/docusaurus/pull/6486) chore: update examples for beta.15 ([@slorber](https://github.com/slorber))\\n - [#6485](https://github.com/facebook/docusaurus/pull/6485) fix(website): bad translate tags without default translation ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6716](https://github.com/facebook/docusaurus/pull/6716) refactor: ensure lodash is default-imported ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-migrate`, `docusaurus`\\n - [#6661](https://github.com/facebook/docusaurus/pull/6661) refactor: convert CLI entry points to ESM; migrate create-docusaurus to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6629](https://github.com/facebook/docusaurus/pull/6629) refactor: move module declarations for non-route components to theme-classic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#6614](https://github.com/facebook/docusaurus/pull/6614) refactor: remove Babel plugins that are included in preset-env ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6605](https://github.com/facebook/docusaurus/pull/6605) chore: fix ESLint warnings, restrict export all syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6583](https://github.com/facebook/docusaurus/pull/6583) refactor(live-codeblock): migrate theme to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6524](https://github.com/facebook/docusaurus/pull/6524) refactor: enforce named capture groups; clean up regexes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#6521](https://github.com/facebook/docusaurus/pull/6521) refactor: mark all functions that import external modules as async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6514](https://github.com/facebook/docusaurus/pull/6514) chore: clean up ESLint config, enable a few rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6511](https://github.com/facebook/docusaurus/pull/6511) refactor(core): convert theme-fallback to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#6506](https://github.com/facebook/docusaurus/pull/6506) test: add test for readOutputHTMLFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-theme-common`\\n - [#6502](https://github.com/facebook/docusaurus/pull/6502) refactor: fix all eslint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus`\\n - [#6474](https://github.com/facebook/docusaurus/pull/6474) test: rename \'fixtures\' to \'**fixtures**\' ([@nschonni](https://github.com/nschonni))\\n\\n## :running: Performance\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6725](https://github.com/facebook/docusaurus/pull/6725) refactor: convert all fs methods to async ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 38\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Balthasar Hofer ([@lebalz](https://github.com/lebalz))\\n- Clement Demonchy ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- CodeDoctor ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n- Daniel Hanke ([@thedanielhanke](https://github.com/thedanielhanke))\\n- Daniel Kalevski ([@kalevski](https://github.com/kalevski))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Dmitry Vinnik | Meta ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Everardo J. Barojas M. ([@ebarojas](https://github.com/ebarojas))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Gaurish ([@apidev234](https://github.com/apidev234))\\n- Hong Yongmin ([@revi](https://github.com/revi))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kishan Gajera ([@kgajera](https://github.com/kgajera))\\n- Konstantin Tarkus ([@koistya](https://github.com/koistya))\\n- Matheus Ricardo Brunelli ([@mrbrunelli](https://github.com/mrbrunelli))\\n- Matthew Ailes ([@vidarc](https://github.com/vidarc))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Miles Johnson ([@milesj](https://github.com/milesj))\\n- Muhammad Redho Ayassa ([@redhoyasa](https://github.com/redhoyasa))\\n- Naseel Niyas ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Ruben Arushanyan ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Web ([@tamalweb](https://github.com/tamalweb))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@BigDataWriter](https://github.com/BigDataWriter)\\n- [@CookieJarApps](https://github.com/CookieJarApps)\\n- [@TheCatLady](https://github.com/TheCatLady)\\n- [@nick-verida](https://github.com/nick-verida)\\n- [@seyoon20087](https://github.com/seyoon20087)\\n- [@toto6038](https://github.com/toto6038)\\n- \uc774\uc815\ud658 ([@winterlood](https://github.com/winterlood))"},{"id":"/2.0.0-beta.15","metadata":{"permalink":"/changelog/2.0.0-beta.15","source":"@site/changelog/source/2.0.0-beta.15.md","title":"2.0.0-beta.15","description":"New Feature","date":"2022-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"\u4e45\u67d3 | JiuRan","alias":"1084350607","url":"https://github.com/1084350607","imageURL":"https://github.com/1084350607.png","key":"1084350607","page":null},{"name":"Abdelrahman Ahmed","alias":"abahmed","url":"https://github.com/abahmed","imageURL":"https://github.com/abahmed.png","key":"abahmed","page":null},{"name":"AJ Rice","alias":"ajrice6713","url":"https://github.com/ajrice6713","imageURL":"https://github.com/ajrice6713.png","key":"ajrice6713","page":null},{"name":"Alexandru Grigoras","alias":"alexgrigoras","url":"https://github.com/alexgrigoras","imageURL":"https://github.com/alexgrigoras.png","key":"alexgrigoras","page":null},{"name":"Filipe Guerra","alias":"alias-mac","url":"https://github.com/alias-mac","imageURL":"https://github.com/alias-mac.png","key":"alias-mac","page":null},{"name":"Amir M. Mohamadi","alias":"amir2mi","url":"https://github.com/amir2mi","imageURL":"https://github.com/amir2mi.png","key":"amir2mi","page":null},{"name":"Anthony McCaigue","alias":"antmcc49","url":"https://github.com/antmcc49","imageURL":"https://github.com/antmcc49.png","key":"antmcc49","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Brendan Nee","alias":"brendannee","url":"https://github.com/brendannee","imageURL":"https://github.com/brendannee.png","key":"brendannee","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"Davide Bianchi","alias":"davidebianchi","url":"https://github.com/davidebianchi","imageURL":"https://github.com/davidebianchi.png","key":"davidebianchi","page":null},{"name":"Edouard Bonlieu","alias":"edouardb","url":"https://github.com/edouardb","imageURL":"https://github.com/edouardb.png","key":"edouardb","page":null},{"name":"Feodor Fitsner","alias":"FeodorFitsner","url":"https://github.com/FeodorFitsner","imageURL":"https://github.com/FeodorFitsner.png","key":"FeodorFitsner","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Chen","alias":"HiChen404","url":"https://github.com/HiChen404","imageURL":"https://github.com/HiChen404.png","key":"HiChen404","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joseph","alias":"josephriosIO","url":"https://github.com/josephriosIO","imageURL":"https://github.com/josephriosIO.png","key":"josephriosIO","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},{"name":"Jake Witz","alias":"jwitz","url":"https://github.com/jwitz","imageURL":"https://github.com/jwitz.png","key":"jwitz","page":null},{"name":"Kaustubh Kulkarni","alias":"kaustubhk24","url":"https://github.com/kaustubhk24","imageURL":"https://github.com/kaustubhk24.png","key":"kaustubhk24","page":null},{"name":"kuizuo","alias":"kuizuo","url":"https://github.com/kuizuo","imageURL":"https://github.com/kuizuo.png","key":"kuizuo","page":null},{"name":"Minh Pham","alias":"lmpham1","url":"https://github.com/lmpham1","imageURL":"https://github.com/lmpham1.png","key":"lmpham1","page":null},{"name":"Lars Mikkelsen","alias":"ltm","url":"https://github.com/ltm","imageURL":"https://github.com/ltm.png","key":"ltm","page":null},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},{"name":"Sanjay Soundarajan","alias":"megasanjay","url":"https://github.com/megasanjay","imageURL":"https://github.com/megasanjay.png","key":"megasanjay","page":null},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},{"name":"\xd6mer Faruk APLAK","alias":"omeraplak","url":"https://github.com/omeraplak","imageURL":"https://github.com/omeraplak.png","key":"omeraplak","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Rishi Raj Jain","alias":"rishi-raj-jain","url":"https://github.com/rishi-raj-jain","imageURL":"https://github.com/rishi-raj-jain.png","key":"rishi-raj-jain","page":null},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},{"name":"ruanqizhen","alias":"ruanqizhen","url":"https://github.com/ruanqizhen","imageURL":"https://github.com/ruanqizhen.png","key":"ruanqizhen","page":null},{"name":"sgenoud","alias":"sgenoud","url":"https://github.com/sgenoud","imageURL":"https://github.com/sgenoud.png","key":"sgenoud","page":null},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tapan Chudasama","alias":"tapanchudasama","url":"https://github.com/tapanchudasama","imageURL":"https://github.com/tapanchudasama.png","key":"tapanchudasama","page":null},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"wood3n","alias":"wood3n","url":"https://github.com/wood3n","imageURL":"https://github.com/wood3n.png","key":"wood3n","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-01-26T20:00","authors":["1084350607","abahmed","ajrice6713","alexgrigoras","alias-mac","amir2mi","antmcc49","armano2","brendannee","cerkiewny","davidebianchi","edouardb","FeodorFitsner","gabrielcsapo","HiChen404","homotechsual","jeffreyaven","jodyheavener","johnnyreilly","josephriosIO","Josh-Cena","JoshuaKGoldberg","jwitz","kaustubhk24","kuizuo","lmpham1","ltm","mcallisto","megasanjay","MorookaKotaro","noomorph","nschonni","omeraplak","PatelN123","pranabdas","RDIL","rishi-raj-jain","roydukkey","ruanqizhen","sgenoud","shwaka","slorber","tapanchudasama","vaibhavshn","vandreleal","wood3n"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"nextItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6451](https://github.com/facebook/docusaurus/pull/6451) feat(content-docs): expose isCategoryIndex matcher to customize conventions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5782](https://github.com/facebook/docusaurus/pull/5782) feat(content-docs): displayed_sidebar front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6466](https://github.com/facebook/docusaurus/pull/6466) feat(theme-classic): add stable class for DocSidebarContainer ([@homotechsual](https://github.com/homotechsual))\\n - [#3811](https://github.com/facebook/docusaurus/pull/3811) feat(theme-classic): auto-collapse sibling categories in doc sidebar ([@josephriosIO](https://github.com/josephriosIO))\\n - [#6216](https://github.com/facebook/docusaurus/pull/6216) feat(theme-classic): usable CodeBlock outside markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6416](https://github.com/facebook/docusaurus/pull/6416) feat(content-blog): allow authors list to contain images only ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6415](https://github.com/facebook/docusaurus/pull/6415) feat(content-blog): allow disabling generating archive ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6245](https://github.com/facebook/docusaurus/pull/6245) feat(content-blog): parse date from middle of file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6371](https://github.com/facebook/docusaurus/pull/6371) feat(core, theme-classic): allow overriding htmlLang ([@noomorph](https://github.com/noomorph))\\n- `docusaurus-mdx-loader`\\n - [#6323](https://github.com/facebook/docusaurus/pull/6323) feat(mdx-loader): preserve hash in image src; support GH themed images ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6139](https://github.com/facebook/docusaurus/pull/6139) feat(theme-classic): new navbar item linking to a sidebar ([@lmpham1](https://github.com/lmpham1))\\n - [#6239](https://github.com/facebook/docusaurus/pull/6239) feat(content-docs): allow SEO metadata for category index pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-translations`\\n - [#6173](https://github.com/facebook/docusaurus/pull/6173) feat(ideal-image): allow translating status messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#6155](https://github.com/facebook/docusaurus/pull/6155) feat(ideal-image): new option disableInDev ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6169](https://github.com/facebook/docusaurus/pull/6169) feat(theme-translations): add Italian translations ([@mcallisto](https://github.com/mcallisto))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#6166](https://github.com/facebook/docusaurus/pull/6166) feat: async plugin creator functions ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6165](https://github.com/facebook/docusaurus/pull/6165) feat(core): async docusaurus.config.js creator function ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#6454](https://github.com/facebook/docusaurus/pull/6454) fix(content-blog): generate feed by reading build output ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6468](https://github.com/facebook/docusaurus/pull/6468) fix(init): cd to correct path when installing ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-mdx-loader`\\n - [#4827](https://github.com/facebook/docusaurus/pull/4827) fix: allow links to JSON in .md files to be transformed as asset links ([@antmcc49](https://github.com/antmcc49))\\n- `docusaurus-plugin-content-docs`\\n - [#6435](https://github.com/facebook/docusaurus/pull/6435) fix(content-docs): make getActivePlugin match plugin paths more exactly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6310](https://github.com/facebook/docusaurus/pull/6310) fix: highlight appropriate navItem when browsing generated category index ([@tapanchudasama](https://github.com/tapanchudasama))\\n - [#6202](https://github.com/facebook/docusaurus/pull/6202) fix(content-docs): quotify path when retrieving git history ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6424](https://github.com/facebook/docusaurus/pull/6424) fix(core): fix css url(\\"image.png\\"), use css-loader v6 with esModules: false ([@slorber](https://github.com/slorber))\\n - [#6378](https://github.com/facebook/docusaurus/pull/6378) fix(core): do not coerce webpack warning to string ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6197](https://github.com/facebook/docusaurus/pull/6197) fix(cli): quotify temp path in deploy command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6168](https://github.com/facebook/docusaurus/pull/6168) fix(core): update webpack-dev-server + fix deprecation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-utils`\\n - [#6384](https://github.com/facebook/docusaurus/pull/6384) fix(logger): properly stringify objects for logging ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6338](https://github.com/facebook/docusaurus/pull/6338) fix(core): error boundary should allow no children ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6314](https://github.com/facebook/docusaurus/pull/6314) fix(theme-classic): fix mobile version dropdown label with only one version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6288](https://github.com/facebook/docusaurus/pull/6288) fix(theme-classic): add missing role=region to SkipToContent ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n - [#6213](https://github.com/facebook/docusaurus/pull/6213) refactor(theme-classic): extract common PaginatorNavLink component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6177](https://github.com/facebook/docusaurus/pull/6177) fix(theme-classic): make React elements in pre render correctly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6300](https://github.com/facebook/docusaurus/pull/6300) refactor: move exported type definitions to declaration file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6276](https://github.com/facebook/docusaurus/pull/6276) fix(migrate): migration CLI should correctly migrate gtag options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6244](https://github.com/facebook/docusaurus/pull/6244) fix(content-blog): always convert front matter date as UTC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#6190](https://github.com/facebook/docusaurus/pull/6190) fix(utils): properly escape Windows paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`\\n - [#6469](https://github.com/facebook/docusaurus/pull/6469) fix(module-type-aliases): fix type def for translate params ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#6443](https://github.com/facebook/docusaurus/pull/6443) refactor(mdx-loader): use vfile.path to access Markdown file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6427](https://github.com/facebook/docusaurus/pull/6427) feat(theme-classic): add aria-current to sidebar category link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6391](https://github.com/facebook/docusaurus/pull/6391) refactor(theme-classic): add comments to Prism setup; minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6240](https://github.com/facebook/docusaurus/pull/6240) refactor(theme-classic): use front matter from metadata for BlogPostPage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6419](https://github.com/facebook/docusaurus/pull/6419) feat(core): warn users about hand-modifying generated files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6405](https://github.com/facebook/docusaurus/pull/6405) feat(core): check imported API name when extracting translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6291](https://github.com/facebook/docusaurus/pull/6291) feat(core): improve error message for BrowserOnly; better docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6368](https://github.com/facebook/docusaurus/pull/6368) fix(create-docusaurus): add useBaseUrl for image URLs ([@alias-mac](https://github.com/alias-mac))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#6400](https://github.com/facebook/docusaurus/pull/6400) feat(content-pages): front matter validation, include front matter in metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6339](https://github.com/facebook/docusaurus/pull/6339) feat(mdx-loader): read image dimensions when processing Markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6189](https://github.com/facebook/docusaurus/pull/6189) feat(content-blog): include front matter in loaded content metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6317](https://github.com/facebook/docusaurus/pull/6317) feat(theme-classic): autoscroll TOC with active link ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6303](https://github.com/facebook/docusaurus/pull/6303) test(utils, mdx-loader, core): improve coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#6284](https://github.com/facebook/docusaurus/pull/6284) fix(preset-classic): throw if preset finds GA options in theme config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#6186](https://github.com/facebook/docusaurus/pull/6186) refactor: print trailing new line when outputting JSON ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6296](https://github.com/facebook/docusaurus/pull/6296) docs: add advanced guides ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6459](https://github.com/facebook/docusaurus/pull/6459) docs: add replicad to showcase ([@sgenoud](https://github.com/sgenoud))\\n - [#6334](https://github.com/facebook/docusaurus/pull/6334) docs: 2021 recap blog post ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6458](https://github.com/facebook/docusaurus/pull/6458) docs: add Kuizuo\'s Personal Website to showcase ([@kuizuo](https://github.com/kuizuo))\\n - [#6431](https://github.com/facebook/docusaurus/pull/6431) docs: add Koyeb as a deployment option ([@edouardb](https://github.com/edouardb))\\n - [#6455](https://github.com/facebook/docusaurus/pull/6455) docs: add Sass Fairy to showcase ([@roydukkey](https://github.com/roydukkey))\\n - [#6453](https://github.com/facebook/docusaurus/pull/6453) docs: document embedding generated index in doc page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6450](https://github.com/facebook/docusaurus/pull/6450) docs: split sidebar documentation into sections ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6449](https://github.com/facebook/docusaurus/pull/6449) docs: multiple doc improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6448](https://github.com/facebook/docusaurus/pull/6448) fix(website): update colors correctly when palette is only customized in one color mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6385](https://github.com/facebook/docusaurus/pull/6385) chore: add height/width for front page images ([@nschonni](https://github.com/nschonni))\\n - [#6445](https://github.com/facebook/docusaurus/pull/6445) docs: update showcase data of InfraQL ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#6433](https://github.com/facebook/docusaurus/pull/6433) docs: add kube-green to showcase ([@davidebianchi](https://github.com/davidebianchi))\\n - [#6428](https://github.com/facebook/docusaurus/pull/6428) docs: elaborate on i18n tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6422](https://github.com/facebook/docusaurus/pull/6422) docs: add 404Lab wiki to showcase ([@HiChen404](https://github.com/HiChen404))\\n - [#6420](https://github.com/facebook/docusaurus/pull/6420) fix(website): restore some site CSS in light mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6410](https://github.com/facebook/docusaurus/pull/6410) docs: add SODA for SPARC to showcase ([@megasanjay](https://github.com/megasanjay))\\n - [#6417](https://github.com/facebook/docusaurus/pull/6417) docs: fix accessibility of search modal ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6406](https://github.com/facebook/docusaurus/pull/6406) docs(i18n): add docs for htmlLang config ([@noomorph](https://github.com/noomorph))\\n - [#6393](https://github.com/facebook/docusaurus/pull/6393) docs: update Algolia docs for new DocSearch infra ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6383](https://github.com/facebook/docusaurus/pull/6383) docs: elaborate on different CSS class names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6348](https://github.com/facebook/docusaurus/pull/6348) docs: add KaustubhK24\'s site to showcase ([@kaustubhk24](https://github.com/kaustubhk24))\\n - [#6333](https://github.com/facebook/docusaurus/pull/6333) feat(website): search in showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6344](https://github.com/facebook/docusaurus/pull/6344) fix(website): make ColorGenerator functional ([@shwaka](https://github.com/shwaka))\\n - [#6340](https://github.com/facebook/docusaurus/pull/6340) docs: minor fix in the sample config for ESM ([@pranabdas](https://github.com/pranabdas))\\n - [#6336](https://github.com/facebook/docusaurus/pull/6336) docs: make upgrade guide always show the latest version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6320](https://github.com/facebook/docusaurus/pull/6320) chore: upgrade rehype-katex with ESM support, update docs ([@pranabdas](https://github.com/pranabdas))\\n - [#6335](https://github.com/facebook/docusaurus/pull/6335) docs: add Pglet website to showcase ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n - [#6327](https://github.com/facebook/docusaurus/pull/6327) docs: remove typo bracket ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#6316](https://github.com/facebook/docusaurus/pull/6316) docs: add bandwidth.com to showcase ([@ajrice6713](https://github.com/ajrice6713))\\n - [#6313](https://github.com/facebook/docusaurus/pull/6313) docs: add Refine site to showcase ([@omeraplak](https://github.com/omeraplak))\\n - [#6318](https://github.com/facebook/docusaurus/pull/6318) fix(website): various anchor link fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6308](https://github.com/facebook/docusaurus/pull/6308) fix(website): wrap details in mdx-code-block ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6307](https://github.com/facebook/docusaurus/pull/6307) docs: document MD and JSX interoperability issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6299](https://github.com/facebook/docusaurus/pull/6299) docs: add icodex to showcase ([@wood3n](https://github.com/wood3n))\\n - [#6297](https://github.com/facebook/docusaurus/pull/6297) docs: mention setup in monorepo ([@PatelN123](https://github.com/PatelN123))\\n - [#6293](https://github.com/facebook/docusaurus/pull/6293) docs: remove GraphQL mesh from showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6231](https://github.com/facebook/docusaurus/pull/6231) docs: update showcase images; remove GraphQL Code Generator site ([@PatelN123](https://github.com/PatelN123))\\n - [#6285](https://github.com/facebook/docusaurus/pull/6285) refactor(website): further optimize showcase images ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6281](https://github.com/facebook/docusaurus/pull/6281) docs: Add kwatch to showcase ([@abahmed](https://github.com/abahmed))\\n - [#6280](https://github.com/facebook/docusaurus/pull/6280) docs: elaborate on doc versioning ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6043](https://github.com/facebook/docusaurus/pull/6043) fix(website): resize showcase images, tighten CI check ([@armano2](https://github.com/armano2))\\n - [#6274](https://github.com/facebook/docusaurus/pull/6274) docs: add dyte docs to showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6278](https://github.com/facebook/docusaurus/pull/6278) docs: add Khyron Realm to showcase ([@alexgrigoras](https://github.com/alexgrigoras))\\n - [#6271](https://github.com/facebook/docusaurus/pull/6271) docs: add FlatifyCSS to showcase ([@amir2mi](https://github.com/amir2mi))\\n - [#6275](https://github.com/facebook/docusaurus/pull/6275) fix(website): fix config-tabs breaking after translation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6269](https://github.com/facebook/docusaurus/pull/6269) docs: add Ionic to showcase ([@ltm](https://github.com/ltm))\\n - [#6272](https://github.com/facebook/docusaurus/pull/6272) docs: make tsconfig work OOTB in typescript guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6265](https://github.com/facebook/docusaurus/pull/6265) docs: add Eric JiuRan\'s blog to showcase ([@1084350607](https://github.com/1084350607))\\n - [#6242](https://github.com/facebook/docusaurus/pull/6242) docs(showcase): update oxidizer website url ([@vandreleal](https://github.com/vandreleal))\\n - [#6226](https://github.com/facebook/docusaurus/pull/6226) docs: update showcase data for digital support notes ([@PatelN123](https://github.com/PatelN123))\\n - [#6224](https://github.com/facebook/docusaurus/pull/6224) docs: add TalentBrick to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6223](https://github.com/facebook/docusaurus/pull/6223) docs: normalize CodeBlock highlighting ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6214](https://github.com/facebook/docusaurus/pull/6214) feat(website): improve prism themes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6215](https://github.com/facebook/docusaurus/pull/6215) docs: use BrowserWindow for Markdown demos ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6193](https://github.com/facebook/docusaurus/pull/6193) docs: normalize plugin API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6209](https://github.com/facebook/docusaurus/pull/6209) docs: elaborate on static asset resolution ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6207](https://github.com/facebook/docusaurus/pull/6207) docs: add default value for BrowserWindow URL field ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6206](https://github.com/facebook/docusaurus/pull/6206) docs: fix highlighting of YAML front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6191](https://github.com/facebook/docusaurus/pull/6191) docs: fix react live scope button color in dark mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6188](https://github.com/facebook/docusaurus/pull/6188) docs: add Layer0 to deployment guide ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n - [#6184](https://github.com/facebook/docusaurus/pull/6184) docs: remove mention of \'UA-\' in gtag ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#6181](https://github.com/facebook/docusaurus/pull/6181) docs: add GTFS-to-HTML to showcase ([@brendannee](https://github.com/brendannee))\\n - [#6178](https://github.com/facebook/docusaurus/pull/6178) docs: add Digital Support Notes to showcase ([@PatelN123](https://github.com/PatelN123))\\n - [#6170](https://github.com/facebook/docusaurus/pull/6170) docs: add LabVIEW coding experience to showcase ([@ruanqizhen](https://github.com/ruanqizhen))\\n - [#6164](https://github.com/facebook/docusaurus/pull/6164) docs: fix import module name of theme/Admonition ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6158](https://github.com/facebook/docusaurus/pull/6158) docs: add Astronomer to showcase ([@jwitz](https://github.com/jwitz))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6187](https://github.com/facebook/docusaurus/pull/6187) docs: make installation guide more beginner-friendly ([@PatelN123](https://github.com/PatelN123))\\n- `docusaurus-utils`\\n - [#6204](https://github.com/facebook/docusaurus/pull/6204) docs: recommend highlighting with comments than number range ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6203](https://github.com/facebook/docusaurus/pull/6203) docs: audit grammar issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :house: Internal\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6456](https://github.com/facebook/docusaurus/pull/6456) chore: add cSpell for spell checking ([@nschonni](https://github.com/nschonni))\\n- Other\\n - [#6444](https://github.com/facebook/docusaurus/pull/6444) misc: update nvmrc to 14.17.0 to meet dependency requirements ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6441](https://github.com/facebook/docusaurus/pull/6441) misc: fix stylelint erroring when lint-staged passed ignored file ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6421](https://github.com/facebook/docusaurus/pull/6421) chore: fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6381](https://github.com/facebook/docusaurus/pull/6381) chore(website): set cache-control for static assets ([@nschonni](https://github.com/nschonni))\\n - [#6364](https://github.com/facebook/docusaurus/pull/6364) chore: remove Intl polyfills for Jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6325](https://github.com/facebook/docusaurus/pull/6325) chore: add Dependabot for dependency updates ([@nschonni](https://github.com/nschonni))\\n - [#6328](https://github.com/facebook/docusaurus/pull/6328) chore(ci): upgrade actions/github-script to v5 ([@nschonni](https://github.com/nschonni))\\n - [#6332](https://github.com/facebook/docusaurus/pull/6332) chore(deps): bump follow-redirects from 1.14.5 to 1.14.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#6326](https://github.com/facebook/docusaurus/pull/6326) misc(ci): remove redundant \\"CI: true\\" env ([@nschonni](https://github.com/nschonni))\\n - [#6304](https://github.com/facebook/docusaurus/pull/6304) chore: upgrade to Husky 7 ([@nschonni](https://github.com/nschonni))\\n - [#6222](https://github.com/facebook/docusaurus/pull/6222) test: ensure consistent CSS ordering ([@slorber](https://github.com/slorber))\\n - [#6159](https://github.com/facebook/docusaurus/pull/6159) docs: remove useless comment ([@slorber](https://github.com/slorber))\\n - [#6148](https://github.com/facebook/docusaurus/pull/6148) chore(examples): update examples to 2.0.0-beta.14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6442](https://github.com/facebook/docusaurus/pull/6442) chore: enable stylelint standard config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#6440](https://github.com/facebook/docusaurus/pull/6440) chore: remove some unused dependencies from package.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6436](https://github.com/facebook/docusaurus/pull/6436) refactor(theme-classic): render BlogPostItem as one JSX element ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#6413](https://github.com/facebook/docusaurus/pull/6413) fix(content-pages): declare hide_table_of_contents as boolean ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6399](https://github.com/facebook/docusaurus/pull/6399) refactor: clean up TODO comments ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus`\\n - [#6387](https://github.com/facebook/docusaurus/pull/6387) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6380](https://github.com/facebook/docusaurus/pull/6380) chore: enable a few fixable ESLint rules ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#6377](https://github.com/facebook/docusaurus/pull/6377) refactor: use findAsyncSequential in a few places ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6375](https://github.com/facebook/docusaurus/pull/6375) chore: enable eslint-plugin-jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6373](https://github.com/facebook/docusaurus/pull/6373) chore: enable react/jsx-closing-bracket-location ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-classic`, `stylelint-copyright`\\n - [#6374](https://github.com/facebook/docusaurus/pull/6374) feat(stylelint-copyright): autofix, stricter config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`\\n - [#6372](https://github.com/facebook/docusaurus/pull/6372) chore: add baseline stylelint rules ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#6369](https://github.com/facebook/docusaurus/pull/6369) chore: upgrade lint-staged and globs ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6341](https://github.com/facebook/docusaurus/pull/6341) chore: regenerate yarn.lock ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#6324](https://github.com/facebook/docusaurus/pull/6324) chore: minor typo cleanup ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6286](https://github.com/facebook/docusaurus/pull/6286) misc: convert all internal scripts to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#6287](https://github.com/facebook/docusaurus/pull/6287) refactor: new @docusaurus/plugin-content-docs/client interface ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6279](https://github.com/facebook/docusaurus/pull/6279) refactor(core): use native types from webpack-dev-server ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-content-docs`\\n - [#6277](https://github.com/facebook/docusaurus/pull/6277) refactor(content-docs): make readVersionsMetadata async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6237](https://github.com/facebook/docusaurus/pull/6237) refactor(core): convert serverEntry.js to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6230](https://github.com/facebook/docusaurus/pull/6230) refactor: enforce type import specifiers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-utils`, `docusaurus`\\n - [#6229](https://github.com/facebook/docusaurus/pull/6229) refactor(utils): reorganize functions; move authors file resolution to utils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6225](https://github.com/facebook/docusaurus/pull/6225) refactor(theme-translations): improve typing for update script ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6174](https://github.com/facebook/docusaurus/pull/6174) misc(theme-translations): multiple improvements to the update CLI ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 46\\n\\n- AJ Rice ([@ajrice6713](https://github.com/ajrice6713))\\n- Abdelrahman Ahmed ([@abahmed](https://github.com/abahmed))\\n- Alexandru Grigoras ([@alexgrigoras](https://github.com/alexgrigoras))\\n- Amir M. Mohamadi ([@amir2mi](https://github.com/amir2mi))\\n- Anthony McCaigue ([@antmcc49](https://github.com/antmcc49))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brendan Nee ([@brendannee](https://github.com/brendannee))\\n- Chen ([@HiChen404](https://github.com/HiChen404))\\n- Davide Bianchi ([@davidebianchi](https://github.com/davidebianchi))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Edouard Bonlieu ([@edouardb](https://github.com/edouardb))\\n- Feodor Fitsner ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n- Filipe Guerra ([@alias-mac](https://github.com/alias-mac))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Jake Witz ([@jwitz](https://github.com/jwitz))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joseph ([@josephriosIO](https://github.com/josephriosIO))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kaustubh Kulkarni ([@kaustubhk24](https://github.com/kaustubhk24))\\n- Lars Mikkelsen ([@ltm](https://github.com/ltm))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Minh Pham ([@lmpham1](https://github.com/lmpham1))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Rishi Raj Jain ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n- Sanjay Soundarajan ([@megasanjay](https://github.com/megasanjay))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tapan Chudasama ([@tapanchudasama](https://github.com/tapanchudasama))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@ruanqizhen](https://github.com/ruanqizhen)\\n- [@wood3n](https://github.com/wood3n)\\n- kuizuo ([@kuizuo](https://github.com/kuizuo))\\n- sgenoud ([@sgenoud](https://github.com/sgenoud))\\n- trent ([@roydukkey](https://github.com/roydukkey))\\n- \xd6mer Faruk APLAK ([@omeraplak](https://github.com/omeraplak))\\n- \u4e45\u67d3 | JiuRan ([@1084350607](https://github.com/1084350607))"},{"id":"/2.0.0-beta.14","metadata":{"permalink":"/changelog/2.0.0-beta.14","source":"@site/changelog/source/2.0.0-beta.14.md","title":"2.0.0-beta.14","description":"New Feature","date":"2021-12-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"6543","alias":"6543","url":"https://github.com/6543","imageURL":"https://github.com/6543.png","key":"6543","page":null},{"name":"Christopher Klint","alias":"christopherklint97","url":"https://github.com/christopherklint97","imageURL":"https://github.com/christopherklint97.png","key":"christopherklint97","page":null},{"name":"colton","alias":"cmpadden","url":"https://github.com/cmpadden","imageURL":"https://github.com/cmpadden.png","key":"cmpadden","page":null},{"name":"Drylozu","alias":"Drylozu","url":"https://github.com/Drylozu","imageURL":"https://github.com/Drylozu.png","key":"Drylozu","page":null},{"name":"Jeroen Claassens","alias":"favna","url":"https://github.com/favna","imageURL":"https://github.com/favna.png","key":"favna","page":null},{"name":"Harsh Mishra","alias":"HarshCasper","url":"https://github.com/HarshCasper","imageURL":"https://github.com/HarshCasper.png","key":"HarshCasper","page":null},{"name":"Himanshu","alias":"himanshu007-creator","url":"https://github.com/himanshu007-creator","imageURL":"https://github.com/himanshu007-creator.png","key":"himanshu007-creator","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Kristoffer K.","alias":"merceyz","url":"https://github.com/merceyz","imageURL":"https://github.com/merceyz.png","key":"merceyz","page":null},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},{"name":"\u4e0d\u90d1","alias":"notzheng","url":"https://github.com/notzheng","imageURL":"https://github.com/notzheng.png","key":"notzheng","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ziv","alias":"wewoor","url":"https://github.com/wewoor","imageURL":"https://github.com/wewoor.png","key":"wewoor","page":null},{"name":"Shubhendra Singh Chauhan","alias":"withshubh","url":"https://github.com/withshubh","imageURL":"https://github.com/withshubh.png","key":"withshubh","page":null},{"name":"Wout Vandesompele","alias":"wowtvds","url":"https://github.com/wowtvds","imageURL":"https://github.com/wowtvds.png","key":"wowtvds","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-21T20:00","authors":["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"nextItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6132](https://github.com/facebook/docusaurus/pull/6132) feat(theme-classic): new configuration syntax for a simple footer ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6125](https://github.com/facebook/docusaurus/pull/6125) feat(theme-common): stable classname for code blocks ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5848](https://github.com/facebook/docusaurus/pull/5848) feat(theme-classic): standalone Admonition component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6082](https://github.com/facebook/docusaurus/pull/6082) feat(theme-classic): allow passing additional attributes to tab headings ([@Drylozu](https://github.com/Drylozu))\\n- `docusaurus-plugin-content-blog`\\n - [#6126](https://github.com/facebook/docusaurus/pull/6126) feat(content-blog): support json feed ([@notzheng](https://github.com/notzheng))\\n- `docusaurus`\\n - [#6107](https://github.com/facebook/docusaurus/pull/6107) feat(core): allow plugins to customize/override Webpack devServer config ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#6146](https://github.com/facebook/docusaurus/pull/6146) fix(migrate): do not modify non-MD files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6128](https://github.com/facebook/docusaurus/pull/6128) fix: do not use aria-hidden in heading anchor links ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6124](https://github.com/facebook/docusaurus/pull/6124) fix(content-docs): restore behavior when pagination front matter is null ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6085](https://github.com/facebook/docusaurus/pull/6085) fix(content-docs): getMainDocId should return doc with both versioned or unversioned id ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#6097](https://github.com/facebook/docusaurus/pull/6097) fix: declare missing dependencies ([@merceyz](https://github.com/merceyz))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `lqip-loader`\\n - [#6094](https://github.com/facebook/docusaurus/pull/6094) fix: add missing dependencies on tslib ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6088](https://github.com/facebook/docusaurus/pull/6088) fix(theme-translations): publish theme-translation lib, including typedef ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6053](https://github.com/facebook/docusaurus/pull/6053) feat(theme-classic): allow stylizing doc paginator arrows ([@noomorph](https://github.com/noomorph))\\n - [#6121](https://github.com/facebook/docusaurus/pull/6121) fix(theme-classic): add outline to focused code blocks ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6118](https://github.com/facebook/docusaurus/pull/6118) refactor: remove some useless code ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#5994](https://github.com/facebook/docusaurus/pull/5994) refactor: unify log format with new logger utility ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6119](https://github.com/facebook/docusaurus/pull/6119) fix(create-docusaurus): make initial editUrl functional ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6095](https://github.com/facebook/docusaurus/pull/6095) fix(create-docusaurus): give a clearer message when installation failed ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#6142](https://github.com/facebook/docusaurus/pull/6142) docs: normalize usage of placeholders ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5918](https://github.com/facebook/docusaurus/pull/5918) docs: refactor & refine lifecycle API docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6138](https://github.com/facebook/docusaurus/pull/6138) docs: add Smart Docs to showcase ([@wowtvds](https://github.com/wowtvds))\\n- [#6137](https://github.com/facebook/docusaurus/pull/6137) docs: add ToolJet to showcase ([@withshubh](https://github.com/withshubh))\\n- [#6141](https://github.com/facebook/docusaurus/pull/6141) docs: add WoodpeckerCI to showcase ([@6543](https://github.com/6543))\\n- [#6135](https://github.com/facebook/docusaurus/pull/6135) docs: mention admonition quirks with Prettier ([@yangshun](https://github.com/yangshun))\\n- [#6131](https://github.com/facebook/docusaurus/pull/6131) docs: elaborate on \\"docs-only\\" and \\"blog-only\\" ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- [#6134](https://github.com/facebook/docusaurus/pull/6134) docs: update link to init template README.md ([@cmpadden](https://github.com/cmpadden))\\n- [#6130](https://github.com/facebook/docusaurus/pull/6130) docs: refactor docs sidebar doc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6129](https://github.com/facebook/docusaurus/pull/6129) docs: refactor styling/theming docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6112](https://github.com/facebook/docusaurus/pull/6112) docs: mention that SEO through front matter is better than head tag ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6120](https://github.com/facebook/docusaurus/pull/6120) refactor(website): make deploy preview open next version docs by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6111](https://github.com/facebook/docusaurus/pull/6111) docs: add Molecule website to showcase ([@wewoor](https://github.com/wewoor))\\n- [#6089](https://github.com/facebook/docusaurus/pull/6089) docs: add Enarx website to showcase ([@HarshCasper](https://github.com/HarshCasper))\\n- [#6090](https://github.com/facebook/docusaurus/pull/6090) docs: add sapphire to showcase ([@favna](https://github.com/favna))\\n- [#6091](https://github.com/facebook/docusaurus/pull/6091) docs(showcase): \\"much more pages\\" => \\"many more pages\\" ([@favna](https://github.com/favna))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6144](https://github.com/facebook/docusaurus/pull/6144) fix(theme-classic): fix translation when footer has no links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6143](https://github.com/facebook/docusaurus/pull/6143) test: fix async tests resolved in random order ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6123](https://github.com/facebook/docusaurus/pull/6123) test: use snapshots for sidebar tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6122](https://github.com/facebook/docusaurus/pull/6122) fix(website): fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6080](https://github.com/facebook/docusaurus/pull/6080) chore: add npm and pnpm to E2E tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6092](https://github.com/facebook/docusaurus/pull/6092) misc: ignore some files during npm publish ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 17\\n\\n- 6543 ([@6543](https://github.com/6543))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Christopher Klint ([@christopherklint97](https://github.com/christopherklint97))\\n- Harsh Mishra ([@HarshCasper](https://github.com/HarshCasper))\\n- Himanshu ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- Jeroen Claassens ([@favna](https://github.com/favna))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kristoffer K. ([@merceyz](https://github.com/merceyz))\\n- Shubhendra Singh Chauhan ([@withshubh](https://github.com/withshubh))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Wout Vandesompele ([@wowtvds](https://github.com/wowtvds))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- Ziv ([@wewoor](https://github.com/wewoor))\\n- [@Drylozu](https://github.com/Drylozu)\\n- colton ([@cmpadden](https://github.com/cmpadden))\\n- \u4e0d\u90d1 ([@notzheng](https://github.com/notzheng))"},{"id":"/2.0.0-beta.13","metadata":{"permalink":"/changelog/2.0.0-beta.13","source":"@site/changelog/source/2.0.0-beta.13.md","title":"2.0.0-beta.13","description":"Good npm publish, same code as beta.11","date":"2021-12-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"nextItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nGood npm publish, same code as beta.11"},{"id":"/2.0.0-beta.12","metadata":{"permalink":"/changelog/2.0.0-beta.12","source":"@site/changelog/source/2.0.0-beta.12.md","title":"2.0.0-beta.12","description":"Bad npm publish, use beta.13 instead","date":"2021-12-10T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"nextItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, use beta.13 instead"},{"id":"/2.0.0-beta.11","metadata":{"permalink":"/changelog/2.0.0-beta.11","source":"@site/changelog/source/2.0.0-beta.11.md","title":"2.0.0-beta.11","description":"Bug Fix","date":"2021-12-10T18:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T18:00","authors":["pranabdas","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"nextItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6078](https://github.com/facebook/docusaurus/pull/6078) fix: move docusaurus core back to hard dependencies ([@pranabdas](https://github.com/pranabdas))\\n\\n## Committers: 2\\n\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.10","metadata":{"permalink":"/changelog/2.0.0-beta.10","source":"@site/changelog/source/2.0.0-beta.10.md","title":"2.0.0-beta.10","description":"New Feature","date":"2021-12-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afshin Mehrabani","alias":"afshinm","url":"https://github.com/afshinm","imageURL":"https://github.com/afshinm.png","key":"afshinm","page":null},{"name":"Rohit Agrawal","alias":"agrawal-rohit","url":"https://github.com/agrawal-rohit","imageURL":"https://github.com/agrawal-rohit.png","key":"agrawal-rohit","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Christophe Chaudier","alias":"cchaudier","url":"https://github.com/cchaudier","imageURL":"https://github.com/cchaudier.png","key":"cchaudier","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"chima ilo","alias":"chimailo","url":"https://github.com/chimailo","imageURL":"https://github.com/chimailo.png","key":"chimailo","page":null},{"name":"Shoaib Sajid","alias":"dexbiobot","url":"https://github.com/dexbiobot","imageURL":"https://github.com/dexbiobot.png","key":"dexbiobot","page":null},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},{"name":"Fernando Maia","alias":"fsmaia","url":"https://github.com/fsmaia","imageURL":"https://github.com/fsmaia.png","key":"fsmaia","page":null},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},{"name":"Hemant Sachdeva","alias":"HemantSachdeva","url":"https://github.com/HemantSachdeva","imageURL":"https://github.com/HemantSachdeva.png","key":"HemantSachdeva","page":null},{"name":"Jarar","alias":"JararvisQ","url":"https://github.com/JararvisQ","imageURL":"https://github.com/JararvisQ.png","key":"JararvisQ","page":null},{"name":"Jeff Shillitto","alias":"jeffski","url":"https://github.com/jeffski","imageURL":"https://github.com/jeffski.png","key":"jeffski","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Matej Jellus","alias":"juffalow","url":"https://github.com/juffalow","imageURL":"https://github.com/juffalow.png","key":"juffalow","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Konstantin Popov","alias":"KonstHardy","url":"https://github.com/KonstHardy","imageURL":"https://github.com/KonstHardy.png","key":"KonstHardy","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Ludovico Fischer","alias":"ludofischer","url":"https://github.com/ludofischer","imageURL":"https://github.com/ludofischer.png","key":"ludofischer","page":null},{"name":"Martin \u0160o\u0161i\u0107","alias":"Martinsos","url":"https://github.com/Martinsos","imageURL":"https://github.com/Martinsos.png","key":"Martinsos","page":null},{"name":"Matthijs Groen","alias":"matthijsgroen","url":"https://github.com/matthijsgroen","imageURL":"https://github.com/matthijsgroen.png","key":"matthijsgroen","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"Molly White","alias":"molly","url":"https://github.com/molly","imageURL":"https://github.com/molly.png","key":"molly","page":null},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},{"name":"pal-sig","alias":"pal-sig","url":"https://github.com/pal-sig","imageURL":"https://github.com/pal-sig.png","key":"pal-sig","page":null},{"name":"Patitotective","alias":"Patitotective","url":"https://github.com/Patitotective","imageURL":"https://github.com/Patitotective.png","key":"Patitotective","page":null},{"name":"Patrik M\xe4siar","alias":"patrikmasiar","url":"https://github.com/patrikmasiar","imageURL":"https://github.com/patrikmasiar.png","key":"patrikmasiar","page":null},{"name":"Paul Biggar","alias":"pbiggar","url":"https://github.com/pbiggar","imageURL":"https://github.com/pbiggar.png","key":"pbiggar","page":null},{"name":"Brennan Kinney","alias":"polarathene","url":"https://github.com/polarathene","imageURL":"https://github.com/polarathene.png","key":"polarathene","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"Robin M\xe9tral","alias":"robinmetral","url":"https://github.com/robinmetral","imageURL":"https://github.com/robinmetral.png","key":"robinmetral","page":null},{"name":"Ronny Roeller","alias":"ronnyroeller","url":"https://github.com/ronnyroeller","imageURL":"https://github.com/ronnyroeller.png","key":"ronnyroeller","page":null},{"name":"Ivan Boothe","alias":"rootwork","url":"https://github.com/rootwork","imageURL":"https://github.com/rootwork.png","key":"rootwork","page":null},{"name":"Rey","alias":"rsapkf","url":"https://github.com/rsapkf","imageURL":"https://github.com/rsapkf.png","key":"rsapkf","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Can Olcer","alias":"shafy","url":"https://github.com/shafy","imageURL":"https://github.com/shafy.png","key":"shafy","page":null},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},{"name":"Sharon Koech","alias":"skoech","url":"https://github.com/skoech","imageURL":"https://github.com/skoech.png","key":"skoech","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Soham Shah","alias":"sohamsshah","url":"https://github.com/sohamsshah","imageURL":"https://github.com/sohamsshah.png","key":"sohamsshah","page":null},{"name":"Paden Clayton","alias":"spyke01","url":"https://github.com/spyke01","imageURL":"https://github.com/spyke01.png","key":"spyke01","page":null},{"name":"Stan Kocken","alias":"StanKocken","url":"https://github.com/StanKocken","imageURL":"https://github.com/StanKocken.png","key":"StanKocken","page":null},{"name":"Swalah Amani","alias":"swalahamani","url":"https://github.com/swalahamani","imageURL":"https://github.com/swalahamani.png","key":"swalahamani","page":null},{"name":"Swapnil M Mane","alias":"swapnilmmane","url":"https://github.com/swapnilmmane","imageURL":"https://github.com/swapnilmmane.png","key":"swapnilmmane","page":null},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-09T20:00","authors":["afshinm","agrawal-rohit","armano2","cchaudier","cerkiewny","chimailo","dexbiobot","dsmmcken","duanwilliam","fishmandev","fsmaia","hbulens","HemantSachdeva","JararvisQ","jeffski","Josh-Cena","juffalow","juzhiyuan","KonstHardy","lex111","ludofischer","Martinsos","matthijsgroen","MisterFISHUP","molly","MorookaKotaro","oriooctopus","pal-sig","Patitotective","patrikmasiar","pbiggar","polarathene","revi","robinmetral","ronnyroeller","rootwork","rsapkf","semoal","shafy","sivapalan","skoech","slorber","sohamsshah","spyke01","StanKocken","swalahamani","swapnilmmane","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"nextItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-types`, `docusaurus`\\n - [#5930](https://github.com/facebook/docusaurus/pull/5930) feat: shorthands for themes/plugins/presets configuration ([@fsmaia](https://github.com/fsmaia))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-types`, `docusaurus`\\n - [#4095](https://github.com/facebook/docusaurus/pull/4095) feat(core): allow sourcing from multiple static directories ([@oriooctopus](https://github.com/oriooctopus))\\n- `create-docusaurus`\\n - [#3458](https://github.com/facebook/docusaurus/pull/3458) feat(create-docusaurus): allow using local folder as template ([@afshinm](https://github.com/afshinm))\\n- `docusaurus-plugin-content-blog`\\n - [#5787](https://github.com/facebook/docusaurus/pull/5787) feat(content-blog): allow sorting posts in ascending order ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3104](https://github.com/facebook/docusaurus/pull/3104) feat(core): Add React ErrorBoundary component + theme default boundaries ([@spyke01](https://github.com/spyke01))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6070](https://github.com/facebook/docusaurus/pull/6070) fix(theme-common): useLocationChange fire un-necessarily twice ([@slorber](https://github.com/slorber))\\n - [#6040](https://github.com/facebook/docusaurus/pull/6040) fix: browser storage (localStorage) is unreliable: api should fail-safe ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6047](https://github.com/facebook/docusaurus/pull/6047) fix: make Docusaurus PnP strict mode compatible ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6052](https://github.com/facebook/docusaurus/pull/6052) fix(core): fix error boundary import disrupting CSS order ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5983](https://github.com/facebook/docusaurus/pull/5983) fix(core): do not apply theme-init alias to user component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5798](https://github.com/facebook/docusaurus/pull/5798) fix(cli): update notifier should be shown if current is less than latest ([@semoal](https://github.com/semoal))\\n - [#5864](https://github.com/facebook/docusaurus/pull/5864) fix: respect base URL when serving content by webpack dev server ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#5945](https://github.com/facebook/docusaurus/pull/5945) fix(module-type-aliases): add svg declaration ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus-theme-classic`\\n - [#5873](https://github.com/facebook/docusaurus/pull/5873) fix(theme-classic): fix announcementBar css ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6003](https://github.com/facebook/docusaurus/pull/6003) fix(theme-classic): make nav dropdowns focusable ([@robinmetral](https://github.com/robinmetral))\\n - [#6000](https://github.com/facebook/docusaurus/pull/6000) fix(theme-classic): make hash link in heading not selectable ([@JararvisQ](https://github.com/JararvisQ))\\n - [#5944](https://github.com/facebook/docusaurus/pull/5944) fix: translate all remaining english sentence in French ([@StanKocken](https://github.com/StanKocken))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6048](https://github.com/facebook/docusaurus/pull/6048) refactor: capitalize locales when creating i18n config ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-translations`\\n - [#5976](https://github.com/facebook/docusaurus/pull/5976) feat(theme-translations): add extra Korean translation, fix typo ([@revi](https://github.com/revi))\\n - [#6060](https://github.com/facebook/docusaurus/pull/6060) chore(theme-translations): complete Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6049](https://github.com/facebook/docusaurus/pull/6049) refactor: simplify Toggle component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`\\n - [#5981](https://github.com/facebook/docusaurus/pull/5981) refactor: minor ESLint improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#5995](https://github.com/facebook/docusaurus/pull/5995) chore(plugin-pwa): change core-js version in package.json to v3 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`\\n - [#5849](https://github.com/facebook/docusaurus/pull/5849) refactor: define own translations in other themes ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-types`\\n - [#5959](https://github.com/facebook/docusaurus/pull/5959) refactor(types): correct HtmlTags types ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#5829](https://github.com/facebook/docusaurus/pull/5829) refactor: optimize clone and checkout in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5899](https://github.com/facebook/docusaurus/pull/5899) feat(core): give more hints when plugins have duplicate IDs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5840](https://github.com/facebook/docusaurus/pull/5840) feat: allow GIT_USER env var to be unset if SSH is used ([@wpyoga](https://github.com/wpyoga))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6063](https://github.com/facebook/docusaurus/pull/6063) docs: add moja global to showcase ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6069](https://github.com/facebook/docusaurus/pull/6069) docs: update CONTRIBUTING for website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6062](https://github.com/facebook/docusaurus/pull/6062) refactor(website): improve wording in comments of showcase data ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6045](https://github.com/facebook/docusaurus/pull/6045) docs: add \\"discord resources\\" to showcase ([@dexbiobot](https://github.com/dexbiobot))\\n - [#6026](https://github.com/facebook/docusaurus/pull/6026) docs(deployment): add cost-benefit analysis with different options ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5955](https://github.com/facebook/docusaurus/pull/5955) docs: add Pearl UI website to showcase ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n - [#5989](https://github.com/facebook/docusaurus/pull/5989) misc: update CONTRIBUTING to reflect status quo ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5845](https://github.com/facebook/docusaurus/pull/5845) docs(admin): update repo testing instructions to reflect v2 ([@wpyoga](https://github.com/wpyoga))\\n - [#6019](https://github.com/facebook/docusaurus/pull/6019) docs: update Netlify url config option in deployment instructions ([@rsapkf](https://github.com/rsapkf))\\n - [#6015](https://github.com/facebook/docusaurus/pull/6015) docs: add Tremor website to showcase page ([@skoech](https://github.com/skoech))\\n - [#5997](https://github.com/facebook/docusaurus/pull/5997) refactor(website): various fixes and improvements on Showcase page ([@lex111](https://github.com/lex111))\\n - [#6008](https://github.com/facebook/docusaurus/pull/6008) docs: improve algolia integration instructions ([@shafy](https://github.com/shafy))\\n - [#6006](https://github.com/facebook/docusaurus/pull/6006) docs: improve explanation for url config in GH Pages ([@Martinsos](https://github.com/Martinsos))\\n - [#6001](https://github.com/facebook/docusaurus/pull/6001) docs: add Dime.Scheduler SDK to showcase ([@hbulens](https://github.com/hbulens))\\n - [#5984](https://github.com/facebook/docusaurus/pull/5984) docs: add PREFS website to showcase ([@Patitotective](https://github.com/Patitotective))\\n - [#5967](https://github.com/facebook/docusaurus/pull/5967) docs(website): Add docsearch migration blog post ([@slorber](https://github.com/slorber))\\n - [#5968](https://github.com/facebook/docusaurus/pull/5968) refactor(website): shadow on showcase toggle ([@dsmmcken](https://github.com/dsmmcken))\\n - [#5979](https://github.com/facebook/docusaurus/pull/5979) docs: update links to default translations dir ([@lex111](https://github.com/lex111))\\n - [#5969](https://github.com/facebook/docusaurus/pull/5969) refactor(website): polish on Showcase page ([@slorber](https://github.com/slorber))\\n - [#5966](https://github.com/facebook/docusaurus/pull/5966) docs: add Darklang to showcase ([@pbiggar](https://github.com/pbiggar))\\n - [#5970](https://github.com/facebook/docusaurus/pull/5970) docs: add Remirror to showcase ([@ronnyroeller](https://github.com/ronnyroeller))\\n - [#5971](https://github.com/facebook/docusaurus/pull/5971) docs: add Webiny docs to showcase page ([@swapnilmmane](https://github.com/swapnilmmane))\\n - [#5953](https://github.com/facebook/docusaurus/pull/5953) docs: fix BrowserOnly return statement ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#5949](https://github.com/facebook/docusaurus/pull/5949) docs: update Signoz showcase details ([@pal-sig](https://github.com/pal-sig))\\n - [#5948](https://github.com/facebook/docusaurus/pull/5948) fix(website): fix APITable anchor ID having extra hash ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5947](https://github.com/facebook/docusaurus/pull/5947) fix(website): fix APITable anchor link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5925](https://github.com/facebook/docusaurus/pull/5925) docs: add Froggit site to showcase page ([@cchaudier](https://github.com/cchaudier))\\n - [#5928](https://github.com/facebook/docusaurus/pull/5928) docs: Add Shotstack showcase user ([@jeffski](https://github.com/jeffski))\\n - [#5934](https://github.com/facebook/docusaurus/pull/5934) docs: fix a typo in CHANGELOG ([@KonstHardy](https://github.com/KonstHardy))\\n - [#5921](https://github.com/facebook/docusaurus/pull/5921) docs: add Signoz site to showcase site ([@pal-sig](https://github.com/pal-sig))\\n - [#5891](https://github.com/facebook/docusaurus/pull/5891) docs: new APITable comp to render large tables ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5917](https://github.com/facebook/docusaurus/pull/5917) docs: make API sidebar partially autogenerated ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5903](https://github.com/facebook/docusaurus/pull/5903) docs: refer to deployed branch as deployment rather than target ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5902](https://github.com/facebook/docusaurus/pull/5902) fix(website): fix i18n routes for Canny board ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5900](https://github.com/facebook/docusaurus/pull/5900) docs: document global variables in MDX scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4409](https://github.com/facebook/docusaurus/pull/4409) docs: add example for GitHub Pages deployment; rewrite deployment section ([@polarathene](https://github.com/polarathene))\\n - [#5888](https://github.com/facebook/docusaurus/pull/5888) docs: update GitHub deployment instructions ([@rootwork](https://github.com/rootwork))\\n - [#5895](https://github.com/facebook/docusaurus/pull/5895) docs: Add juffalow.com to Docusaurus showcase ([@juffalow](https://github.com/juffalow))\\n - [#5881](https://github.com/facebook/docusaurus/pull/5881) docs: fix wrong code sample in docusaurus-core ([@matthijsgroen](https://github.com/matthijsgroen))\\n - [#5875](https://github.com/facebook/docusaurus/pull/5875) docs: add patrikmasiar website showcase ([@patrikmasiar](https://github.com/patrikmasiar))\\n - [#5876](https://github.com/facebook/docusaurus/pull/5876) docs: \'5 minutes tutorial\' -> \'5-minute tutorial\' ([@molly](https://github.com/molly))\\n - [#5759](https://github.com/facebook/docusaurus/pull/5759) docs: create SEO documentation page ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5869](https://github.com/facebook/docusaurus/pull/5869) docs: remove duplicated appId property ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5868](https://github.com/facebook/docusaurus/pull/5868) docs: fix a typo in using-themes.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5862](https://github.com/facebook/docusaurus/pull/5862) misc: show only latest archive alpha/beta versions dropdown ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5742](https://github.com/facebook/docusaurus/pull/5742) feat(website): redesign of showcase page ([@chimailo](https://github.com/chimailo))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6071](https://github.com/facebook/docusaurus/pull/6071) refactor: add blank lines below all copyright headers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6068](https://github.com/facebook/docusaurus/pull/6068) chore: add prefix to needs triage label; separate Windows test workflow ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6031](https://github.com/facebook/docusaurus/pull/6031) chore: upgrade netlify-cli ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6012](https://github.com/facebook/docusaurus/pull/6012) chore(website): enable strict compiler option ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6002](https://github.com/facebook/docusaurus/pull/6002) chore(ci): add GitHub action for showcase testing ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5977](https://github.com/facebook/docusaurus/pull/5977) chore: generate dogfooding test for long pathname during CI ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5950](https://github.com/facebook/docusaurus/pull/5950) misc(codeowners): add @Josh-Cena to CODEOWNERS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5919](https://github.com/facebook/docusaurus/pull/5919) misc(workflow): E2E tests should not be run with website changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5907](https://github.com/facebook/docusaurus/pull/5907) chore(workflow): merge jobs into one workflow & give each job a name ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5889](https://github.com/facebook/docusaurus/pull/5889) chore(website): enable eslint in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5870](https://github.com/facebook/docusaurus/pull/5870) chore(README): fix broken GitHub Actions Workflow Status icon ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6064](https://github.com/facebook/docusaurus/pull/6064) refactor(core): fix types for client code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6055](https://github.com/facebook/docusaurus/pull/6055) chore: clean up dev dependency declarations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`\\n - [#6010](https://github.com/facebook/docusaurus/pull/6010) chore: upgrade prettier; rename prettier scripts as format ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5958](https://github.com/facebook/docusaurus/pull/5958) chore: update @svgr/webpack to version 6 ([@ludofischer](https://github.com/ludofischer))\\n- `docusaurus`\\n - [#5998](https://github.com/facebook/docusaurus/pull/5998) chore: upgrade webpack-dev-server to v4.5.0 ([@lex111](https://github.com/lex111))\\n - [#5965](https://github.com/facebook/docusaurus/pull/5965) fix(core): apply staticDirectories to base webpack config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5985](https://github.com/facebook/docusaurus/pull/5985) chore: cleanup dependency declaration in package.json ([@armano2](https://github.com/armano2))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#5963](https://github.com/facebook/docusaurus/pull/5963) chore: upgrade TypeScript & other ESLint related deps ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5962](https://github.com/facebook/docusaurus/pull/5962) refactor(content-docs): move isCategoriesShorthand to utils ([@armano2](https://github.com/armano2))\\n - [#5906](https://github.com/facebook/docusaurus/pull/5906) fix(content-docs): do not echo git history to console ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5905](https://github.com/facebook/docusaurus/pull/5905) misc(plugin-docs): fix Windows test snapshot for git history retrieval ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5904](https://github.com/facebook/docusaurus/pull/5904) refactor(content-docs): use shelljs instead of execa ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5940](https://github.com/facebook/docusaurus/pull/5940) refactor(plugin-ideal-image): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#5941](https://github.com/facebook/docusaurus/pull/5941) refactor(plugin-pwa): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5935](https://github.com/facebook/docusaurus/pull/5935) refactor(theme-search-algolia): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#5946](https://github.com/facebook/docusaurus/pull/5946) refactor: move deps declarations into src ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5914](https://github.com/facebook/docusaurus/pull/5914) refactor: improve setup of type declaration files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5922](https://github.com/facebook/docusaurus/pull/5922) refactor(theme-classic): move some logic of CodeBlock to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#5931](https://github.com/facebook/docusaurus/pull/5931) refactor(remark-plugin-npm2yarn): migrate package to TS ([@duanwilliam](https://github.com/duanwilliam))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#5806](https://github.com/facebook/docusaurus/pull/5806) refactor: use js-yaml to parse both JSON and YAML ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 48\\n\\n- Afshin Mehrabani ([@afshinm](https://github.com/afshinm))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brennan Kinney ([@polarathene](https://github.com/polarathene))\\n- Can Olcer ([@shafy](https://github.com/shafy))\\n- Christophe Chaudier ([@cchaudier](https://github.com/cchaudier))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- FISH UP ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- Fernando Maia ([@fsmaia](https://github.com/fsmaia))\\n- Hemant Sachdeva ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- Ivan Boothe ([@rootwork](https://github.com/rootwork))\\n- Jarar ([@JararvisQ](https://github.com/JararvisQ))\\n- Jeff Shillitto ([@jeffski](https://github.com/jeffski))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Konstantin Popov ([@KonstHardy](https://github.com/KonstHardy))\\n- Ludovico Fischer ([@ludofischer](https://github.com/ludofischer))\\n- Martin \u0160o\u0161i\u0107 ([@Martinsos](https://github.com/Martinsos))\\n- Matej Jellus ([@juffalow](https://github.com/juffalow))\\n- Matthijs Groen ([@matthijsgroen](https://github.com/matthijsgroen))\\n- Molly White ([@molly](https://github.com/molly))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Paden Clayton ([@spyke01](https://github.com/spyke01))\\n- Patitotective ([@Patitotective](https://github.com/Patitotective))\\n- Patrik M\xe4siar ([@patrikmasiar](https://github.com/patrikmasiar))\\n- Paul Biggar ([@pbiggar](https://github.com/pbiggar))\\n- Rey ([@rsapkf](https://github.com/rsapkf))\\n- Robin M\xe9tral ([@robinmetral](https://github.com/robinmetral))\\n- Rohit Agrawal ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n- Ronny Roeller ([@ronnyroeller](https://github.com/ronnyroeller))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Sharon Koech ([@skoech](https://github.com/skoech))\\n- Shoaib Sajid ([@dexbiobot](https://github.com/dexbiobot))\\n- Soham Shah ([@sohamsshah](https://github.com/sohamsshah))\\n- Stan Kocken ([@StanKocken](https://github.com/StanKocken))\\n- Swalah Amani ([@swalahamani](https://github.com/swalahamani))\\n- Swapnil M Mane ([@swapnilmmane](https://github.com/swapnilmmane))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Yongmin Hong ([@revi](https://github.com/revi))\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@pal-sig](https://github.com/pal-sig)\\n- chima ilo ([@chimailo](https://github.com/chimailo))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.9","metadata":{"permalink":"/changelog/2.0.0-beta.9","source":"@site/changelog/source/2.0.0-beta.9.md","title":"2.0.0-beta.9","description":"New Feature","date":"2021-11-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Avi Vahl","alias":"AviVahl","url":"https://github.com/AviVahl","imageURL":"https://github.com/AviVahl.png","key":"AviVahl","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dominik Meyer","alias":"dominikmeyersap","url":"https://github.com/dominikmeyersap","imageURL":"https://github.com/dominikmeyersap.png","key":"dominikmeyersap","page":null},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},{"name":"Gabriel Falc\xe3o","alias":"gabrielfalcao","url":"https://github.com/gabrielfalcao","imageURL":"https://github.com/gabrielfalcao.png","key":"gabrielfalcao","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Oscar Dominguez","alias":"oscard0m","url":"https://github.com/oscard0m","imageURL":"https://github.com/oscard0m.png","key":"oscard0m","page":null},{"name":"Robbie Averill","alias":"robbieaverill","url":"https://github.com/robbieaverill","imageURL":"https://github.com/robbieaverill.png","key":"robbieaverill","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Vladimir Tasic","alias":"utajum","url":"https://github.com/utajum","imageURL":"https://github.com/utajum.png","key":"utajum","page":null},{"name":"Ying Wang","alias":"wingclover","url":"https://github.com/wingclover","imageURL":"https://github.com/wingclover.png","key":"wingclover","page":null},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-11-02T20:00","authors":["AviVahl","cerkiewny","datlechin","dominikmeyersap","fishmandev","gabrielfalcao","jeffreyaven","Josh-Cena","juzhiyuan","lex111","oscard0m","robbieaverill","semoal","sivapalan","slorber","utajum","wingclover","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"nextItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5770](https://github.com/facebook/docusaurus/pull/5770) feat(theme-classic): allow specifying width/height in logo ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-types`, `docusaurus`\\n - [#5841](https://github.com/facebook/docusaurus/pull/5841) feat: allow user to specify deploymentBranch property in docusaurus.config.js ([@wpyoga](https://github.com/wpyoga))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5795](https://github.com/facebook/docusaurus/pull/5795) feat(search-algolia): algolia externalUrl regex to navigate with window.href ([@semoal](https://github.com/semoal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#5814](https://github.com/facebook/docusaurus/pull/5814) feat: Support Node 17 ([@slorber](https://github.com/slorber))\\n - [#5420](https://github.com/facebook/docusaurus/pull/5420) feat(core): upgrade to webpack-dev-server@4 ([@AviVahl](https://github.com/AviVahl))\\n- `docusaurus-theme-classic`\\n - [#5791](https://github.com/facebook/docusaurus/pull/5791) feat(theme-classic): add Serbian Cyrillic translation ([@utajum](https://github.com/utajum))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5835](https://github.com/facebook/docusaurus/pull/5835) fix(content-blog): Fix blog feeds not generated ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5828](https://github.com/facebook/docusaurus/pull/5828) fix: include all branch tips for shallow clone in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5824](https://github.com/facebook/docusaurus/pull/5824) fix: baseUrl passed to sortConfig ([@semoal](https://github.com/semoal))\\n - [#5813](https://github.com/facebook/docusaurus/pull/5813) fix: handle SIGTERM in build command ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5819](https://github.com/facebook/docusaurus/pull/5819) fix: use @docusaurus/react-loadable as package alias + include types ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-preset-classic`\\n - [#5831](https://github.com/facebook/docusaurus/pull/5831) feat(preset-classic): guard against unknown keys in options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5815](https://github.com/facebook/docusaurus/pull/5815) refactor: some improvements for webpack-dev-server ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5788](https://github.com/facebook/docusaurus/pull/5788) refactor: fix a few type inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5781](https://github.com/facebook/docusaurus/pull/5781) refactor: Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5853](https://github.com/facebook/docusaurus/pull/5853) docs: Fix a typo in CONTRIBUTING.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5852](https://github.com/facebook/docusaurus/pull/5852) docs: Fix a typo in versioning.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5847](https://github.com/facebook/docusaurus/pull/5847) docs: add InfraQL product docs website to showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#5843](https://github.com/facebook/docusaurus/pull/5843) docs: fix i18n routes to feature requests ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5766](https://github.com/facebook/docusaurus/pull/5766) docs: elaborate on the usage of MDX plugins ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5826](https://github.com/facebook/docusaurus/pull/5826) docs: fix lint issue ([@slorber](https://github.com/slorber))\\n - [#5801](https://github.com/facebook/docusaurus/pull/5801) docs: Update Drone Deployment docs ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n - [#5821](https://github.com/facebook/docusaurus/pull/5821) docs: include navbar item type in the API table ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5820](https://github.com/facebook/docusaurus/pull/5820) docs: add @Josh-Cena to the team ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5818](https://github.com/facebook/docusaurus/pull/5818) doc: fix typo in \\"create a doc\\" ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n - [#5797](https://github.com/facebook/docusaurus/pull/5797) docs: use \\"npx create-docusaurus\\" for init ([@slorber](https://github.com/slorber))\\n - [#5771](https://github.com/facebook/docusaurus/pull/5771) docs: Minor update to grammar in plugins overview page ([@robbieaverill](https://github.com/robbieaverill))\\n - [#5774](https://github.com/facebook/docusaurus/pull/5774) docs: update ssrTemplate ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5784](https://github.com/facebook/docusaurus/pull/5784) docs: fix link for apply to DocSearch program ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#5792](https://github.com/facebook/docusaurus/pull/5792) docs: fix typo ([@wingclover](https://github.com/wingclover))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5842](https://github.com/facebook/docusaurus/pull/5842) misc: add \\"name\\" field for root package.json ([@wpyoga](https://github.com/wpyoga))\\n - [#5836](https://github.com/facebook/docusaurus/pull/5836) chore: switch to GitHub issue forms ([@lex111](https://github.com/lex111))\\n - [#5834](https://github.com/facebook/docusaurus/pull/5834) chore(issue templ): add \\"self service\\" section in templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5833](https://github.com/facebook/docusaurus/pull/5833) chore(workflow): remove v2 prefix from titles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5697](https://github.com/facebook/docusaurus/pull/5697) chore(workflow): add cache to workflows using actions/setup-node ([@oscard0m](https://github.com/oscard0m))\\n - [#5825](https://github.com/facebook/docusaurus/pull/5825) chore: fix Crowdin again ([@slorber](https://github.com/slorber))\\n - [#5823](https://github.com/facebook/docusaurus/pull/5823) chore: replace doc sample .pdf file by .xlsx to solve Crowdin issue ([@slorber](https://github.com/slorber))\\n - [#5763](https://github.com/facebook/docusaurus/pull/5763) chore: update examples for beta.8 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5807](https://github.com/facebook/docusaurus/pull/5807) refactor: remove a few Lodash usages & ESLint enforcement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5808](https://github.com/facebook/docusaurus/pull/5808) refactor: clear a few ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `lqip-loader`\\n - [#5779](https://github.com/facebook/docusaurus/pull/5779) refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Avi Vahl ([@AviVahl](https://github.com/AviVahl))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Dominik Meyer ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n- Gabriel Falc\xe3o ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Oscar Dominguez ([@oscard0m](https://github.com/oscard0m))\\n- Robbie Averill ([@robbieaverill](https://github.com/robbieaverill))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- Vladimir Tasic ([@utajum](https://github.com/utajum))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Ying Wang ([@wingclover](https://github.com/wingclover))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.8","metadata":{"permalink":"/changelog/2.0.0-beta.8","source":"@site/changelog/source/2.0.0-beta.8.md","title":"2.0.0-beta.8","description":"New Feature","date":"2021-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},{"name":"Caner Canbaz","alias":"canercanbaz","url":"https://github.com/canercanbaz","imageURL":"https://github.com/canercanbaz.png","key":"canercanbaz","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dimi Mikadze","alias":"DimiMikadze","url":"https://github.com/DimiMikadze","imageURL":"https://github.com/DimiMikadze.png","key":"DimiMikadze","page":null},{"name":"Ilija Pavlic","alias":"ipavlic","url":"https://github.com/ipavlic","imageURL":"https://github.com/ipavlic.png","key":"ipavlic","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nathaniel Furniss","alias":"nlfurniss","url":"https://github.com/nlfurniss","imageURL":"https://github.com/nlfurniss.png","key":"nlfurniss","page":null},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thanasis Katsadas","alias":"thanasis00","url":"https://github.com/thanasis00","imageURL":"https://github.com/thanasis00.png","key":"thanasis00","page":null},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-21T20:00","authors":["ataft","canercanbaz","datlechin","DimiMikadze","ipavlic","johnnyreilly","Josh-Cena","lex111","nlfurniss","philipp985","slorber","thanasis00","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"nextItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5702](https://github.com/facebook/docusaurus/pull/5702) feat(content-blog): new readingTime plugin option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5740](https://github.com/facebook/docusaurus/pull/5740) feat(core): write-heading-ids options maintainCasing, overwrite ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5705](https://github.com/facebook/docusaurus/pull/5705) feat(content-docs): new front matter options to customize pagination ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#5760](https://github.com/facebook/docusaurus/pull/5760) fix(ideal-image): fix IdealImage in dev not handling ES import images properly ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5732](https://github.com/facebook/docusaurus/pull/5732) fix(theme-classic): allow tabs with number as value ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5721](https://github.com/facebook/docusaurus/pull/5721) fix: handle rubber band scrolling in hideable navbar ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5717](https://github.com/facebook/docusaurus/pull/5717) refactor: Polish de translation ([@philipp985](https://github.com/philipp985))\\n - [#5725](https://github.com/facebook/docusaurus/pull/5725) refactor: add missing Turkish translations to theme-classic ([@canercanbaz](https://github.com/canercanbaz))\\n - [#5723](https://github.com/facebook/docusaurus/pull/5723) refactor(v2): update Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5726](https://github.com/facebook/docusaurus/pull/5726) refactor(module-type-aliases): remove fallback aliases ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5755](https://github.com/facebook/docusaurus/pull/5755) docs: rename docusaurus.config.js route + redirects cleanup ([@slorber](https://github.com/slorber))\\n - [#5750](https://github.com/facebook/docusaurus/pull/5750) docs(v2): Fix typo in using-plugins.md ([@thanasis00](https://github.com/thanasis00))\\n - [#5727](https://github.com/facebook/docusaurus/pull/5727) docs(v2): Add Fenghua Frontend Developer site to showcase page ([@zxuqian](https://github.com/zxuqian))\\n - [#5746](https://github.com/facebook/docusaurus/pull/5746) docs: Add plugin-image-zoom ([@ataft](https://github.com/ataft))\\n - [#5728](https://github.com/facebook/docusaurus/pull/5728) docs: add h4 into toc on certain pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5737](https://github.com/facebook/docusaurus/pull/5737) docs: Add Apex FP to showcase ([@ipavlic](https://github.com/ipavlic))\\n- `docusaurus-plugin-content-blog`\\n - [#5753](https://github.com/facebook/docusaurus/pull/5753) fix(content-blog): temporarily swallow feed mdxToHtml errors + feed refactor ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#5761](https://github.com/facebook/docusaurus/pull/5761) chore: upgrade html-webpack-plugin, remove terser 4 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#5714](https://github.com/facebook/docusaurus/pull/5714) chore: Enable ESLint rules of hooks + fix new lint errors ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5722](https://github.com/facebook/docusaurus/pull/5722) chore: fix gen script to support TS template ([@lex111](https://github.com/lex111))\\n - [#5730](https://github.com/facebook/docusaurus/pull/5730) chore: fix typos / casing in issue template ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5720](https://github.com/facebook/docusaurus/pull/5720) chore: regenerate beta.7 examples ([@lex111](https://github.com/lex111))\\n - [#5719](https://github.com/facebook/docusaurus/pull/5719) chore: remove beta.5 docs ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#5748](https://github.com/facebook/docusaurus/pull/5748) refactor: perform shallow clone during deploy ([@nlfurniss](https://github.com/nlfurniss))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Caner Canbaz ([@canercanbaz](https://github.com/canercanbaz))\\n- Dimi Mikadze ([@DimiMikadze](https://github.com/DimiMikadze))\\n- Ilija Pavlic ([@ipavlic](https://github.com/ipavlic))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nathaniel Furniss ([@nlfurniss](https://github.com/nlfurniss))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thanasis Katsadas ([@thanasis00](https://github.com/thanasis00))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))\\n- [@philipp985](https://github.com/philipp985)"},{"id":"/2.0.0-beta.7","metadata":{"permalink":"/changelog/2.0.0-beta.7","source":"@site/changelog/source/2.0.0-beta.7.md","title":"2.0.0-beta.7","description":"New Feature","date":"2021-10-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aditya Kajla","alias":"akajla09","url":"https://github.com/akajla09","imageURL":"https://github.com/akajla09.png","key":"akajla09","page":null},{"name":"Andrew Nguyen","alias":"Andrewnt219","url":"https://github.com/Andrewnt219","imageURL":"https://github.com/Andrewnt219.png","key":"Andrewnt219","page":null},{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},{"name":"Bharat Middha","alias":"bmiddha","url":"https://github.com/bmiddha","imageURL":"https://github.com/bmiddha.png","key":"bmiddha","page":null},{"name":"David Callizaya","alias":"caleeli","url":"https://github.com/caleeli","imageURL":"https://github.com/caleeli.png","key":"caleeli","page":null},{"name":"Chris Chinchilla","alias":"ChrisChinchilla","url":"https://github.com/ChrisChinchilla","imageURL":"https://github.com/ChrisChinchilla.png","key":"ChrisChinchilla","page":null},{"name":"djamaile","alias":"djamaile","url":"https://github.com/djamaile","imageURL":"https://github.com/djamaile.png","key":"djamaile","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Darshan Gada","alias":"dr5hn","url":"https://github.com/dr5hn","imageURL":"https://github.com/dr5hn.png","key":"dr5hn","page":null},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},{"name":"Ekaterina Mozheiko","alias":"EkaterinaMozheiko","url":"https://github.com/EkaterinaMozheiko","imageURL":"https://github.com/EkaterinaMozheiko.png","key":"EkaterinaMozheiko","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Gabriel T. Nardy","alias":"gtnardy","url":"https://github.com/gtnardy","imageURL":"https://github.com/gtnardy.png","key":"gtnardy","page":null},{"name":"headline-design","alias":"headline-design","url":"https://github.com/headline-design","imageURL":"https://github.com/headline-design.png","key":"headline-design","page":null},{"name":"Hugh Lilly","alias":"hughlilly","url":"https://github.com/hughlilly","imageURL":"https://github.com/hughlilly.png","key":"hughlilly","page":null},{"name":"Ivar Conradi \xd8sthus","alias":"ivarconr","url":"https://github.com/ivarconr","imageURL":"https://github.com/ivarconr.png","key":"ivarconr","page":null},{"name":"Jason Bosco","alias":"jasonbosco","url":"https://github.com/jasonbosco","imageURL":"https://github.com/jasonbosco.png","key":"jasonbosco","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jordan Lee","alias":"jkhaui","url":"https://github.com/jkhaui","imageURL":"https://github.com/jkhaui.png","key":"jkhaui","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Robert Kingston","alias":"kingo55","url":"https://github.com/kingo55","imageURL":"https://github.com/kingo55.png","key":"kingo55","page":null},{"name":"Kyriet","alias":"KyrietS","url":"https://github.com/KyrietS","imageURL":"https://github.com/KyrietS.png","key":"KyrietS","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Mahdi Hamldar","alias":"MrTechHunter","url":"https://github.com/MrTechHunter","imageURL":"https://github.com/MrTechHunter.png","key":"MrTechHunter","page":null},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},{"name":"Ana Carolina","alias":"printf-ana","url":"https://github.com/printf-ana","imageURL":"https://github.com/printf-ana.png","key":"printf-ana","page":null},{"name":"Shrugsy","alias":"Shrugsy","url":"https://github.com/Shrugsy","imageURL":"https://github.com/Shrugsy.png","key":"Shrugsy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},{"name":"swyx","alias":"sw-yx","url":"https://github.com/sw-yx","imageURL":"https://github.com/sw-yx.png","key":"sw-yx","page":null},{"name":"Vincent","alias":"vinckr","url":"https://github.com/vinckr","imageURL":"https://github.com/vinckr.png","key":"vinckr","page":null},{"name":"Whirl","alias":"Whirl21","url":"https://github.com/Whirl21","imageURL":"https://github.com/Whirl21.png","key":"Whirl21","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-15T20:00","authors":["akajla09","Andrewnt219","BattleOfPlassey","bmiddha","caleeli","ChrisChinchilla","djamaile","Dr-Electron","dr5hn","dsmmcken","EkaterinaMozheiko","erickzhao","forresst","gtnardy","headline-design","hughlilly","ivarconr","jasonbosco","jeffreyaven","jkhaui","Josh-Cena","kingo55","KyrietS","lex111","moonrailgun","MrTechHunter","ntucker","ohkimur","printf-ana","Shrugsy","slorber","stnor","sw-yx","vinckr","Whirl21","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"nextItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5683](https://github.com/facebook/docusaurus/pull/5683) feat: make Translate children optional ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils`\\n - [#4330](https://github.com/facebook/docusaurus/pull/4330) feat(content-blog): add full blog post html into RSS/Atom feeds ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5642](https://github.com/facebook/docusaurus/pull/5642) feat(theme-classic, plugin-docs): sidebar item level-specific className + allow customization ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5635](https://github.com/facebook/docusaurus/pull/5635) feat: npm init docusaurus, yarn create docusaurus ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#5589](https://github.com/facebook/docusaurus/pull/5589) feat: properly type-check the Docusaurus config of new sites ([@bmiddha](https://github.com/bmiddha))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus`\\n - [#5498](https://github.com/facebook/docusaurus/pull/5498) feat: make Webpack url-loader limit configurable (env variable) ([@stnor](https://github.com/stnor))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#5545](https://github.com/facebook/docusaurus/pull/5545) feat: make tags route path configurable ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus-theme-classic`\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#5694](https://github.com/facebook/docusaurus/pull/5694) fix: proper collapsing of long element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5684](https://github.com/facebook/docusaurus/pull/5684) fix: use realpath for site dir to resolve symlink ([@lex111](https://github.com/lex111))\\n - [#5645](https://github.com/facebook/docusaurus/pull/5645) fix: place root route at the end ([@lex111](https://github.com/lex111))\\n - [#5629](https://github.com/facebook/docusaurus/pull/5629) fix: text/link hydration bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5699](https://github.com/facebook/docusaurus/pull/5699) fix: apply announcement bar class if only needed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5667](https://github.com/facebook/docusaurus/pull/5667) fix: expand tag column on truncated post ([@lex111](https://github.com/lex111))\\n - [#5668](https://github.com/facebook/docusaurus/pull/5668) fix: preserve line breaks when copy code in Firefox ([@lex111](https://github.com/lex111))\\n - [#5647](https://github.com/facebook/docusaurus/pull/5647) feat(theme-classic): make first tab the default tab ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5652](https://github.com/facebook/docusaurus/pull/5652) fix: restore duplicate Tabs rendering to fix hydration issue ([@slorber](https://github.com/slorber))\\n - [#5643](https://github.com/facebook/docusaurus/pull/5643) fix(theme-classic): reset default style for task lists ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n - [#5571](https://github.com/facebook/docusaurus/pull/5571) fix: highlight active item in recent post list ([@lex111](https://github.com/lex111))\\n - [#5481](https://github.com/facebook/docusaurus/pull/5481) fix: use heading itself as anchor for better crawling ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#5677](https://github.com/facebook/docusaurus/pull/5677) fix: Don\'t ignore options.transforms for buble ([@ntucker](https://github.com/ntucker))\\n - [#5556](https://github.com/facebook/docusaurus/pull/5556) fix: pin react-live due to possible mismatch React ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#5690](https://github.com/facebook/docusaurus/pull/5690) fix: preserve hash in asset link ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#5540](https://github.com/facebook/docusaurus/pull/5540) fix: do not use ideal image plugin in dev env ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#5606](https://github.com/facebook/docusaurus/pull/5606) fix(docs): create tags route if only tags exists ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-types`\\n - [#5601](https://github.com/facebook/docusaurus/pull/5601) fix(module-type-aliases): move @type packages to dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#5495](https://github.com/facebook/docusaurus/pull/5495) fix: ignore code block lines when creating excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5490](https://github.com/facebook/docusaurus/pull/5490) fix: install deps for new project via Yarn on Windows properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5479](https://github.com/facebook/docusaurus/pull/5479) fix: add docs tag validation to solve #5478 ([@sw-yx](https://github.com/sw-yx))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5709](https://github.com/facebook/docusaurus/pull/5709) refactor: cleanup scroll handlers ([@lex111](https://github.com/lex111))\\n - [#5627](https://github.com/facebook/docusaurus/pull/5627) refactor: various TOC improvements ([@lex111](https://github.com/lex111))\\n - [#5469](https://github.com/facebook/docusaurus/pull/5469) refactor: Adjust styling of back top top button ([@dsmmcken](https://github.com/dsmmcken))\\n- `docusaurus-theme-classic`\\n - [#5708](https://github.com/facebook/docusaurus/pull/5708) refactor: hide hash link from crawlers ([@lex111](https://github.com/lex111))\\n - [#5649](https://github.com/facebook/docusaurus/pull/5649) refactor: improve pt-BR translation for classic theme ([@printf-ana](https://github.com/printf-ana))\\n - [#5646](https://github.com/facebook/docusaurus/pull/5646) refactor: complete missing and fix ES translations ([@caleeli](https://github.com/caleeli))\\n - [#5640](https://github.com/facebook/docusaurus/pull/5640) style: update Persian language translations ([@MrTechHunter](https://github.com/MrTechHunter))\\n - [#5630](https://github.com/facebook/docusaurus/pull/5630) refactor: standardize using media queries ([@lex111](https://github.com/lex111))\\n - [#5487](https://github.com/facebook/docusaurus/pull/5487) refactor: use only one close SVG icon ([@lex111](https://github.com/lex111))\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n - [#5485](https://github.com/facebook/docusaurus/pull/5485) polish: prevent pop navigation on back if navbar sidebar is open ([@slorber](https://github.com/slorber))\\n - [#5472](https://github.com/facebook/docusaurus/pull/5472) polish(theme-classic): add Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#5636](https://github.com/facebook/docusaurus/pull/5636) refactor: make all Props defined as interface + readonly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#5560](https://github.com/facebook/docusaurus/pull/5560) polish: remove unused eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5580](https://github.com/facebook/docusaurus/pull/5580) refactor(core): type improvements for `PendingNavigation` ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5496](https://github.com/facebook/docusaurus/pull/5496) refactor: remove deprecated createRequireFromPath ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#5681](https://github.com/facebook/docusaurus/pull/5681) docs(v2): Add CountryStateCityAPI site to showcase page ([@dr5hn](https://github.com/dr5hn))\\n- [#5661](https://github.com/facebook/docusaurus/pull/5661) docs: updated cloudywithachanceofbigdata.com blog showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5658](https://github.com/facebook/docusaurus/pull/5658) docs: Algolia plugin must be enabled before crawling the site ([@slorber](https://github.com/slorber))\\n- [#5654](https://github.com/facebook/docusaurus/pull/5654) docs: Add Warrant Docs site to showcase page ([@akajla09](https://github.com/akajla09))\\n- [#5655](https://github.com/facebook/docusaurus/pull/5655) docs: Added cloudywithachanceofbigdata.com showcase blog ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5648](https://github.com/facebook/docusaurus/pull/5648) docs: add ory documentation to showcase ([@vinckr](https://github.com/vinckr))\\n- [#5644](https://github.com/facebook/docusaurus/pull/5644) docs: add djamaile blog to site showcase ([@djamaile](https://github.com/djamaile))\\n- [#5641](https://github.com/facebook/docusaurus/pull/5641) docs: add Lux Algo to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5638](https://github.com/facebook/docusaurus/pull/5638) docs: add nanos world docs to showcase ([@gtnardy](https://github.com/gtnardy))\\n- [#5610](https://github.com/facebook/docusaurus/pull/5610) docs: Add IOTA wiki to showcase ([@Dr-Electron](https://github.com/Dr-Electron))\\n- [#5489](https://github.com/facebook/docusaurus/pull/5489) docs: add additional search options, typesense and local search ([@jasonbosco](https://github.com/jasonbosco))\\n- [#5590](https://github.com/facebook/docusaurus/pull/5590) docs(website): document npm2yarn plugin + use new Tabs API everywhere ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5591](https://github.com/facebook/docusaurus/pull/5591) docs: Add whirl.codes to showcase ([@Whirl21](https://github.com/Whirl21))\\n- [#5574](https://github.com/facebook/docusaurus/pull/5574) docs: add Pipeline UI to showcase ([@headline-design](https://github.com/headline-design))\\n- [#5585](https://github.com/facebook/docusaurus/pull/5585) docs: fix more references to Discord channels ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5572](https://github.com/facebook/docusaurus/pull/5572) docs: add Blogasaurus to showcase ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5575](https://github.com/facebook/docusaurus/pull/5575) docs: clarify MDX version used ([@lex111](https://github.com/lex111))\\n- [#5581](https://github.com/facebook/docusaurus/pull/5581) docs(website): update all Discord links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5566](https://github.com/facebook/docusaurus/pull/5566) docs: fix code example ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- [#5559](https://github.com/facebook/docusaurus/pull/5559) docs: minor grammatical correction ([@jkhaui](https://github.com/jkhaui))\\n- [#5543](https://github.com/facebook/docusaurus/pull/5543) docs: add note about files being ignored when prefixed with an unders\u2026 ([@KyrietS](https://github.com/KyrietS))\\n- [#5549](https://github.com/facebook/docusaurus/pull/5549) docs: Add Mint Metrics site to the Showcase ([@kingo55](https://github.com/kingo55))\\n- [#5546](https://github.com/facebook/docusaurus/pull/5546) docs: add unleash to showcase ([@ivarconr](https://github.com/ivarconr))\\n- [#5539](https://github.com/facebook/docusaurus/pull/5539) docs: improve escape pipe in Markdown tables ([@forresst](https://github.com/forresst))\\n- [#5486](https://github.com/facebook/docusaurus/pull/5486) docs: mention Netlify ignore build setting ([@slorber](https://github.com/slorber))\\n- [#5482](https://github.com/facebook/docusaurus/pull/5482) docs: update docusaurus-plugin-relative-paths description ([@ohkimur](https://github.com/ohkimur))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`\\n - [#5678](https://github.com/facebook/docusaurus/pull/5678) refactor(content-docs): refactor sidebars, Joi validation, generator rework, expose config types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5666](https://github.com/facebook/docusaurus/pull/5666) chore: upgrade Infima to alpha.34 ([@lex111](https://github.com/lex111))\\n - [#5639](https://github.com/facebook/docusaurus/pull/5639) misc: update base translation + remove extra char ([@lex111](https://github.com/lex111))\\n- Other\\n - [#5669](https://github.com/facebook/docusaurus/pull/5669) fix: allow ColorGenerator to parse colors with prefix `#` ([@Andrewnt219](https://github.com/Andrewnt219))\\n - [#5632](https://github.com/facebook/docusaurus/pull/5632) chore: prepare Algolia migration ([@slorber](https://github.com/slorber))\\n - [#5628](https://github.com/facebook/docusaurus/pull/5628) chore: fix warning after build ([@lex111](https://github.com/lex111))\\n - [#5573](https://github.com/facebook/docusaurus/pull/5573) misc: fix ungrammatical sentence about 5-min tutorial ([@hughlilly](https://github.com/hughlilly))\\n - [#5499](https://github.com/facebook/docusaurus/pull/5499) chore: set up CodeQL ([@zpao](https://github.com/zpao))\\n - [#5474](https://github.com/facebook/docusaurus/pull/5474) chore: remove beta.4 docs (already archived) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5611](https://github.com/facebook/docusaurus/pull/5611) chore: upgrade Prettier + regenerate lock file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#5609](https://github.com/facebook/docusaurus/pull/5609) chore: upgrade Terser-related dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5608](https://github.com/facebook/docusaurus/pull/5608) chore: upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5605](https://github.com/facebook/docusaurus/pull/5605) refactor(core): enforce noImplicitAny ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#5603](https://github.com/facebook/docusaurus/pull/5603) fix(preset-classic): fix TS build issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5561](https://github.com/facebook/docusaurus/pull/5561) refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`\\n - [#5579](https://github.com/facebook/docusaurus/pull/5579) refactor(preset-classic): migrate preset-classic to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-init`\\n - [#5484](https://github.com/facebook/docusaurus/pull/5484) chore: regenerate beta.6 examples + fix regen script ([@slorber](https://github.com/slorber))\\n\\n## Committers: 36\\n\\n- Aditya Kajla ([@akajla09](https://github.com/akajla09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ana Carolina ([@printf-ana](https://github.com/printf-ana))\\n- Andrew Nguyen ([@Andrewnt219](https://github.com/Andrewnt219))\\n- Bharat Middha ([@bmiddha](https://github.com/bmiddha))\\n- Chris Chinchilla ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Darshan Gada ([@dr5hn](https://github.com/dr5hn))\\n- David Callizaya ([@caleeli](https://github.com/caleeli))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- Ekaterina Mozheiko ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Gabriel T. Nardy ([@gtnardy](https://github.com/gtnardy))\\n- Hugh Lilly ([@hughlilly](https://github.com/hughlilly))\\n- Ivar Conradi \xd8sthus ([@ivarconr](https://github.com/ivarconr))\\n- Jason Bosco ([@jasonbosco](https://github.com/jasonbosco))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jordan Lee ([@jkhaui](https://github.com/jkhaui))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kyriet ([@KyrietS](https://github.com/KyrietS))\\n- Mahdi Hamldar ([@MrTechHunter](https://github.com/MrTechHunter))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Robert Kingston ([@kingo55](https://github.com/kingo55))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vincent ([@vinckr](https://github.com/vinckr))\\n- Whirl ([@Whirl21](https://github.com/Whirl21))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@Shrugsy](https://github.com/Shrugsy)\\n- [@djamaile](https://github.com/djamaile)\\n- [@headline-design](https://github.com/headline-design)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- swyx ([@sw-yx](https://github.com/sw-yx))"},{"id":"/2.0.0-beta.6","metadata":{"permalink":"/changelog/2.0.0-beta.6","source":"@site/changelog/source/2.0.0-beta.6.md","title":"2.0.0-beta.6","description":"New Feature","date":"2021-09-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},{"name":"Antony Messerli","alias":"antonym","url":"https://github.com/antonym","imageURL":"https://github.com/antonym.png","key":"antonym","page":null},{"name":"farshid","alias":"farshidinanloo","url":"https://github.com/farshidinanloo","imageURL":"https://github.com/farshidinanloo.png","key":"farshidinanloo","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},{"name":"Oscar Lorentzon","alias":"oscarlorentzon","url":"https://github.com/oscarlorentzon","imageURL":"https://github.com/oscarlorentzon.png","key":"oscarlorentzon","page":null},{"name":"Rohit Gohri","alias":"rohit-gohri","url":"https://github.com/rohit-gohri","imageURL":"https://github.com/rohit-gohri.png","key":"rohit-gohri","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-09-02T20:00","authors":["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"nextItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5428](https://github.com/facebook/docusaurus/pull/5428) feat: adds blog archive route ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5462](https://github.com/facebook/docusaurus/pull/5462) feat: on back navigation, close mobile sidebar ([@slorber](https://github.com/slorber))\\n - [#5445](https://github.com/facebook/docusaurus/pull/5445) feat: Add docs-related stable classnames ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5460](https://github.com/facebook/docusaurus/pull/5460) feat: infima 33 + navbar-sidebar close button ([@slorber](https://github.com/slorber))\\n - [#5442](https://github.com/facebook/docusaurus/pull/5442) feat(theme-classic): allow passing tab label and default value through TabItem ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5454](https://github.com/facebook/docusaurus/pull/5454) feat: new docs options: versions.{badge,className} ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5444](https://github.com/facebook/docusaurus/pull/5444) fix: fix some theme UI issues (blockquotes, navbar-sidebar font) with Infima alpha.32 ([@slorber](https://github.com/slorber))\\n - [#5431](https://github.com/facebook/docusaurus/pull/5431) fix: some beta.5 bugfixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5437](https://github.com/facebook/docusaurus/pull/5437) fix: fix a few TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5459](https://github.com/facebook/docusaurus/pull/5459) refactor(theme-classic): completely migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5453](https://github.com/facebook/docusaurus/pull/5453) refactor: use SVG for closable button in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5430](https://github.com/facebook/docusaurus/pull/5430) refactor: switch to Flexbox in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5434](https://github.com/facebook/docusaurus/pull/5434) refactor: update Arabic and Persian translations ([@3alisaki](https://github.com/3alisaki))\\n - [#5410](https://github.com/facebook/docusaurus/pull/5410) refactor: add missing translations in fa.json ([@farshidinanloo](https://github.com/farshidinanloo))\\n\\n## :memo: Documentation\\n\\n- [#5471](https://github.com/facebook/docusaurus/pull/5471) docs: Add docusaurus-plugin-relative-paths ([@ohkimur](https://github.com/ohkimur))\\n- [#5464](https://github.com/facebook/docusaurus/pull/5464) docs: add mapillary-js to showcase ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- [#5433](https://github.com/facebook/docusaurus/pull/5433) docs: document doc tags + refinements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5435](https://github.com/facebook/docusaurus/pull/5435) docs: Add netboot.xyz to site showcase ([@antonym](https://github.com/antonym))\\n- [#5436](https://github.com/facebook/docusaurus/pull/5436) docs: add Redocusaurus in community plugin list ([@rohit-gohri](https://github.com/rohit-gohri))\\n\\n## :house: Internal\\n\\n- [#5455](https://github.com/facebook/docusaurus/pull/5455) fix: website bad version name in docusaurus.config.js ([@slorber](https://github.com/slorber))\\n\\n## Committers: 10\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Antony Messerli ([@antonym](https://github.com/antonym))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Oscar Lorentzon ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- Rohit Gohri ([@rohit-gohri](https://github.com/rohit-gohri))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- farshid ([@farshidinanloo](https://github.com/farshidinanloo))"},{"id":"/2.0.0-beta.5","metadata":{"permalink":"/changelog/2.0.0-beta.5","source":"@site/changelog/source/2.0.0-beta.5.md","title":"2.0.0-beta.5","description":"New Feature","date":"2021-08-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},{"name":"David Seal","alias":"dbseal","url":"https://github.com/dbseal","imageURL":"https://github.com/dbseal.png","key":"dbseal","page":null},{"name":"Deepak Prabhakara","alias":"deepakprabhakara","url":"https://github.com/deepakprabhakara","imageURL":"https://github.com/deepakprabhakara.png","key":"deepakprabhakara","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Federico Aloi","alias":"faloi","url":"https://github.com/faloi","imageURL":"https://github.com/faloi.png","key":"faloi","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Fouad Matin","alias":"fouad","url":"https://github.com/fouad","imageURL":"https://github.com/fouad.png","key":"fouad","page":null},{"name":"Julien Neuhart","alias":"gulien","url":"https://github.com/gulien","imageURL":"https://github.com/gulien.png","key":"gulien","page":null},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},{"name":"HaochenQ","alias":"HaochenQ","url":"https://github.com/HaochenQ","imageURL":"https://github.com/HaochenQ.png","key":"HaochenQ","page":null},{"name":"Dmitry Zhifarsky","alias":"incendial","url":"https://github.com/incendial","imageURL":"https://github.com/incendial.png","key":"incendial","page":null},{"name":"Isaac Philip","alias":"isaac-philip","url":"https://github.com/isaac-philip","imageURL":"https://github.com/isaac-philip.png","key":"isaac-philip","page":null},{"name":"Yan Ivan Evdokimov","alias":"jansivans","url":"https://github.com/jansivans","imageURL":"https://github.com/jansivans.png","key":"jansivans","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Jonny Burger","alias":"JonnyBurger","url":"https://github.com/JonnyBurger","imageURL":"https://github.com/JonnyBurger.png","key":"JonnyBurger","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Marko Saric","alias":"metmarkosaric","url":"https://github.com/metmarkosaric","imageURL":"https://github.com/metmarkosaric.png","key":"metmarkosaric","page":null},{"name":"Michal S\xe4nger","alias":"michalsanger","url":"https://github.com/michalsanger","imageURL":"https://github.com/michalsanger.png","key":"michalsanger","page":null},{"name":"Garry","alias":"neaped","url":"https://github.com/neaped","imageURL":"https://github.com/neaped.png","key":"neaped","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tunghsiao Liu","alias":"sparanoid","url":"https://github.com/sparanoid","imageURL":"https://github.com/sparanoid.png","key":"sparanoid","page":null},{"name":"wan-nyan-wan","alias":"wan-nyan-wan","url":"https://github.com/wan-nyan-wan","imageURL":"https://github.com/wan-nyan-wan.png","key":"wan-nyan-wan","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-08-26T20:00","authors":["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"nextItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#5396](https://github.com/facebook/docusaurus/pull/5396) feat(plugin-blog): multi-authors support + authors.yml global configuration ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5371](https://github.com/facebook/docusaurus/pull/5371) feat: make blog config options and navbar versions dropdown label translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5375](https://github.com/facebook/docusaurus/pull/5375) feat: add metatags support for seo / blogposts #5373 ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-plugin-content-blog`\\n - [#5354](https://github.com/facebook/docusaurus/pull/5354) feat(plugin-blog): allow `\'ALL\'` as `postsPerPage` option value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5330](https://github.com/facebook/docusaurus/pull/5330) feat: Markdown page-specific head metadatas ([@slorber](https://github.com/slorber))\\n - [#5322](https://github.com/facebook/docusaurus/pull/5322) feat: structured data for blog posts ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5314](https://github.com/facebook/docusaurus/pull/5314) feat(v2): add cs (Czech) translations for docusaurus-theme-classic ([@michalsanger](https://github.com/michalsanger))\\n- `docusaurus-init`\\n - [#5233](https://github.com/facebook/docusaurus/pull/5233) feat: new init template classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5309](https://github.com/facebook/docusaurus/pull/5309) feat: blog posts support /YYYY/MM/DD/blog-post/index.md pattern + blog frontmatter can reference relative images ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#5299](https://github.com/facebook/docusaurus/pull/5299) feat: mdx loader fallback, allow importing mdx docs from anywhere ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5425](https://github.com/facebook/docusaurus/pull/5425) fix: toc does not highlight clicked anchor + use scroll-margin-top ([@slorber](https://github.com/slorber))\\n - [#5424](https://github.com/facebook/docusaurus/pull/5424) refactor: make dynamic authors layout via CSS only ([@lex111](https://github.com/lex111))\\n - [#5422](https://github.com/facebook/docusaurus/pull/5422) fix: make tags wrapping properly ([@lex111](https://github.com/lex111))\\n - [#5419](https://github.com/facebook/docusaurus/pull/5419) fix: various fixes back-to-top button ([@lex111](https://github.com/lex111))\\n - [#5361](https://github.com/facebook/docusaurus/pull/5361) fix: refactor TOC highlighting + handle edge cases ([@slorber](https://github.com/slorber))\\n - [#5357](https://github.com/facebook/docusaurus/pull/5357) fix: code blocks should scroll in RTL direction ([@slorber](https://github.com/slorber))\\n - [#5346](https://github.com/facebook/docusaurus/pull/5346) fix: author/image adjustments in BlogPosting schema ([@lex111](https://github.com/lex111))\\n - [#5240](https://github.com/facebook/docusaurus/pull/5240) fix: remove top margin only from directly first element ([@lex111](https://github.com/lex111))\\n - [#5317](https://github.com/facebook/docusaurus/pull/5317) fix: make proper highlighting doc link if no sidebar ([@hamzahamidi](https://github.com/hamzahamidi))\\n - [#5316](https://github.com/facebook/docusaurus/pull/5316) fix: avoid extra default active class on doc sidebar item ([@lex111](https://github.com/lex111))\\n - [#5319](https://github.com/facebook/docusaurus/pull/5319) fix: unbreak highlighting regular navbar links ([@lex111](https://github.com/lex111))\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n - [#5275](https://github.com/facebook/docusaurus/pull/5275) fix: improve spanish translation ([@faloi](https://github.com/faloi))\\n - [#5262](https://github.com/facebook/docusaurus/pull/5262) fix: show secondary menu if even there is no main one ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5426](https://github.com/facebook/docusaurus/pull/5426) fix: Make update-notifier fail-safe if no permission to read configStore ([@slorber](https://github.com/slorber))\\n - [#5398](https://github.com/facebook/docusaurus/pull/5398) fix: fix write-translations warning for theme-common translations ([@slorber](https://github.com/slorber))\\n - [#5381](https://github.com/facebook/docusaurus/pull/5381) fix: canary releases should ignore notifier updates ([@slorber](https://github.com/slorber))\\n - [#5339](https://github.com/facebook/docusaurus/pull/5339) fix: add admonitions support to mdx partials loaded through the fallback mdx loader ([@slorber](https://github.com/slorber))\\n - [#5311](https://github.com/facebook/docusaurus/pull/5311) fix: docusaurus serve logs wrong port if 3000 is taken ([@wan-nyan-wan](https://github.com/wan-nyan-wan))\\n - [#5308](https://github.com/facebook/docusaurus/pull/5308) fix: remove unexpected whitespaces in CSS bundle ([@lex111](https://github.com/lex111))\\n - [#5268](https://github.com/facebook/docusaurus/pull/5268) fix: fix wrong regex that removes extra letters from swizzled component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5399](https://github.com/facebook/docusaurus/pull/5399) fix: fix site unlocalized 404 pages + aggressive Netlify /assets caching ([@slorber](https://github.com/slorber))\\n - [#5249](https://github.com/facebook/docusaurus/pull/5249) fix: fix Crowdin mapping for pt-BR ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5383](https://github.com/facebook/docusaurus/pull/5383) fix: fix Locale Dropdown RTL icon + Webpack aliases ordering ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#5370](https://github.com/facebook/docusaurus/pull/5370) fix(init): fix links to feature images in classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#5364](https://github.com/facebook/docusaurus/pull/5364) fix: unbreak Details component ([@lex111](https://github.com/lex111))\\n - [#5297](https://github.com/facebook/docusaurus/pull/5297) fix: fix constant value import ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5334](https://github.com/facebook/docusaurus/pull/5334) fix: plugin ideal-image should generate filename with a hash even in development ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-search-algolia`\\n - [#5290](https://github.com/facebook/docusaurus/pull/5290) fix: make successful build if missing favicon ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#5270](https://github.com/facebook/docusaurus/pull/5270) fix: ability to link md files with relative paths when paths contain space ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#5261](https://github.com/facebook/docusaurus/pull/5261) fix: fix various TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#5402](https://github.com/facebook/docusaurus/pull/5402) refactor: improve styles of Details component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5386](https://github.com/facebook/docusaurus/pull/5386) refactor: various tags improvements ([@lex111](https://github.com/lex111))\\n - [#5377](https://github.com/facebook/docusaurus/pull/5377) refactor: make main heading font size changeable via CSS var ([@lex111](https://github.com/lex111))\\n - [#5355](https://github.com/facebook/docusaurus/pull/5355) refactor: add blog microdata in markup instead of use JSON-LD ([@lex111](https://github.com/lex111))\\n - [#5365](https://github.com/facebook/docusaurus/pull/5365) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5280](https://github.com/facebook/docusaurus/pull/5280) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Other\\n - [#5389](https://github.com/facebook/docusaurus/pull/5389) refactor: clean Canny integration + rename \'Feedback\' to \'Feature Requests\' + improve TS doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5242](https://github.com/facebook/docusaurus/pull/5242) refactor: reduce ESLint warnings / better typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#5423](https://github.com/facebook/docusaurus/pull/5423) docs: clarify using custom attributes for navbar link ([@lex111](https://github.com/lex111))\\n- [#5421](https://github.com/facebook/docusaurus/pull/5421) docs: add Indent to showcase ([@fouad](https://github.com/fouad))\\n- [#5405](https://github.com/facebook/docusaurus/pull/5405) docs: add Gotenberg to showcase ([@gulien](https://github.com/gulien))\\n- [#5406](https://github.com/facebook/docusaurus/pull/5406) docs: specify proper min Node.js version for Travis CI example ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5390](https://github.com/facebook/docusaurus/pull/5390) docs(v2): showcase BoxyHQ ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- [#5376](https://github.com/facebook/docusaurus/pull/5376) docs(v2): Update Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- [#5372](https://github.com/facebook/docusaurus/pull/5372) docs: remove docusaurus-preset-name from preset doc ([@slorber](https://github.com/slorber))\\n- [#5366](https://github.com/facebook/docusaurus/pull/5366) docs: Add drayman to showcase ([@jansivans](https://github.com/jansivans))\\n- [#5369](https://github.com/facebook/docusaurus/pull/5369) docs(v2): Add Nocalhost website to showcase page ([@neaped](https://github.com/neaped))\\n- [#5351](https://github.com/facebook/docusaurus/pull/5351) docs(website): bump announcement bar + include Twitter link + refactor site colors ([@slorber](https://github.com/slorber))\\n- [#5352](https://github.com/facebook/docusaurus/pull/5352) docs: update `docusaurus-plugin-sass` instructions ([@erickzhao](https://github.com/erickzhao))\\n- [#5332](https://github.com/facebook/docusaurus/pull/5332) docs(v2): add mdx-mermaid to resources ([@sjwall](https://github.com/sjwall))\\n- [#5331](https://github.com/facebook/docusaurus/pull/5331) docs: Changelog page should display TOC with releases ([@slorber](https://github.com/slorber))\\n- [#5329](https://github.com/facebook/docusaurus/pull/5329) docs: add Haochen to showcase page ([@HaochenQ](https://github.com/HaochenQ))\\n- [#5313](https://github.com/facebook/docusaurus/pull/5313) docs: try to make plugin/preset config less confusing ([@slorber](https://github.com/slorber))\\n- [#5296](https://github.com/facebook/docusaurus/pull/5296) docs: update canary doc ([@slorber](https://github.com/slorber))\\n- [#5219](https://github.com/facebook/docusaurus/pull/5219) docs: refactor API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5271](https://github.com/facebook/docusaurus/pull/5271) Add Plausible Analytics docs to showcase page ([@metmarkosaric](https://github.com/metmarkosaric))\\n- [#5283](https://github.com/facebook/docusaurus/pull/5283) docs: fix broken link to syncing tab choices section ([@lex111](https://github.com/lex111))\\n- [#5259](https://github.com/facebook/docusaurus/pull/5259) docs(v2): update Remotion website picture in showcase ([@JonnyBurger](https://github.com/JonnyBurger))\\n- [#5260](https://github.com/facebook/docusaurus/pull/5260) docs(v2): add Dart Code Metrics site to showcase page ([@incendial](https://github.com/incendial))\\n- [#5253](https://github.com/facebook/docusaurus/pull/5253) docs: Fix typo `2-resources.md` ([@forresst](https://github.com/forresst))\\n- [#5248](https://github.com/facebook/docusaurus/pull/5248) docs(v2): add docusaurus-prince-pdf to resources ([@sparanoid](https://github.com/sparanoid))\\n- [#5239](https://github.com/facebook/docusaurus/pull/5239) docs(v2): Add unmand site to showcase page ([@dbseal](https://github.com/dbseal))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5397](https://github.com/facebook/docusaurus/pull/5397) chore: rename docusaurus-2-website package + refactor scripts ([@slorber](https://github.com/slorber))\\n - [#5342](https://github.com/facebook/docusaurus/pull/5342) chore: fix e2e yarn berry tests ([@slorber](https://github.com/slorber))\\n - [#5328](https://github.com/facebook/docusaurus/pull/5328) refactor(website): convert website to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5336](https://github.com/facebook/docusaurus/pull/5336) chore: bump url-parse from 1.5.1 to 1.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#5312](https://github.com/facebook/docusaurus/pull/5312) fix: fix changelog page mdx import for i18n ([@slorber](https://github.com/slorber))\\n - [#5295](https://github.com/facebook/docusaurus/pull/5295) fix: fix canary release versions ([@slorber](https://github.com/slorber))\\n - [#5285](https://github.com/facebook/docusaurus/pull/5285) fix: fix canary version names ([@slorber](https://github.com/slorber))\\n - [#5269](https://github.com/facebook/docusaurus/pull/5269) misc: enable pt-BR + archive older versions ([@slorber](https://github.com/slorber))\\n - [#5237](https://github.com/facebook/docusaurus/pull/5237) chore: enable pt-BR i18n locale on staging ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5341](https://github.com/facebook/docusaurus/pull/5341) polish: bind key listener to light/dark toggle + a11y lint fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus`\\n - [#5347](https://github.com/facebook/docusaurus/pull/5347) chore(mdx-loader): migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#5335](https://github.com/facebook/docusaurus/pull/5335) refactor: better typing + remove unnecessary eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#5338](https://github.com/facebook/docusaurus/pull/5338) refactor(plugin-blog): style improvements in blogUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5256](https://github.com/facebook/docusaurus/pull/5256) chore: upgrade Infima to alpha.30 ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5315](https://github.com/facebook/docusaurus/pull/5315) refactor(init): share common files between templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5284](https://github.com/facebook/docusaurus/pull/5284) refactor: properly type docs version ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n\\n## Committers: 27\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- David Seal ([@dbseal](https://github.com/dbseal))\\n- Deepak Prabhakara ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- Dmitry Zhifarsky ([@incendial](https://github.com/incendial))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Federico Aloi ([@faloi](https://github.com/faloi))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fouad Matin ([@fouad](https://github.com/fouad))\\n- Garry ([@neaped](https://github.com/neaped))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- Isaac Philip ([@isaac-philip](https://github.com/isaac-philip))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jonny Burger ([@JonnyBurger](https://github.com/JonnyBurger))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Julien Neuhart ([@gulien](https://github.com/gulien))\\n- Marko Saric ([@metmarkosaric](https://github.com/metmarkosaric))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michal S\xe4nger ([@michalsanger](https://github.com/michalsanger))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tunghsiao Liu ([@sparanoid](https://github.com/sparanoid))\\n- Yan Ivan Evdokimov ([@jansivans](https://github.com/jansivans))\\n- [@HaochenQ](https://github.com/HaochenQ)\\n- wan-nyan-wan ([@wan-nyan-wan](https://github.com/wan-nyan-wan))"},{"id":"/2.0.0-beta.4","metadata":{"permalink":"/changelog/2.0.0-beta.4","source":"@site/changelog/source/2.0.0-beta.4.md","title":"2.0.0-beta.4","description":"New Feature","date":"2021-07-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonvasilev52","alias":"antonvasilev52","url":"https://github.com/antonvasilev52","imageURL":"https://github.com/antonvasilev52.png","key":"antonvasilev52","page":null},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},{"name":"Christian Flach","alias":"cmfcmf","url":"https://github.com/cmfcmf","imageURL":"https://github.com/cmfcmf.png","key":"cmfcmf","page":null},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},{"name":"David Zhao","alias":"davidzhao","url":"https://github.com/davidzhao","imageURL":"https://github.com/davidzhao.png","key":"davidzhao","page":null},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},{"name":"Dan Gebhardt","alias":"dgeb","url":"https://github.com/dgeb","imageURL":"https://github.com/dgeb.png","key":"dgeb","page":null},{"name":"Fran\xe7ois Massot","alias":"fmassot","url":"https://github.com/fmassot","imageURL":"https://github.com/fmassot.png","key":"fmassot","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Lennart Koopmann","alias":"lennartkoopmann","url":"https://github.com/lennartkoopmann","imageURL":"https://github.com/lennartkoopmann.png","key":"lennartkoopmann","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},{"name":"Mar\xe7al Junior","alias":"marssaljr","url":"https://github.com/marssaljr","imageURL":"https://github.com/marssaljr.png","key":"marssaljr","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Michel Weststrate","alias":"mweststrate","url":"https://github.com/mweststrate","imageURL":"https://github.com/mweststrate.png","key":"mweststrate","page":null},{"name":"Nazar","alias":"NazarStreletskyi","url":"https://github.com/NazarStreletskyi","imageURL":"https://github.com/NazarStreletskyi.png","key":"NazarStreletskyi","page":null},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},{"name":"Przemys\u0142aw Chojecki","alias":"pcho","url":"https://github.com/pcho","imageURL":"https://github.com/pcho.png","key":"pcho","page":null},{"name":"Philipp Muens","alias":"pmuens","url":"https://github.com/pmuens","imageURL":"https://github.com/pmuens.png","key":"pmuens","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Raz Luvaton","alias":"rluvaton","url":"https://github.com/rluvaton","imageURL":"https://github.com/rluvaton.png","key":"rluvaton","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},{"name":"tohid nateghi","alias":"tohidnateghi","url":"https://github.com/tohidnateghi","imageURL":"https://github.com/tohidnateghi.png","key":"tohidnateghi","page":null},{"name":"\u9648\u6768\u6587","alias":"wenerme","url":"https://github.com/wenerme","imageURL":"https://github.com/wenerme.png","key":"wenerme","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-07-28T20:00","authors":["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"nextItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4912](https://github.com/facebook/docusaurus/pull/4912) feat(v2): add back to top button ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5235](https://github.com/facebook/docusaurus/pull/5235) feat: docusaurus.new + improve StackBlitz playground integration ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5207](https://github.com/facebook/docusaurus/pull/5207) feat: multiple playground choices ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5232](https://github.com/facebook/docusaurus/pull/5232) fix(v2): blog should parse frontMatter.date even when time is present ([@wenerme](https://github.com/wenerme))\\n- `docusaurus-theme-classic`\\n - [#5230](https://github.com/facebook/docusaurus/pull/5230) fix(v2): remove top margin from first element inside doc article ([@lex111](https://github.com/lex111))\\n - [#5229](https://github.com/facebook/docusaurus/pull/5229) fix(v2): keep mobile TOC after hydration ([@lex111](https://github.com/lex111))\\n - [#5179](https://github.com/facebook/docusaurus/pull/5179) fix(v2): wrap dropdown item to missing li element + remove extra attributes ([@lex111](https://github.com/lex111))\\n - [#5183](https://github.com/facebook/docusaurus/pull/5183) fix(v2): pass all props to CodeBlock component ([@lex111](https://github.com/lex111))\\n - [#5176](https://github.com/facebook/docusaurus/pull/5176) fix(v2): Fix type for navlink label ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5172](https://github.com/facebook/docusaurus/pull/5172) fix(v2): hide mobile collapsible doc toc if no headings ([@slorber](https://github.com/slorber))\\n - [#5161](https://github.com/facebook/docusaurus/pull/5161) fix(v2): disable default behavior when click on collapsible item ([@lex111](https://github.com/lex111))\\n - [#5151](https://github.com/facebook/docusaurus/pull/5151) fix(v2): add missing french translations for mobile ([@forresst](https://github.com/forresst))\\n - [#5104](https://github.com/facebook/docusaurus/pull/5104) fix(v2): fix SkipToContent programmatic focus when updating querystring ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#5214](https://github.com/facebook/docusaurus/pull/5214) fix: upgrade Docsearch to avoid layout shift ([@slorber](https://github.com/slorber))\\n - [#5135](https://github.com/facebook/docusaurus/pull/5135) chore(v2): update @docsearch/react ([@shortcuts](https://github.com/shortcuts))\\n- `docusaurus`\\n - [#5204](https://github.com/facebook/docusaurus/pull/5204) fix: cli upgrade helper fail when no `package.dependencies` ([@mweststrate](https://github.com/mweststrate))\\n - [#5164](https://github.com/facebook/docusaurus/pull/5164) fix(v2): revert webpack.resolve.symlinks = false ([@slorber](https://github.com/slorber))\\n - [#5126](https://github.com/facebook/docusaurus/pull/5126) fix(v2): remove webpackConfig.resolve.symlinks: true ([@slorber](https://github.com/slorber))\\n - [#5110](https://github.com/facebook/docusaurus/pull/5110) fix(v2): Fix update-notifier not run at first and not notifying consistently ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#5199](https://github.com/facebook/docusaurus/pull/5199) fix(v2): Fix MDX docs being considered as partials when siteDir match the \\\\_ prefix convention ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#5185](https://github.com/facebook/docusaurus/pull/5185) fix(v2): add base URL to content attribute of head tags PWA ([@lex111](https://github.com/lex111))\\n - [#5169](https://github.com/facebook/docusaurus/pull/5169) refactor(v2): automatically add base URL to PWA head tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#5159](https://github.com/facebook/docusaurus/pull/5159) fix(v2): Fix Collapsible hydration layout shift ([@slorber](https://github.com/slorber))\\n - [#5146](https://github.com/facebook/docusaurus/pull/5146) fix(v2): improve work of useCollapsible hook with multiple clicks ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`\\n - [#5129](https://github.com/facebook/docusaurus/pull/5129) fix(v2): fix d.ts lint error ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5116](https://github.com/facebook/docusaurus/pull/5116) fix(v2): introduce useCollapsible to fix collapsible animation perf issues ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`\\n - [#5102](https://github.com/facebook/docusaurus/pull/5102) fix(v2): fix redirect plugin when trailingSlash=false for .html extension ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5228](https://github.com/facebook/docusaurus/pull/5228) refactor(v2): fix small typo in Russian translation ([@antonvasilev52](https://github.com/antonvasilev52))\\n - [#5222](https://github.com/facebook/docusaurus/pull/5222) chore(v2): update Infima to alpha 28 ([@lex111](https://github.com/lex111))\\n - [#5224](https://github.com/facebook/docusaurus/pull/5224) refactor(v2): update Russian translation ([@lex111](https://github.com/lex111))\\n - [#5217](https://github.com/facebook/docusaurus/pull/5217) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5171](https://github.com/facebook/docusaurus/pull/5171) refactor(v2): increase content area if blog sidebar is off ([@lex111](https://github.com/lex111))\\n - [#5154](https://github.com/facebook/docusaurus/pull/5154) refactor(v2): Hindi translation for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5145](https://github.com/facebook/docusaurus/pull/5145) refactor(v2): use Collapsible for mobile nav items ([@lex111](https://github.com/lex111))\\n - [#5138](https://github.com/facebook/docusaurus/pull/5138) refactor(v2): Update Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#5140](https://github.com/facebook/docusaurus/pull/5140) refactor(v2): bn translation improvements for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5139](https://github.com/facebook/docusaurus/pull/5139) feat(v2): complete Chinese code translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5118](https://github.com/facebook/docusaurus/pull/5118) refactor(v2): pt-BR translations improve semantic doc sidebar and tags ([@marssaljr](https://github.com/marssaljr))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#5215](https://github.com/facebook/docusaurus/pull/5215) refactor: make code block shadows consistent with new admonitions ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#5193](https://github.com/facebook/docusaurus/pull/5193) refactor: redesign admonitions/callouts/quotes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5168](https://github.com/facebook/docusaurus/pull/5168) refactor(v2): mobile dropdown navbar: expand when subitem become active ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#5236](https://github.com/facebook/docusaurus/pull/5236) docs: add Verdaccio.org to showcase ([@semoal](https://github.com/semoal))\\n- [#5218](https://github.com/facebook/docusaurus/pull/5218) docs(v2): remove vector.dev from showcase ([@lex111](https://github.com/lex111))\\n- [#5212](https://github.com/facebook/docusaurus/pull/5212) docs: mention Link can be used for external links ([@slorber](https://github.com/slorber))\\n- [#5210](https://github.com/facebook/docusaurus/pull/5210) docs(v2): Elaboration of raw-loader in markdown react component ([@pranabdas](https://github.com/pranabdas))\\n- [#5191](https://github.com/facebook/docusaurus/pull/5191) docs: user should restart docusaurus after adding prism additionalLanguage ([@tohidnateghi](https://github.com/tohidnateghi))\\n- [#5175](https://github.com/facebook/docusaurus/pull/5175) docs: update API docs on navbar behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5189](https://github.com/facebook/docusaurus/pull/5189) docs(v2): Add orbitjs site to showcase page ([@dgeb](https://github.com/dgeb))\\n- [#5177](https://github.com/facebook/docusaurus/pull/5177) docs(v2): add easyjwt to users ([@dbrrt](https://github.com/dbrrt))\\n- [#5187](https://github.com/facebook/docusaurus/pull/5187) docs(v2): Add quickwit to user.js and png. ([@fmassot](https://github.com/fmassot))\\n- [#5184](https://github.com/facebook/docusaurus/pull/5184) docs(v2): Add react-complex-tree to users.js ([@lukasbach](https://github.com/lukasbach))\\n- [#5178](https://github.com/facebook/docusaurus/pull/5178) docs(v2): Update tutorial link ([@slorber](https://github.com/slorber))\\n- [#5158](https://github.com/facebook/docusaurus/pull/5158) docs(v2): Update deploy with Qovery docs for V2 ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#5152](https://github.com/facebook/docusaurus/pull/5152) docs(v2): Indent code example to improve readability ([@rluvaton](https://github.com/rluvaton))\\n- [#5133](https://github.com/facebook/docusaurus/pull/5133) docs(v2): GIF format is not suported ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- [#5117](https://github.com/facebook/docusaurus/pull/5117) docs(v2): Add Prismatic docs page to showcase. ([@taylorreece](https://github.com/taylorreece))\\n- [#5115](https://github.com/facebook/docusaurus/pull/5115) docs(v2): Add LiveKit to showcase ([@davidzhao](https://github.com/davidzhao))\\n- [#5114](https://github.com/facebook/docusaurus/pull/5114) docs(v2): add Blink Shell Documentation to Showcase ([@pcho](https://github.com/pcho))\\n- [#5112](https://github.com/facebook/docusaurus/pull/5112) docs(v2): clarify how to disable edit links entirely ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- [#5113](https://github.com/facebook/docusaurus/pull/5113) docs(v2): Add CryptoDevHub to Showcase ([@pmuens](https://github.com/pmuens))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#5234](https://github.com/facebook/docusaurus/pull/5234) chore: Upgrade infima 29 ([@slorber](https://github.com/slorber))\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5223](https://github.com/facebook/docusaurus/pull/5223) chore: fix iframe background color in dark mode ([@lex111](https://github.com/lex111))\\n - [#5206](https://github.com/facebook/docusaurus/pull/5206) misc: add script to keep starters branch/repos up-to-date ([@slorber](https://github.com/slorber))\\n - [#5167](https://github.com/facebook/docusaurus/pull/5167) fix(v2): fix website PWA icon hrefs ([@slorber](https://github.com/slorber))\\n - [#5166](https://github.com/facebook/docusaurus/pull/5166) fix(v2): fix yarn clear command ([@slorber](https://github.com/slorber))\\n - [#5137](https://github.com/facebook/docusaurus/pull/5137) chore: upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#5111](https://github.com/facebook/docusaurus/pull/5111) misc: monitor site global data with build size bot ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5136](https://github.com/facebook/docusaurus/pull/5136) perf(v2): lazy sidebar categories / collapsibles, reduce html output / build times ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n\\n## Committers: 28\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- Christian Flach ([@cmfcmf](https://github.com/cmfcmf))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Dan Gebhardt ([@dgeb](https://github.com/dgeb))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- David Zhao ([@davidzhao](https://github.com/davidzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fran\xe7ois Massot ([@fmassot](https://github.com/fmassot))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lennart Koopmann ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Mar\xe7al Junior ([@marssaljr](https://github.com/marssaljr))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michel Weststrate ([@mweststrate](https://github.com/mweststrate))\\n- Nazar ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- Philipp Muens ([@pmuens](https://github.com/pmuens))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Przemys\u0142aw Chojecki ([@pcho](https://github.com/pcho))\\n- Raz Luvaton ([@rluvaton](https://github.com/rluvaton))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@antonvasilev52](https://github.com/antonvasilev52)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- tohid nateghi ([@tohidnateghi](https://github.com/tohidnateghi))\\n- \u9648\u6768\u6587 ([@wenerme](https://github.com/wenerme))"},{"id":"/2.0.0-beta.3","metadata":{"permalink":"/changelog/2.0.0-beta.3","source":"@site/changelog/source/2.0.0-beta.3.md","title":"2.0.0-beta.3","description":"New Feature","date":"2021-06-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adam Uhl\xed\u0159","alias":"AuHau","url":"https://github.com/AuHau","imageURL":"https://github.com/AuHau.png","key":"AuHau","page":null},{"name":"bperlmutter","alias":"bperlmutter","url":"https://github.com/bperlmutter","imageURL":"https://github.com/bperlmutter.png","key":"bperlmutter","page":null},{"name":"dirslashls","alias":"dirslashls","url":"https://github.com/dirslashls","imageURL":"https://github.com/dirslashls.png","key":"dirslashls","page":null},{"name":"Ayush das","alias":"iamayushdas","url":"https://github.com/iamayushdas","imageURL":"https://github.com/iamayushdas.png","key":"iamayushdas","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},{"name":"Danny Lin","alias":"kdrag0n","url":"https://github.com/kdrag0n","imageURL":"https://github.com/kdrag0n.png","key":"kdrag0n","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-30T20:00","authors":["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"nextItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#5092](https://github.com/facebook/docusaurus/pull/5092) feat(v2): add icon to external footer links ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5080](https://github.com/facebook/docusaurus/pull/5080) fix(v2): classic theme - semantic correct anchors links ([@AuHau](https://github.com/AuHau))\\n - [#5081](https://github.com/facebook/docusaurus/pull/5081) fix(v2): restore previous scroll position on back button click ([@lex111](https://github.com/lex111))\\n - [#5063](https://github.com/facebook/docusaurus/pull/5063) fix(v2): restore responsive menu ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5094](https://github.com/facebook/docusaurus/pull/5094) fix(v2): fix typos in swizzle command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5095](https://github.com/facebook/docusaurus/pull/5095) fix(v2): fix swizzle readComponent ([@slorber](https://github.com/slorber))\\n - [#5059](https://github.com/facebook/docusaurus/pull/5059) fix(v2): fix webpack SSG plugin error thrown due to new URL() / \\\\_\\\\_filename ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5097](https://github.com/facebook/docusaurus/pull/5097) fix(v2): fix useEffect infinite loop in blogOnly mode ([@slorber](https://github.com/slorber))\\n - [#5074](https://github.com/facebook/docusaurus/pull/5074) fix(v2): allow negative sidebar positions ([@kdrag0n](https://github.com/kdrag0n))\\n- `docusaurus-plugin-client-redirects`\\n - [#5093](https://github.com/facebook/docusaurus/pull/5093) fix(v2): redirect from should work with trailingSlash: true ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#5085](https://github.com/facebook/docusaurus/pull/5085) fix(v2): redirect plugin should emit redirect files with lower precedence than redirect target ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus`\\n - [#5082](https://github.com/facebook/docusaurus/pull/5082) fix(v2): never remove trailing slash from site root like \'/baseUrl/\' ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#5068](https://github.com/facebook/docusaurus/pull/5068) fix(v2): sitemap should respect the global trailingSlash config option. ([@taylorreece](https://github.com/taylorreece))\\n- `docusaurus-types`\\n - [#5058](https://github.com/facebook/docusaurus/pull/5058) fix(v2): fix bad @docusaurus/types Plugin type generics ([@jsamr](https://github.com/jsamr))\\n\\n## :memo: Documentation\\n\\n- [#5064](https://github.com/facebook/docusaurus/pull/5064) docs(v2): Rewrite markdown images section ([@ramiy](https://github.com/ramiy))\\n- [#5086](https://github.com/facebook/docusaurus/pull/5086) docs(v2): Add SQL Frames to the showcase ([@dirslashls](https://github.com/dirslashls))\\n- [#5073](https://github.com/facebook/docusaurus/pull/5073) docs(v2): update installation docs ([@iamayushdas](https://github.com/iamayushdas))\\n- [#5061](https://github.com/facebook/docusaurus/pull/5061) docs(v2:) Divide `markdown-features/code-blocks` to smaller sections ([@ramiy](https://github.com/ramiy))\\n- [#5066](https://github.com/facebook/docusaurus/pull/5066) docs(v2): correct typo ([@bperlmutter](https://github.com/bperlmutter))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`\\n - [#5067](https://github.com/facebook/docusaurus/pull/5067) chore: unstable yarn.lock ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5057](https://github.com/facebook/docusaurus/pull/5057) chore(v2): upgrade examples to beta.2 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Adam Uhl\xed\u0159 ([@AuHau](https://github.com/AuHau))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ayush das ([@iamayushdas](https://github.com/iamayushdas))\\n- Danny Lin ([@kdrag0n](https://github.com/kdrag0n))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@bperlmutter](https://github.com/bperlmutter)\\n- [@dirslashls](https://github.com/dirslashls)"},{"id":"/2.0.0-beta.2","metadata":{"permalink":"/changelog/2.0.0-beta.2","source":"@site/changelog/source/2.0.0-beta.2.md","title":"2.0.0-beta.2","description":"New Feature","date":"2021-06-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Eshan Tripathi","alias":"eshantri","url":"https://github.com/eshantri","imageURL":"https://github.com/eshantri.png","key":"eshantri","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},{"name":"Manuel Meurer","alias":"manuelmeurer","url":"https://github.com/manuelmeurer","imageURL":"https://github.com/manuelmeurer.png","key":"manuelmeurer","page":null},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Tomasz Papiernik","alias":"tomekpapiernik","url":"https://github.com/tomekpapiernik","imageURL":"https://github.com/tomekpapiernik.png","key":"tomekpapiernik","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-24T20:00","authors":["eshantri","felipecrs","Josh-Cena","jsamr","lex111","loozhengyuan","manuelmeurer","ramiy","slorber","teikjun","tomekpapiernik"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"nextItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#5037](https://github.com/facebook/docusaurus/pull/5037) feat(v2): plugins injectHtmlTags + configureWebpack should receive content loaded ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-types`, `docusaurus`\\n - [#5054](https://github.com/facebook/docusaurus/pull/5054) fix(v2): allow undefined favicon ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5048](https://github.com/facebook/docusaurus/pull/5048) fix(v2): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-theme-classic`\\n - [#5050](https://github.com/facebook/docusaurus/pull/5050) fix(v2): add shadow to skip link on focus only ([@lex111](https://github.com/lex111))\\n - [#5035](https://github.com/facebook/docusaurus/pull/5035) fix(v2): fix some docs container/sidebar layout issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#5047](https://github.com/facebook/docusaurus/pull/5047) fix(v2): Fix Webpack persistent caching (evict on swizzle/alias/config change) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5040](https://github.com/facebook/docusaurus/pull/5040) fix(v2): Fix announcementBar layout shifts ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5034](https://github.com/facebook/docusaurus/pull/5034) fix(v2): dev css modules classnames should include filename ([@slorber](https://github.com/slorber))\\n - [#5016](https://github.com/facebook/docusaurus/pull/5016) fix(v2): add missing quote in build command output ([@manuelmeurer](https://github.com/manuelmeurer))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5023](https://github.com/facebook/docusaurus/pull/5023) fix(v2): ignore hash changes in useChangeRoute hook ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5032](https://github.com/facebook/docusaurus/pull/5032) fix(v2): less strict blog/docs uri frontmatter validation ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4993](https://github.com/facebook/docusaurus/pull/4993) style(v2): reduce number of ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5017](https://github.com/facebook/docusaurus/pull/5017) chore(v2): remove badge for v1 tests ([@loozhengyuan](https://github.com/loozhengyuan))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5049](https://github.com/facebook/docusaurus/pull/5049) docs(v2): Fix Gatsby theme name for docs site - Docz ([@ramiy](https://github.com/ramiy))\\n - [#5030](https://github.com/facebook/docusaurus/pull/5030) docs(v2): typo in deployment.mdx ([@eshantri](https://github.com/eshantri))\\n - [#5022](https://github.com/facebook/docusaurus/pull/5022) docs(v2): Add React Native Render HTML site to showcase page ([@jsamr](https://github.com/jsamr))\\n - [#5027](https://github.com/facebook/docusaurus/pull/5027) docs(v2): Add Buddy to deployment doc ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n - [#5021](https://github.com/facebook/docusaurus/pull/5021) docs(v2): fix incorrect anchor links in website ([@teikjun](https://github.com/teikjun))\\n - [#5007](https://github.com/facebook/docusaurus/pull/5007) docs(v2): wrap mdx usage in mdx-code-block ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5033](https://github.com/facebook/docusaurus/pull/5033) docs(v2): GH pages: recommend using trailingSlash ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- [#5005](https://github.com/facebook/docusaurus/pull/5005) chore: add archived versions system + archive alpha.73-75 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Eshan Tripathi ([@eshantri](https://github.com/eshantri))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Manuel Meurer ([@manuelmeurer](https://github.com/manuelmeurer))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tomasz Papiernik ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))"},{"id":"/2.0.0-beta.1","metadata":{"permalink":"/changelog/2.0.0-beta.1","source":"@site/changelog/source/2.0.0-beta.1.md","title":"2.0.0-beta.1","description":"New Feature","date":"2021-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonygibbs","alias":"antonygibbs","url":"https://github.com/antonygibbs","imageURL":"https://github.com/antonygibbs.png","key":"antonygibbs","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},{"name":"Christopher Hsieh","alias":"Christopher-Hsieh","url":"https://github.com/Christopher-Hsieh","imageURL":"https://github.com/Christopher-Hsieh.png","key":"Christopher-Hsieh","page":null},{"name":"Ben Rometsch","alias":"dabeeeenster","url":"https://github.com/dabeeeenster","imageURL":"https://github.com/dabeeeenster.png","key":"dabeeeenster","page":null},{"name":"e271828-","alias":"e271828-","url":"https://github.com/e271828-","imageURL":"https://github.com/e271828-.png","key":"e271828-","page":null},{"name":"fgatti675","alias":"fgatti675","url":"https://github.com/fgatti675","imageURL":"https://github.com/fgatti675.png","key":"fgatti675","page":null},{"name":"Tina\xebl Devresse","alias":"HunteRoi","url":"https://github.com/HunteRoi","imageURL":"https://github.com/HunteRoi.png","key":"HunteRoi","page":null},{"name":"Jonathan Mazin","alias":"jmazin","url":"https://github.com/jmazin","imageURL":"https://github.com/jmazin.png","key":"jmazin","page":null},{"name":"Joel","alias":"Joelpo","url":"https://github.com/Joelpo","imageURL":"https://github.com/Joelpo.png","key":"Joelpo","page":null},{"name":"Jon Barker","alias":"jonbarker68","url":"https://github.com/jonbarker68","imageURL":"https://github.com/jonbarker68.png","key":"jonbarker68","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Louis Gallet","alias":"l0u1sg","url":"https://github.com/l0u1sg","imageURL":"https://github.com/l0u1sg.png","key":"l0u1sg","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},{"name":"Lior Heber","alias":"liorheber","url":"https://github.com/liorheber","imageURL":"https://github.com/liorheber.png","key":"liorheber","page":null},{"name":"Louis Grenard","alias":"louistiti","url":"https://github.com/louistiti","imageURL":"https://github.com/louistiti.png","key":"louistiti","page":null},{"name":"Massibian","alias":"Massibian","url":"https://github.com/Massibian","imageURL":"https://github.com/Massibian.png","key":"Massibian","page":null},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},{"name":"Pratyay Banerjee","alias":"Neilblaze","url":"https://github.com/Neilblaze","imageURL":"https://github.com/Neilblaze.png","key":"Neilblaze","page":null},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},{"name":"phwt.smwt","alias":"phwt","url":"https://github.com/phwt","imageURL":"https://github.com/phwt.png","key":"phwt","page":null},{"name":"Pedro Queiroz","alias":"pmqueiroz","url":"https://github.com/pmqueiroz","imageURL":"https://github.com/pmqueiroz.png","key":"pmqueiroz","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"PsychTech","alias":"PsychTechApS","url":"https://github.com/PsychTechApS","imageURL":"https://github.com/PsychTechApS.png","key":"PsychTechApS","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"silva-nick","alias":"silva-nick","url":"https://github.com/silva-nick","imageURL":"https://github.com/silva-nick.png","key":"silva-nick","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"mg","alias":"tiny-dancer","url":"https://github.com/tiny-dancer","imageURL":"https://github.com/tiny-dancer.png","key":"tiny-dancer","page":null},{"name":"Lucas Correia","alias":"tsirlucas","url":"https://github.com/tsirlucas","imageURL":"https://github.com/tsirlucas.png","key":"tsirlucas","page":null},{"name":"Fardeen Panjwani","alias":"wise-introvert","url":"https://github.com/wise-introvert","imageURL":"https://github.com/wise-introvert.png","key":"wise-introvert","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-18T20:00","authors":["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"nextItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#4982](https://github.com/facebook/docusaurus/pull/4982) feat(v2): add docs pagination_label frontmatter ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4949](https://github.com/facebook/docusaurus/pull/4949) feat(v2): add icon to external navbar links ([@lex111](https://github.com/lex111))\\n - [#4939](https://github.com/facebook/docusaurus/pull/4939) feat(v2): theme default translations Bengali ([@Neilblaze](https://github.com/Neilblaze))\\n - [#4811](https://github.com/facebook/docusaurus/pull/4811) feat(v2): Add hebrew translations ([@slorber](https://github.com/slorber))\\n - [#4798](https://github.com/facebook/docusaurus/pull/4798) feat(v2): add theme Danish translation ([@PsychTechApS](https://github.com/PsychTechApS))\\n- `docusaurus-init`\\n - [#4968](https://github.com/facebook/docusaurus/pull/4968) feat(v2): add code block theming in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4908](https://github.com/facebook/docusaurus/pull/4908) feat(v2): add trailingSlash config option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4796](https://github.com/facebook/docusaurus/pull/4796) feat(v2): exhaustive docs frontmatter schema ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-types`, `docusaurus`\\n - [#4618](https://github.com/facebook/docusaurus/pull/4618) feat(v2): allow config plugins as functions or [function,options] ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils-validation`\\n - [#4759](https://github.com/facebook/docusaurus/pull/4759) feat(v2): exhaustive BlogPostFrontMatter schema validation ([@nam-hle](https://github.com/nam-hle))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5001](https://github.com/facebook/docusaurus/pull/5001) chore(v2): update Infima to alpha 26 ([@lex111](https://github.com/lex111))\\n - [#4986](https://github.com/facebook/docusaurus/pull/4986) fix(v2): fix UX for docsVersionDropdown on mobile for single version ([@slorber](https://github.com/slorber))\\n - [#4980](https://github.com/facebook/docusaurus/pull/4980) fix(v2): make proper data type for prependBaseUrlToHref field ([@lex111](https://github.com/lex111))\\n - [#4943](https://github.com/facebook/docusaurus/pull/4943) fix(v2): improve accessibility of code blocks ([@lex111](https://github.com/lex111))\\n - [#4917](https://github.com/facebook/docusaurus/pull/4917) fix(v2): tidy up Markdown page layout ([@lex111](https://github.com/lex111))\\n - [#4906](https://github.com/facebook/docusaurus/pull/4906) fix(v2): fix minor a11y issues ([@lex111](https://github.com/lex111))\\n - [#4900](https://github.com/facebook/docusaurus/pull/4900) fix(v2): adjust margin after content title ([@lex111](https://github.com/lex111))\\n - [#4855](https://github.com/facebook/docusaurus/pull/4855) chore(v2): update infima to alpha 24 ([@lex111](https://github.com/lex111))\\n - [#4819](https://github.com/facebook/docusaurus/pull/4819) fix(v2): Amend Hebrew translations ([@liorheber](https://github.com/liorheber))\\n - [#4815](https://github.com/facebook/docusaurus/pull/4815) fix(v2): Fix Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#4792](https://github.com/facebook/docusaurus/pull/4792) fix(v2): fix minor a11y issue with headings ([@lex111](https://github.com/lex111))\\n - [#4793](https://github.com/facebook/docusaurus/pull/4793) fix(v2): unbreak enhanced width of doc item wrapper ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-utils-common`\\n - [#5000](https://github.com/facebook/docusaurus/pull/5000) fix(v2): fix theme array deduplication bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#4988](https://github.com/facebook/docusaurus/pull/4988) fix(v2): redirect plugin should use siteConfig.trailingSlash ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#4983](https://github.com/facebook/docusaurus/pull/4983) fix(v2): always use UTC when dealing with blog dates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4962](https://github.com/facebook/docusaurus/pull/4962) fix(v2): respect base url in RSS feeds ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4985](https://github.com/facebook/docusaurus/pull/4985) fix(v2): navbar doc item fallback: search doc in lastVersion ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#4964](https://github.com/facebook/docusaurus/pull/4964) fix(v2): avoid duplicated imports in npm2yarn plugin ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#4970](https://github.com/facebook/docusaurus/pull/4970) fix(v2): sidebar_label should be used to compute next/previous button labels ([@slorber](https://github.com/slorber))\\n - [#4861](https://github.com/facebook/docusaurus/pull/4861) fix(v2): allow relative sidebar path resolution in docs:version command ([@lex111](https://github.com/lex111))\\n - [#4859](https://github.com/facebook/docusaurus/pull/4859) fix(v2): use frontmatter title at first for paginated links ([@lex111](https://github.com/lex111))\\n - [#4775](https://github.com/facebook/docusaurus/pull/4775) fix(v2): improve dx sidebar config, ability to have no sidebars file ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4950](https://github.com/facebook/docusaurus/pull/4950) fix(v2): sitemap plugin should handle siteConfig.trailingSlash automatically ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4924](https://github.com/facebook/docusaurus/pull/4924) fix(v2): respect baseUrl in serving command ([@lex111](https://github.com/lex111))\\n - [#4935](https://github.com/facebook/docusaurus/pull/4935) fix(v2): render children in BrowserOnly after client is ready ([@lex111](https://github.com/lex111))\\n - [#4894](https://github.com/facebook/docusaurus/pull/4894) fix(v2): escape HTML entities in user tags attributes ([@lex111](https://github.com/lex111))\\n - [#4789](https://github.com/facebook/docusaurus/pull/4789) fix(v2): transpile libs with too recent syntax with babel ([@slorber](https://github.com/slorber))\\n - [#4784](https://github.com/facebook/docusaurus/pull/4784) fix(v2): update notifier should never suggest to downgrade ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4882](https://github.com/facebook/docusaurus/pull/4882) fix(v2): fix contentTitle issues when markdown h1 title contains code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4862](https://github.com/facebook/docusaurus/pull/4862) fix(v2): remove Markdown heading id from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4871](https://github.com/facebook/docusaurus/pull/4871) fix(v2): unbreak adding of custom HTML metadatas ([@lex111](https://github.com/lex111))\\n - [#4797](https://github.com/facebook/docusaurus/pull/4797) fix(v2): do not focus on skip link if page refreshed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4856](https://github.com/facebook/docusaurus/pull/4856) fix(v2): adjust padding when custom search box location ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4830](https://github.com/facebook/docusaurus/pull/4830) fix(v2): pin prism-react-renderer version to 1.1.1 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#4806](https://github.com/facebook/docusaurus/pull/4806) chore(v2): update sharp to 0.28.2 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4995](https://github.com/facebook/docusaurus/pull/4995) refactor(v2): reduce top padding in doc content container ([@lex111](https://github.com/lex111))\\n - [#4918](https://github.com/facebook/docusaurus/pull/4918) refactor(v2): readjust footer of blog item ([@lex111](https://github.com/lex111))\\n - [#4959](https://github.com/facebook/docusaurus/pull/4959) refactor(v2): minor cleanups ([@lex111](https://github.com/lex111))\\n - [#4945](https://github.com/facebook/docusaurus/pull/4945) refactor(v2): remove extra padding from doc item container ([@lex111](https://github.com/lex111))\\n - [#4940](https://github.com/facebook/docusaurus/pull/4940) refactor(v2): improve semantic doc sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4961](https://github.com/facebook/docusaurus/pull/4961) refactor(v2): improve semantic blog sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4903](https://github.com/facebook/docusaurus/pull/4903) refactor(v2): make doc item layout more semantic ([@lex111](https://github.com/lex111))\\n - [#4877](https://github.com/facebook/docusaurus/pull/4877) refactor(v2): reduce vertical space in doc content container ([@lex111](https://github.com/lex111))\\n - [#4914](https://github.com/facebook/docusaurus/pull/4914) refactor(v2): use SVG for external link icon ([@lex111](https://github.com/lex111))\\n - [#4916](https://github.com/facebook/docusaurus/pull/4916) refactor(v2): replace strong with b in UI components ([@lex111](https://github.com/lex111))\\n - [#4926](https://github.com/facebook/docusaurus/pull/4926) refactor(v2): hide decorative SVGs from screen readers ([@lex111](https://github.com/lex111))\\n - [#4865](https://github.com/facebook/docusaurus/pull/4865) refactor(v2): make little better doc update block UI ([@lex111](https://github.com/lex111))\\n - [#4795](https://github.com/facebook/docusaurus/pull/4795) refactor(v2): remove transition on body element ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4989](https://github.com/facebook/docusaurus/pull/4989) refactor(v2): blog/docs: add more context in error messages ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4979](https://github.com/facebook/docusaurus/pull/4979) refactor(v2): cleanup console output ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#4977](https://github.com/facebook/docusaurus/pull/4977) polish(v2): url-subpath config validation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4969](https://github.com/facebook/docusaurus/pull/4969) refactor(v2): include path in error about non-existent ids ([@lex111](https://github.com/lex111))\\n - [#4863](https://github.com/facebook/docusaurus/pull/4863) refactor(v2): remove sidebar_label filed from doc metadata file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#4907](https://github.com/facebook/docusaurus/pull/4907) refactor(v2): remove type attribute from link and script tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#4919](https://github.com/facebook/docusaurus/pull/4919) refactor(v2): improve markup and styling on search page ([@lex111](https://github.com/lex111))\\n - [#4867](https://github.com/facebook/docusaurus/pull/4867) chore(v2): update @docsearch/react ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#4905](https://github.com/facebook/docusaurus/pull/4905) refactor(v2): do not generate RSS files for empty feed ([@lex111](https://github.com/lex111))\\n - [#4860](https://github.com/facebook/docusaurus/pull/4860) refactor(v2): use aliased path for blog list sidebar file ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4870](https://github.com/facebook/docusaurus/pull/4870) refactor(v2): add exception handling if external command is fails ([@lex111](https://github.com/lex111))\\n - [#4875](https://github.com/facebook/docusaurus/pull/4875) refactor(v2): make even better SSR error notify and add tip ([@lex111](https://github.com/lex111))\\n - [#4866](https://github.com/facebook/docusaurus/pull/4866) refactor(v2): output URL to console only if it has changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#4814](https://github.com/facebook/docusaurus/pull/4814) refactor(v2): purify normalizeUrl ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4987](https://github.com/facebook/docusaurus/pull/4987) docs(v2): document canary releases ([@slorber](https://github.com/slorber))\\n - [#4981](https://github.com/facebook/docusaurus/pull/4981) docs(v2): minor tweaks ([@lex111](https://github.com/lex111))\\n - [#4976](https://github.com/facebook/docusaurus/pull/4976) docs(v2): mention to install the algolia package in search doc ([@slorber](https://github.com/slorber))\\n - [#4953](https://github.com/facebook/docusaurus/pull/4953) docs(v2): add Flagsmith to showcase ([@dabeeeenster](https://github.com/dabeeeenster))\\n - [#4942](https://github.com/facebook/docusaurus/pull/4942) docs(v2): add info about `DefaultValue` prop in `Tabs` ([@ArtFlag](https://github.com/ArtFlag))\\n - [#4898](https://github.com/facebook/docusaurus/pull/4898) docs(v2): add ClarityChallenge to showcase ([@jonbarker68](https://github.com/jonbarker68))\\n - [#4896](https://github.com/facebook/docusaurus/pull/4896) docs(v2): fix incorrect link to plugin-ideal-image ([@phwt](https://github.com/phwt))\\n - [#4893](https://github.com/facebook/docusaurus/pull/4893) docs(v2): presets: fix typo in bootstrap preset ([@silva-nick](https://github.com/silva-nick))\\n - [#4887](https://github.com/facebook/docusaurus/pull/4887) docs(v2): Add Aide Jeune website to Docusaurus site showcase ([@l0u1sg](https://github.com/l0u1sg))\\n - [#4821](https://github.com/facebook/docusaurus/pull/4821) docs(v2): New doc page for math equations ([@pranabdas](https://github.com/pranabdas))\\n - [#4885](https://github.com/facebook/docusaurus/pull/4885) docs(v2): v2 migration guide: mention Algolia config update ([@slorber](https://github.com/slorber))\\n - [#4876](https://github.com/facebook/docusaurus/pull/4876) docs(v2): update steps in the github-actions section ([@wise-introvert](https://github.com/wise-introvert))\\n - [#4880](https://github.com/facebook/docusaurus/pull/4880) docs(v2): grammar typo in migration-overview.md ([@jmazin](https://github.com/jmazin))\\n - [#4879](https://github.com/facebook/docusaurus/pull/4879) docs(v2): Added FireCMS to the showcase ([@fgatti675](https://github.com/fgatti675))\\n - [#4849](https://github.com/facebook/docusaurus/pull/4849) docs(v2): fix Java syntax highlight in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4818](https://github.com/facebook/docusaurus/pull/4818) docs(v2): add mr-pdf to resources ([@antonygibbs](https://github.com/antonygibbs))\\n - [#4835](https://github.com/facebook/docusaurus/pull/4835) docs(v2): fix grammar typo on Creating pages ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n - [#4837](https://github.com/facebook/docusaurus/pull/4837) docs(v2): fix missing closing bracket ([@pmqueiroz](https://github.com/pmqueiroz))\\n - [#4820](https://github.com/facebook/docusaurus/pull/4820) docs(v2): Fix typo in doc: sidebar.md ([@pranabdas](https://github.com/pranabdas))\\n - [#4813](https://github.com/facebook/docusaurus/pull/4813) docs(v2): fix css snipped with missing color ([@slorber](https://github.com/slorber))\\n - [#4803](https://github.com/facebook/docusaurus/pull/4803) docs(v2): Add i18n tag and fix typo ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4786](https://github.com/facebook/docusaurus/pull/4786) docs(v2): Add tinaeldevresse.eu to Docusaurus\' gallery ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4780](https://github.com/facebook/docusaurus/pull/4780) docs(v2): remove docs for alpha 71 + 72 ([@slorber](https://github.com/slorber))\\n - [#4779](https://github.com/facebook/docusaurus/pull/4779) docs(v2): beta blog post edits ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4973](https://github.com/facebook/docusaurus/pull/4973) docs(v2): replace `diff` codeblocks with line highlight ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4756](https://github.com/facebook/docusaurus/pull/4756) docs(v2): Docusaurus 2 beta blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4994](https://github.com/facebook/docusaurus/pull/4994) misc: more issue template improvements ([@slorber](https://github.com/slorber))\\n - [#4951](https://github.com/facebook/docusaurus/pull/4951) misc: disable google-gtag plugin in Netlify deploys ([@lex111](https://github.com/lex111))\\n - [#4901](https://github.com/facebook/docusaurus/pull/4901) misc: optimize showcase images ([@lex111](https://github.com/lex111))\\n - [#4897](https://github.com/facebook/docusaurus/pull/4897) chore: fail CI if yarn.lock is modified on install ([@slorber](https://github.com/slorber))\\n - [#4858](https://github.com/facebook/docusaurus/pull/4858) chore(v2): add external link to community sidebar ([@lex111](https://github.com/lex111))\\n - [#4889](https://github.com/facebook/docusaurus/pull/4889) misc: issue template config typo ([@slorber](https://github.com/slorber))\\n - [#4886](https://github.com/facebook/docusaurus/pull/4886) misc: add github issue template config ([@slorber](https://github.com/slorber))\\n - [#4878](https://github.com/facebook/docusaurus/pull/4878) misc: improve bug report issue template ([@lex111](https://github.com/lex111))\\n - [#4791](https://github.com/facebook/docusaurus/pull/4791) chore: fix canary version name ([@slorber](https://github.com/slorber))\\n - [#4777](https://github.com/facebook/docusaurus/pull/4777) chore: regenerate examples on 2.0.0-beta.0 ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus`\\n - [#4944](https://github.com/facebook/docusaurus/pull/4944) chore: lockfile cleanup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`\\n - [#4902](https://github.com/facebook/docusaurus/pull/4902) chore: remove docusaurus v1 from master branch (moved to docusaurus-v1 branch) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-ideal-image`\\n - [#4915](https://github.com/facebook/docusaurus/pull/4915) chore(v2): bump react-waypoint from 9.0.2 to 10.1.0 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4834](https://github.com/facebook/docusaurus/pull/4834) chore(v2): unlock prism-react-renderer version ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus`\\n - [#4833](https://github.com/facebook/docusaurus/pull/4833) chore(v2): bump cssnano packages ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4816](https://github.com/facebook/docusaurus/pull/4816) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4790](https://github.com/facebook/docusaurus/pull/4790) chore(v2): TypeScript, use isolatedModules ([@slorber](https://github.com/slorber))\\n\\n## Committers: 31\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Ben Rometsch ([@dabeeeenster](https://github.com/dabeeeenster))\\n- Christopher Hsieh ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n- Fardeen Panjwani ([@wise-introvert](https://github.com/wise-introvert))\\n- Joel ([@Joelpo](https://github.com/Joelpo))\\n- Jon Barker ([@jonbarker68](https://github.com/jonbarker68))\\n- Jonathan Mazin ([@jmazin](https://github.com/jmazin))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lior Heber ([@liorheber](https://github.com/liorheber))\\n- Louis Gallet ([@l0u1sg](https://github.com/l0u1sg))\\n- Louis Grenard ([@louistiti](https://github.com/louistiti))\\n- Lucas Correia ([@tsirlucas](https://github.com/tsirlucas))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Pedro Queiroz ([@pmqueiroz](https://github.com/pmqueiroz))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Pratyay Banerjee ([@Neilblaze](https://github.com/Neilblaze))\\n- PsychTech ([@PsychTechApS](https://github.com/PsychTechApS))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tina\xebl Devresse ([@HunteRoi](https://github.com/HunteRoi))\\n- [@Massibian](https://github.com/Massibian)\\n- [@antonygibbs](https://github.com/antonygibbs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@e271828-](https://github.com/e271828-)\\n- [@fgatti675](https://github.com/fgatti675)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- [@silva-nick](https://github.com/silva-nick)\\n- mg ([@tiny-dancer](https://github.com/tiny-dancer))\\n- phwt.smwt ([@phwt](https://github.com/phwt))"},{"id":"/2.0.0-beta.0","metadata":{"permalink":"/changelog/2.0.0-beta.0","source":"@site/changelog/source/2.0.0-beta.0.md","title":"2.0.0-beta.0","description":"Read the 2.0.0 beta blog post!","date":"2021-05-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chris Owen","alias":"ChrisOwen101","url":"https://github.com/ChrisOwen101","imageURL":"https://github.com/ChrisOwen101.png","key":"ChrisOwen101","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Sergio Rafael Gianazza","alias":"gianu","url":"https://github.com/gianu","imageURL":"https://github.com/gianu.png","key":"gianu","page":null},{"name":"Joel Hans","alias":"joelhans","url":"https://github.com/joelhans","imageURL":"https://github.com/joelhans.png","key":"joelhans","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a","alias":"KostyaTretyak","url":"https://github.com/KostyaTretyak","imageURL":"https://github.com/KostyaTretyak.png","key":"KostyaTretyak","page":null},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},{"name":"Rodrigo Moreno","alias":"rodmoreno","url":"https://github.com/rodmoreno","imageURL":"https://github.com/rodmoreno.png","key":"rodmoreno","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ian Hornik","alias":"yiliansource","url":"https://github.com/yiliansource","imageURL":"https://github.com/yiliansource.png","key":"yiliansource","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-05-12T20:00","authors":["ChrisOwen101","DigiPie","forresst","gianu","joelhans","Josh-Cena","KostyaTretyak","nam-hle","rodmoreno","slorber","yiliansource"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"nextItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nRead the [2.0.0 beta blog post](https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta)!\\n\\n**Note**: this first beta release does not contain any new major feature. We are removing the alpha label, as we are confident Docusaurus 2 is stable enough.\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4762](https://github.com/facebook/docusaurus/pull/4762) feat(v2): add es translations for docusaurus-theme-classic ([@rodmoreno](https://github.com/rodmoreno))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4750](https://github.com/facebook/docusaurus/pull/4750) fix(v2): improve french translation for theme-classic ([@forresst](https://github.com/forresst))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#4736](https://github.com/facebook/docusaurus/pull/4736) fix(v2): fix encoding of markdown image/file inline file-loaders ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4735](https://github.com/facebook/docusaurus/pull/4735) fix(v2): markdown title parser should ignore all forms of MDX import statements ([@nam-hle](https://github.com/nam-hle))\\n - [#4729](https://github.com/facebook/docusaurus/pull/4729) fix(v2): optimize markdown parser regex (Closes [#4726](https://github.com/facebook/docusaurus/issues/4726)) ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- [#4770](https://github.com/facebook/docusaurus/pull/4770) docs(v2): Improve intro doc ([@slorber](https://github.com/slorber))\\n- [#4773](https://github.com/facebook/docusaurus/pull/4773) docs(v2): fix i18n doc: bad i18n page plugin path in code sample ([@KostyaTretyak](https://github.com/KostyaTretyak))\\n- [#4758](https://github.com/facebook/docusaurus/pull/4758) docs(v2): add browsers support documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4757](https://github.com/facebook/docusaurus/pull/4757) docs(v2): Add Netdata to showcase ([@joelhans](https://github.com/joelhans))\\n- [#4754](https://github.com/facebook/docusaurus/pull/4754) docs(v2): fix Jest showcase screenshot ([@slorber](https://github.com/slorber))\\n- [#4747](https://github.com/facebook/docusaurus/pull/4747) docs(v2): Update showcase page ([@slorber](https://github.com/slorber))\\n- [#4734](https://github.com/facebook/docusaurus/pull/4734) docs(v2): Added MediaMachine.io to showcase ([@gianu](https://github.com/gianu))\\n- [#4731](https://github.com/facebook/docusaurus/pull/4731) docs(v2): add CodeYourFuture to showcase ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- [#4703](https://github.com/facebook/docusaurus/pull/4703) docs(v2): specify google-analytics and gtag plugins ([@yiliansource](https://github.com/yiliansource))\\n- [#4727](https://github.com/facebook/docusaurus/pull/4727) docs(v2): fix doc lint ([@slorber](https://github.com/slorber))\\n- [#4725](https://github.com/facebook/docusaurus/pull/4725) docs(v2): emphasize subset of markdown supported languages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4711](https://github.com/facebook/docusaurus/pull/4711) docs(v2): showcase personal site evantay ([@DigiPie](https://github.com/DigiPie))\\n\\n## :house: Internal\\n\\n- [#4746](https://github.com/facebook/docusaurus/pull/4746) chore(v2): attempt to fix crowdin dl again ([@slorber](https://github.com/slorber))\\n- [#4743](https://github.com/facebook/docusaurus/pull/4743) chore(v2): fix prod deployment due to bad image path ([@slorber](https://github.com/slorber))\\n- [#4740](https://github.com/facebook/docusaurus/pull/4740) chore(v2): delay i18n-staging deployment to avoid Crowdin 409 errors ([@slorber](https://github.com/slorber))\\n- [#4739](https://github.com/facebook/docusaurus/pull/4739) chore(v2): Fix Crowdin 409 issues in CI ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Chris Owen ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ian Hornik ([@yiliansource](https://github.com/yiliansource))\\n- Joel Hans ([@joelhans](https://github.com/joelhans))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Rodrigo Moreno ([@rodmoreno](https://github.com/rodmoreno))\\n- Sergio Rafael Gianazza ([@gianu](https://github.com/gianu))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a ([@KostyaTretyak](https://github.com/KostyaTretyak))"},{"id":"/2.0.0-alpha.75","metadata":{"permalink":"/changelog/2.0.0-alpha.75","source":"@site/changelog/source/2.0.0-alpha.75.md","title":"2.0.0-alpha.75","description":"Breaking Change","date":"2021-04-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Geoffroy Empain","alias":"gempain","url":"https://github.com/gempain","imageURL":"https://github.com/gempain.png","key":"gempain","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tommy Chen","alias":"tommy351","url":"https://github.com/tommy351","imageURL":"https://github.com/tommy351.png","key":"tommy351","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-30T20:00","authors":["gempain","RDIL","slorber","tommy351"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"nextItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#4089](https://github.com/facebook/docusaurus/pull/4089) feat(v2): Webpack 5, PostCSS 8 ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- [#4704](https://github.com/facebook/docusaurus/pull/4704) docs(v2): showcase meli ([@gempain](https://github.com/gempain))\\n- [#4699](https://github.com/facebook/docusaurus/pull/4699) docs(v2): Add Kosko to showcase ([@tommy351](https://github.com/tommy351))\\n\\n## Committers: 4\\n\\n- Geoffroy Empain ([@gempain](https://github.com/gempain))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy Chen ([@tommy351](https://github.com/tommy351))"},{"id":"/2.0.0-alpha.74","metadata":{"permalink":"/changelog/2.0.0-alpha.74","source":"@site/changelog/source/2.0.0-alpha.74.md","title":"2.0.0-alpha.74","description":"New Feature","date":"2021-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"alena-ko","alias":"alena-ko","url":"https://github.com/alena-ko","imageURL":"https://github.com/alena-ko.png","key":"alena-ko","page":null},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"kazk","alias":"kazk","url":"https://github.com/kazk","imageURL":"https://github.com/kazk.png","key":"kazk","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"Luis Medina Huerta","alias":"luism3861","url":"https://github.com/luism3861","imageURL":"https://github.com/luism3861.png","key":"luism3861","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"Tommy","alias":"react-learner","url":"https://github.com/react-learner","imageURL":"https://github.com/react-learner.png","key":"react-learner","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-27T20:00","authors":["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"nextItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#4515](https://github.com/facebook/docusaurus/pull/4515) feat(v2): add tag filters to showcase page ([@lisa761](https://github.com/lisa761))\\n- `docusaurus-plugin-content-docs`\\n - [#4658](https://github.com/facebook/docusaurus/pull/4658) feat(v2): allow user to customize/enhance the default sidebar items generator ([@slorber](https://github.com/slorber))\\n - [#4655](https://github.com/facebook/docusaurus/pull/4655) feat(v2): docs, make numberPrefixParser configurable, better defaults, minor breaking-changes ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#4688](https://github.com/facebook/docusaurus/pull/4688) fix(v2): fix title logic (meta vs heading) + ignore fixed anchor id syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4689](https://github.com/facebook/docusaurus/pull/4689) chore(v2): update infima to alpha 23 ([@slorber](https://github.com/slorber))\\n - [#4667](https://github.com/facebook/docusaurus/pull/4667) fix(v2): Unbreak blog post title by handling title fallback in `LayoutHead` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#4687](https://github.com/facebook/docusaurus/pull/4687) fix(v2): accept empty/null custom_edit_url docs frontmatter for retrocompat ([@slorber](https://github.com/slorber))\\n - [#4651](https://github.com/facebook/docusaurus/pull/4651) fix(v2): sidebar autogen from subfolder should read category metadata correctly ([@slorber](https://github.com/slorber))\\n - [#4629](https://github.com/facebook/docusaurus/pull/4629) fix(v2): fix validation rejecting admonitions false ([@kazk](https://github.com/kazk))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#4654](https://github.com/facebook/docusaurus/pull/4654) fix(v2): fix too strict markdown frontmatter validation ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-utils`\\n - [#4646](https://github.com/facebook/docusaurus/pull/4646) fix(v2): ignore imports when h1 heading parsing ([@lex111](https://github.com/lex111))\\n - [#4641](https://github.com/facebook/docusaurus/pull/4641) fix(v2): parse headings directly after h1 properly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4682](https://github.com/facebook/docusaurus/pull/4682) refactor(v2): align external icon on right ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#4496](https://github.com/facebook/docusaurus/pull/4496) docs(v2): Add Qovery to deployment doc ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#4680](https://github.com/facebook/docusaurus/pull/4680) docs(v2): Fix urls in deployment.md ([@luism3861](https://github.com/luism3861))\\n- [#4668](https://github.com/facebook/docusaurus/pull/4668) docs(v2): Add Hostman to deployment doc ([@alena-ko](https://github.com/alena-ko))\\n- [#4676](https://github.com/facebook/docusaurus/pull/4676) docs(v2): Add Daily Digest - COVID-19 IN FRANCE to showcase ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- [#4643](https://github.com/facebook/docusaurus/pull/4643) docs(v2): Fix typo in installation.md ([@react-learner](https://github.com/react-learner))\\n- [#4649](https://github.com/facebook/docusaurus/pull/4649) docs(v2): Add new showcase user ([@JeremyDolle](https://github.com/JeremyDolle))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4670](https://github.com/facebook/docusaurus/pull/4670) chore: add some redirects to v1.docusaurus.io ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4631](https://github.com/facebook/docusaurus/pull/4631) chore(v2): update examples to use alpha73 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 12\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Luis Medina Huerta ([@luism3861](https://github.com/luism3861))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy ([@react-learner](https://github.com/react-learner))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@alena-ko](https://github.com/alena-ko)\\n- kazk ([@kazk](https://github.com/kazk))"},{"id":"/2.0.0-alpha.73","metadata":{"permalink":"/changelog/2.0.0-alpha.73","source":"@site/changelog/source/2.0.0-alpha.73.md","title":"2.0.0-alpha.73","description":"New Feature","date":"2021-04-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aehrea","alias":"aehrea","url":"https://github.com/aehrea","imageURL":"https://github.com/aehrea.png","key":"aehrea","page":null},{"name":"Ajeet Singh Raina, Docker Captain, RedisLabs","alias":"ajeetraina","url":"https://github.com/ajeetraina","imageURL":"https://github.com/ajeetraina.png","key":"ajeetraina","page":null},{"name":"akepecs","alias":"akepecs","url":"https://github.com/akepecs","imageURL":"https://github.com/akepecs.png","key":"akepecs","page":null},{"name":"Anthony Bobsin","alias":"AnthonyBobsin","url":"https://github.com/AnthonyBobsin","imageURL":"https://github.com/AnthonyBobsin.png","key":"AnthonyBobsin","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Artur Carvalho","alias":"arturcarvalho","url":"https://github.com/arturcarvalho","imageURL":"https://github.com/arturcarvalho.png","key":"arturcarvalho","page":null},{"name":"Dennis Thompson","alias":"atomicpages","url":"https://github.com/atomicpages","imageURL":"https://github.com/atomicpages.png","key":"atomicpages","page":null},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},{"name":"Guillaume Claret","alias":"clarus","url":"https://github.com/clarus","imageURL":"https://github.com/clarus.png","key":"clarus","page":null},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},{"name":"Dick Wyn Yong","alias":"dickwyn","url":"https://github.com/dickwyn","imageURL":"https://github.com/dickwyn.png","key":"dickwyn","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Foxeye-Rinx","alias":"Foxeye-Rinx","url":"https://github.com/Foxeye-Rinx","imageURL":"https://github.com/Foxeye-Rinx.png","key":"Foxeye-Rinx","page":null},{"name":"Brent Ely","alias":"gitbrent","url":"https://github.com/gitbrent","imageURL":"https://github.com/gitbrent.png","key":"gitbrent","page":null},{"name":"Marco Enrico","alias":"gumacahin","url":"https://github.com/gumacahin","imageURL":"https://github.com/gumacahin.png","key":"gumacahin","page":null},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Chris Kanich","alias":"kaytwo","url":"https://github.com/kaytwo","imageURL":"https://github.com/kaytwo.png","key":"kaytwo","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},{"name":"Lucas Alves","alias":"lucalves","url":"https://github.com/lucalves","imageURL":"https://github.com/lucalves.png","key":"lucalves","page":null},{"name":"miku86","alias":"miku86","url":"https://github.com/miku86","imageURL":"https://github.com/miku86.png","key":"miku86","page":null},{"name":"Pedro Pi\xf1era Buend\xeda","alias":"pepibumur","url":"https://github.com/pepibumur","imageURL":"https://github.com/pepibumur.png","key":"pepibumur","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"serut","alias":"serut","url":"https://github.com/serut","imageURL":"https://github.com/serut.png","key":"serut","page":null},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Steve","alias":"steveworley","url":"https://github.com/steveworley","imageURL":"https://github.com/steveworley.png","key":"steveworley","page":null},{"name":"guoxudong","alias":"sunny0826","url":"https://github.com/sunny0826","imageURL":"https://github.com/sunny0826.png","key":"sunny0826","page":null},{"name":"Tales Porto","alias":"talesporto","url":"https://github.com/talesporto","imageURL":"https://github.com/talesporto.png","key":"talesporto","page":null},{"name":"Thiago Sciotta","alias":"thiagog3","url":"https://github.com/thiagog3","imageURL":"https://github.com/thiagog3.png","key":"thiagog3","page":null},{"name":"Tiago Ribeiro","alias":"tiago-rr","url":"https://github.com/tiago-rr","imageURL":"https://github.com/tiago-rr.png","key":"tiago-rr","page":null},{"name":"Tom Raviv","alias":"tomrav","url":"https://github.com/tomrav","imageURL":"https://github.com/tomrav.png","key":"tomrav","page":null},{"name":"Tony Narlock","alias":"tony","url":"https://github.com/tony","imageURL":"https://github.com/tony.png","key":"tony","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-16T20:00","authors":["aehrea","ajeetraina","akepecs","AnthonyBobsin","armano2","arturcarvalho","atomicpages","besemuna","clarus","covalentbond","dickwyn","duanwilliam","forresst","Foxeye-Rinx","gitbrent","gumacahin","jknoxville","johnnyreilly","kaytwo","lex111","lisa761","loozhengyuan","lucalves","miku86","pepibumur","RDIL","SamChou19815","serut","ShinteiMai","slorber","steveworley","sunny0826","talesporto","thiagog3","tiago-rr","tomrav","tony"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"nextItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4624](https://github.com/facebook/docusaurus/pull/4624) feat(v2): Add Filipino default translations to theme ([@gumacahin](https://github.com/gumacahin))\\n - [#4596](https://github.com/facebook/docusaurus/pull/4596) feat(v2): theme default translations hindi ([@lisa761](https://github.com/lisa761))\\n - [#4536](https://github.com/facebook/docusaurus/pull/4536) feat(v2): add pt-PT translations for docusaurus-theme-classic ([@tiago-rr](https://github.com/tiago-rr))\\n - [#4525](https://github.com/facebook/docusaurus/pull/4525) feat(v2): add Brazilian Portuguese translation for docusaurus-theme-classic ([@thiagog3](https://github.com/thiagog3))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4511](https://github.com/facebook/docusaurus/pull/4511) feat(v2): add unique page/wrapper className to each theme pages ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4545](https://github.com/facebook/docusaurus/pull/4545) feat(v2): docusaurus deploy: ability to configure port in git url ([@talesporto](https://github.com/talesporto))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#4590](https://github.com/facebook/docusaurus/pull/4590) feat(v2): various markdown string parsing improvements/fixes ([@slorber](https://github.com/slorber))\\n - [#4485](https://github.com/facebook/docusaurus/pull/4485) feat(v2): frontmatter-less: read first heading as title and use it in front-matter ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils`\\n - [#4581](https://github.com/facebook/docusaurus/pull/4581) feat(v2): default theme translations: locale \\"pt\\" should load \\"pt-BR\\" translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4495](https://github.com/facebook/docusaurus/pull/4495) feat(v2): include frontmatter in loadedContent doc metadatas ([@kaytwo](https://github.com/kaytwo))\\n - [#4500](https://github.com/facebook/docusaurus/pull/4500) feat(v2): provide doc sidebar_label through sidebars.js ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4449](https://github.com/facebook/docusaurus/pull/4449) feat(v2): infer default i18n locale config from locale code ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4621](https://github.com/facebook/docusaurus/pull/4621) fix(v2): center align content if no sidebar exists ([@lex111](https://github.com/lex111))\\n - [#4620](https://github.com/facebook/docusaurus/pull/4620) fix(v2): restore toggle responsive sidebar button ([@lex111](https://github.com/lex111))\\n - [#4598](https://github.com/facebook/docusaurus/pull/4598) fix(v2): render escaped HTML entities inside code properly ([@lex111](https://github.com/lex111))\\n - [#4554](https://github.com/facebook/docusaurus/pull/4554) fix: DocNavbarItem error message ([@serut](https://github.com/serut))\\n - [#4468](https://github.com/facebook/docusaurus/pull/4468) fix(v2): select correct tab when items are incorrectly ordered ([@armano2](https://github.com/armano2))\\n - [#4461](https://github.com/facebook/docusaurus/pull/4461) fix(v2): Fix i18n staging deployment due to json typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4541](https://github.com/facebook/docusaurus/pull/4541) fix(v2): fix code block title parsing, support multiple metastring attributes ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4600](https://github.com/facebook/docusaurus/pull/4600) fix(v2): use page title from config if not set ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4501](https://github.com/facebook/docusaurus/pull/4501) fix(v2): fail-safe usage of browser storage (localStorage/sessionStorage) when access is denied ([@jknoxville](https://github.com/jknoxville))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#4593](https://github.com/facebook/docusaurus/pull/4593) fix(v2): i18n perf issue: getTranslationFile() should not load content again ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4574](https://github.com/facebook/docusaurus/pull/4574) fix(v2): examples should use Node 14 by default on CodeSandbox + regen with alpha72 ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4547](https://github.com/facebook/docusaurus/pull/4547) feat(v2) : use symbols to denote swizzle safety ([@besemuna](https://github.com/besemuna))\\n - [#4575](https://github.com/facebook/docusaurus/pull/4575) fix(v2): fix i18n isLastLocale bug preventing docusaurus from building some locales ([@slorber](https://github.com/slorber))\\n - [#4506](https://github.com/facebook/docusaurus/pull/4506) fix(v2): remove no longer used postcss-present-env from dependencies ([@armano2](https://github.com/armano2))\\n - [#4444](https://github.com/facebook/docusaurus/pull/4444) fix(v2): Fix writeHeadingIds on Windows due to non-posix paths ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4507](https://github.com/facebook/docusaurus/pull/4507) fix(v2): do not warn about duplicated title for pages ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4466](https://github.com/facebook/docusaurus/pull/4466) fix(v2): i18n fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4459](https://github.com/facebook/docusaurus/pull/4459) fix(v2): Export Joi from validation-utils package ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4617](https://github.com/facebook/docusaurus/pull/4617) refactor(v2): simplify and optimize sidebar ([@slorber](https://github.com/slorber))\\n - [#4608](https://github.com/facebook/docusaurus/pull/4608) refactor(v2): replace react-toggle with own implementation ([@lex111](https://github.com/lex111))\\n - [#4601](https://github.com/facebook/docusaurus/pull/4601) refactor(v2): increase heading anchor offset ([@lex111](https://github.com/lex111))\\n - [#4467](https://github.com/facebook/docusaurus/pull/4467) refactor(v2): add missing types to theme-classic useTheme ([@armano2](https://github.com/armano2))\\n - [#4448](https://github.com/facebook/docusaurus/pull/4448) polish(v2): Add german translations ([@miku86](https://github.com/miku86))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4451](https://github.com/facebook/docusaurus/pull/4451) refactor(v2): correct client types and type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4450](https://github.com/facebook/docusaurus/pull/4450) chore(v2): Fix more linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4442](https://github.com/facebook/docusaurus/pull/4442) chore(v2): Fix linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4375](https://github.com/facebook/docusaurus/pull/4375) refactor(v2): TS config update: reduce the size of npm modules ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4616](https://github.com/facebook/docusaurus/pull/4616) docs(v2): add showcase: kubevela ([@sunny0826](https://github.com/sunny0826))\\n - [#4612](https://github.com/facebook/docusaurus/pull/4612) docs(v2): Added IntelAGENT website to showcase. ([@akepecs](https://github.com/akepecs))\\n - [#4609](https://github.com/facebook/docusaurus/pull/4609) docs(v2): add clarity to tip in versioned using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4606](https://github.com/facebook/docusaurus/pull/4606) docs(v2): heading typo ([@arturcarvalho](https://github.com/arturcarvalho))\\n - [#4604](https://github.com/facebook/docusaurus/pull/4604) docs(v2): add clarity to tip in using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4602](https://github.com/facebook/docusaurus/pull/4602) docs(v2): Add \\"PptxGenJS\\" to showcase ([@gitbrent](https://github.com/gitbrent))\\n - [#4599](https://github.com/facebook/docusaurus/pull/4599) docs(v2): i18n site: enable ko + zh-CN locales ([@slorber](https://github.com/slorber))\\n - [#4595](https://github.com/facebook/docusaurus/pull/4595) docs(v2): fix typo theme-configuration.md ([@forresst](https://github.com/forresst))\\n - [#4594](https://github.com/facebook/docusaurus/pull/4594) docs(v2): Include docusaurus-protobuffet to community plugins ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n - [#4558](https://github.com/facebook/docusaurus/pull/4558) docs(v2): fixed broken link in i18n-tutorial.md ([@covalentbond](https://github.com/covalentbond))\\n - [#4573](https://github.com/facebook/docusaurus/pull/4573) docs: update README badges ([@slorber](https://github.com/slorber))\\n - [#4559](https://github.com/facebook/docusaurus/pull/4559) docs(v2): fixed the directory of index.js ([@covalentbond](https://github.com/covalentbond))\\n - [#4568](https://github.com/facebook/docusaurus/pull/4568) docs(v2): add social-embed to showcase ([@tony](https://github.com/tony))\\n - [#4570](https://github.com/facebook/docusaurus/pull/4570) docs(v2): Add Redis Labs Developer Site to docusaurus showcase page ([@ajeetraina](https://github.com/ajeetraina))\\n - [#4543](https://github.com/facebook/docusaurus/pull/4543) docs(v2): fix run-on sentence ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4539](https://github.com/facebook/docusaurus/pull/4539) docs(v2): fix typo deployment.mdx ([@forresst](https://github.com/forresst))\\n - [#4538](https://github.com/facebook/docusaurus/pull/4538) Add Tuist to the list of projects that use Docusaurus ([@pepibumur](https://github.com/pepibumur))\\n - [#4531](https://github.com/facebook/docusaurus/pull/4531) docs(v2): remove duplicate line on v1 docs ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4524](https://github.com/facebook/docusaurus/pull/4524) docs(v2): config for self-hosted docsearch crawler ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4526](https://github.com/facebook/docusaurus/pull/4526) docs(v2): fix markdown headings level 4 ([@forresst](https://github.com/forresst))\\n - [#4505](https://github.com/facebook/docusaurus/pull/4505) docs(v2): add more links to v1: announcementBar, versionDropdown, homepage ([@slorber](https://github.com/slorber))\\n - [#4497](https://github.com/facebook/docusaurus/pull/4497) docs: fix link to issue template ([@forresst](https://github.com/forresst))\\n - [#4481](https://github.com/facebook/docusaurus/pull/4481) docs(v2): fix grammar and improve wording ([@aehrea](https://github.com/aehrea))\\n - [#4472](https://github.com/facebook/docusaurus/pull/4472) docs(v2): fixed broken link in sidebar documentation ([@covalentbond](https://github.com/covalentbond))\\n - [#4470](https://github.com/facebook/docusaurus/pull/4470) docs(v2): Add missing i18n docs: API lifecycles + Crowdin migration guide ([@slorber](https://github.com/slorber))\\n - [#4460](https://github.com/facebook/docusaurus/pull/4460) docs(v2): use explicit heading IDs ([@lex111](https://github.com/lex111))\\n - [#4446](https://github.com/facebook/docusaurus/pull/4446) docs(v2): Add blog.johnnyreilly.com to showcase ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#4430](https://github.com/facebook/docusaurus/pull/4430) docs(v2): add Deploy with QuandCDN ([@steveworley](https://github.com/steveworley))\\n - [#4441](https://github.com/facebook/docusaurus/pull/4441) docs(v2): add stylable site to users showcase list ([@tomrav](https://github.com/tomrav))\\n- `docusaurus-init`\\n - [#4561](https://github.com/facebook/docusaurus/pull/4561) docs(v2): add a missing slug from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4560](https://github.com/facebook/docusaurus/pull/4560) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n - [#4546](https://github.com/facebook/docusaurus/pull/4546) docs(v2): add a missing \\"export\\" from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4320](https://github.com/facebook/docusaurus/pull/4320) feat(v2): Improve the initial templates #4302 ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-migrate`, `docusaurus`\\n - [#4479](https://github.com/facebook/docusaurus/pull/4479) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4463](https://github.com/facebook/docusaurus/pull/4463) chore: fb json header commit typo ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4613](https://github.com/facebook/docusaurus/pull/4613) chore(v2): fix yarn2 end2end test by using lerna publish --exact ([@slorber](https://github.com/slorber))\\n - [#4611](https://github.com/facebook/docusaurus/pull/4611) chore(v2): CI: do not build all locales when monitoring build time perf ([@slorber](https://github.com/slorber))\\n - [#4486](https://github.com/facebook/docusaurus/pull/4486) ci: enable yarn install cache ([@armano2](https://github.com/armano2))\\n - [#4508](https://github.com/facebook/docusaurus/pull/4508) ci: change default actions timeout from 6h to 30m ([@armano2](https://github.com/armano2))\\n - [#4488](https://github.com/facebook/docusaurus/pull/4488) chore(v2): fix typo in classic init template ([@clarus](https://github.com/clarus))\\n - [#4471](https://github.com/facebook/docusaurus/pull/4471) chore: fix GH actions lint problem matchers issue in PR ([@slorber](https://github.com/slorber))\\n - [#4458](https://github.com/facebook/docusaurus/pull/4458) chore(v2): enable staging locales: ko ja ([@slorber](https://github.com/slorber))\\n - [#4457](https://github.com/facebook/docusaurus/pull/4457) chore(v2): remove docs for alpha v70 ([@lex111](https://github.com/lex111))\\n - [#4452](https://github.com/facebook/docusaurus/pull/4452) chore(v2): update typescript-eslint to v4.18.0 ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#4516](https://github.com/facebook/docusaurus/pull/4516) ci(v2): fail CI if build takes too much time ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4490](https://github.com/facebook/docusaurus/pull/4490) chore: rename v2.docusaurus.io urls after domain switch + redirect + cleanups ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#4475](https://github.com/facebook/docusaurus/pull/4475) chore: prepare v1-v2 domain switch ([@slorber](https://github.com/slorber))\\n - [#4447](https://github.com/facebook/docusaurus/pull/4447) chore: simplify CI setup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`\\n - [#4453](https://github.com/facebook/docusaurus/pull/4453) chore(v2): migrate babel-eslint to @babel/eslint-parser ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils-validation`\\n - [#4464](https://github.com/facebook/docusaurus/pull/4464) chore(v2): Joi cyclic dep warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4462](https://github.com/facebook/docusaurus/pull/4462) chore: json files should be linted ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4603](https://github.com/facebook/docusaurus/pull/4603) perf(v2): avoid rerender of sidebar items while scrolling ([@lex111](https://github.com/lex111))\\n - [#4473](https://github.com/facebook/docusaurus/pull/4473) perf(v2): reduce amount of component updates while scrolling ([@armano2](https://github.com/armano2))\\n\\n## Committers: 37\\n\\n- Ajeet Singh Raina, Docker Captain, RedisLabs ([@ajeetraina](https://github.com/ajeetraina))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anthony Bobsin ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Artur Carvalho ([@arturcarvalho](https://github.com/arturcarvalho))\\n- Brent Ely ([@gitbrent](https://github.com/gitbrent))\\n- Chris Kanich ([@kaytwo](https://github.com/kaytwo))\\n- Dennis Thompson ([@atomicpages](https://github.com/atomicpages))\\n- Dick Wyn Yong ([@dickwyn](https://github.com/dickwyn))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Guillaume Claret ([@clarus](https://github.com/clarus))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Lucas Alves ([@lucalves](https://github.com/lucalves))\\n- Marco Enrico ([@gumacahin](https://github.com/gumacahin))\\n- Pedro Pi\xf1era Buend\xeda ([@pepibumur](https://github.com/pepibumur))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Steve ([@steveworley](https://github.com/steveworley))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tales Porto ([@talesporto](https://github.com/talesporto))\\n- Thiago Sciotta ([@thiagog3](https://github.com/thiagog3))\\n- Tiago Ribeiro ([@tiago-rr](https://github.com/tiago-rr))\\n- Tom Raviv ([@tomrav](https://github.com/tomrav))\\n- Tony Narlock ([@tony](https://github.com/tony))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))\\n- [@Foxeye-Rinx](https://github.com/Foxeye-Rinx)\\n- [@aehrea](https://github.com/aehrea)\\n- [@akepecs](https://github.com/akepecs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@miku86](https://github.com/miku86)\\n- [@serut](https://github.com/serut)\\n- guoxudong ([@sunny0826](https://github.com/sunny0826))"},{"id":"/2.0.0-alpha.72","metadata":{"permalink":"/changelog/2.0.0-alpha.72","source":"@site/changelog/source/2.0.0-alpha.72.md","title":"2.0.0-alpha.72","description":"Breaking Change","date":"2021-03-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Harvtronix","alias":"Harvtronix","url":"https://github.com/Harvtronix","imageURL":"https://github.com/Harvtronix.png","key":"Harvtronix","page":null},{"name":"Joon-Ha Lee","alias":"koko8829","url":"https://github.com/koko8829","imageURL":"https://github.com/koko8829.png","key":"koko8829","page":null},{"name":"Leandro Oriente","alias":"leandrooriente","url":"https://github.com/leandrooriente","imageURL":"https://github.com/leandrooriente.png","key":"leandrooriente","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"Lowen","alias":"lowenhere","url":"https://github.com/lowenhere","imageURL":"https://github.com/lowenhere.png","key":"lowenhere","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"Quan","alias":"quanengineering","url":"https://github.com/quanengineering","imageURL":"https://github.com/quanengineering.png","key":"quanengineering","page":null},{"name":"Rhodanthe1116","alias":"Rhodanthe1116","url":"https://github.com/Rhodanthe1116","imageURL":"https://github.com/Rhodanthe1116.png","key":"Rhodanthe1116","page":null},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Zoltan Kochan","alias":"zkochan","url":"https://github.com/zkochan","imageURL":"https://github.com/zkochan.png","key":"zkochan","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-16T20:00","authors":["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"nextItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\nStarting with this release for a proper work of i18n functionality, you need to either use Node v14+ or in case of using earlier version of Node.js install [`full-icu` package](https://www.npmjs.com/package/full-icu) and set `NODE_ICU_DATA` environment variable in your npm scripts, for example:\\n\\n```json\\n\\"scripts\\": {\\n \\"start\\": \\"cross-env NODE_ICU_DATA=node_modules/full-icu docusaurus start\\"\\n}\\n```\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`\\n - [#4302](https://github.com/facebook/docusaurus/pull/4302) feat(v2): Improve the initial templates ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-theme-classic`\\n - [#4390](https://github.com/facebook/docusaurus/pull/4390) feat(v2): Add korean default translations ([@koko8829](https://github.com/koko8829))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4429](https://github.com/facebook/docusaurus/pull/4429) chore(v2): upgrade Infima to v0.2.0-alpha.21 ([@lex111](https://github.com/lex111))\\n - [#4428](https://github.com/facebook/docusaurus/pull/4428) fix(v2): allow using pre tag in Markdown directly ([@lex111](https://github.com/lex111))\\n - [#4381](https://github.com/facebook/docusaurus/pull/4381) fix(v2): specify proper TS path in classic theme ([@lex111](https://github.com/lex111))\\n - [#4383](https://github.com/facebook/docusaurus/pull/4383) fix(v2): set theme color mode for SSR ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4424](https://github.com/facebook/docusaurus/pull/4424) fix(v2): add missing peer dep on @babel/core ([@SimenB](https://github.com/SimenB))\\n - [#4377](https://github.com/facebook/docusaurus/pull/4377) fix(v2): PWA issues + improve docs ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4407](https://github.com/facebook/docusaurus/pull/4407) fix(v2): broken link checker should not report false positives when using encoded chars ([@Harvtronix](https://github.com/Harvtronix))\\n- Other\\n - [#4410](https://github.com/facebook/docusaurus/pull/4410) fix(v1): Fix v1 site deployment with Crowdin again... ([@slorber](https://github.com/slorber))\\n - [#4396](https://github.com/facebook/docusaurus/pull/4396) fix(v1): Temp fix v1 site deployment: fail-safe on Crowdin upload translations error ([@slorber](https://github.com/slorber))\\n - [#4395](https://github.com/facebook/docusaurus/pull/4395) fix(v1): fix v1 site deploy issues ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4418](https://github.com/facebook/docusaurus/pull/4418) refactor(v2): correct plugin types ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4405](https://github.com/facebook/docusaurus/pull/4405) refactor(v2): i18n cleanups / refactors ([@longlho](https://github.com/longlho))\\n- `docusaurus-module-type-aliases`\\n - [#4387](https://github.com/facebook/docusaurus/pull/4387) refactor(v2): add ExecutionEnvironment, BrowserOnly, isInternalUrl to type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#4402](https://github.com/facebook/docusaurus/pull/4402) refactor(v2): merge linkify function used in blog and docs and align properties ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4382](https://github.com/facebook/docusaurus/pull/4382) refactor(v2): correct some of type errors reported by eslint ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4385](https://github.com/facebook/docusaurus/pull/4385) refactor(v2): add missing theme-classic types ([@armano2](https://github.com/armano2))\\n\\n## :memo: Documentation\\n\\n- [#4416](https://github.com/facebook/docusaurus/pull/4416) docs(v2): add Realtime Web Applications Workshop to showcase ([@lowenhere](https://github.com/lowenhere))\\n- [#4408](https://github.com/facebook/docusaurus/pull/4408) docs(v2): add gladysassistant.com to showcase ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- [#4386](https://github.com/facebook/docusaurus/pull/4386) docs(v2): Showcase the pnpm docs ([@zkochan](https://github.com/zkochan))\\n- [#4367](https://github.com/facebook/docusaurus/pull/4367) docs(v2): releasing i18n blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#4401](https://github.com/facebook/docusaurus/pull/4401) chore(v1): fix CircleCI v1 site deploy ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4399](https://github.com/facebook/docusaurus/pull/4399) chore(v2): upgrade example projects ([@slorber](https://github.com/slorber))\\n - [#4398](https://github.com/facebook/docusaurus/pull/4398) chore(v1): trigger v1 site deploy through CI ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4384](https://github.com/facebook/docusaurus/pull/4384) chore(v2): avoid bad publish of intl-locales-supported ([@lex111](https://github.com/lex111))\\n\\n## Committers: 14\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Harvtronix ([@Harvtronix](https://github.com/Harvtronix))\\n- Joon-Ha Lee ([@koko8829](https://github.com/koko8829))\\n- Leandro Oriente ([@leandrooriente](https://github.com/leandrooriente))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Lowen ([@lowenhere](https://github.com/lowenhere))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Quan ([@quanengineering](https://github.com/quanengineering))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Zoltan Kochan ([@zkochan](https://github.com/zkochan))\\n- [@Rhodanthe1116](https://github.com/Rhodanthe1116)"},{"id":"/2.0.0-alpha.71","metadata":{"permalink":"/changelog/2.0.0-alpha.71","source":"@site/changelog/source/2.0.0-alpha.71.md","title":"2.0.0-alpha.71","description":"New Feature","date":"2021-03-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},{"name":"Joel M","alias":"9oelM","url":"https://github.com/9oelM","imageURL":"https://github.com/9oelM.png","key":"9oelM","page":null},{"name":"Apurva Ojas","alias":"apurvaojas","url":"https://github.com/apurvaojas","imageURL":"https://github.com/apurvaojas.png","key":"apurvaojas","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"Jola","alias":"asystentka-jolka","url":"https://github.com/asystentka-jolka","imageURL":"https://github.com/asystentka-jolka.png","key":"asystentka-jolka","page":null},{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},{"name":"aukokyong","alias":"aukokyong","url":"https://github.com/aukokyong","imageURL":"https://github.com/aukokyong.png","key":"aukokyong","page":null},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},{"name":"Martin Ad\xe1mek","alias":"B4nan","url":"https://github.com/B4nan","imageURL":"https://github.com/B4nan.png","key":"B4nan","page":null},{"name":"Ben","alias":"ben-qnimble","url":"https://github.com/ben-qnimble","imageURL":"https://github.com/ben-qnimble.png","key":"ben-qnimble","page":null},{"name":"BennoDev","alias":"bennodev19","url":"https://github.com/bennodev19","imageURL":"https://github.com/bennodev19.png","key":"bennodev19","page":null},{"name":"\xc7a\u011flar Tural\u0131","alias":"caglarturali","url":"https://github.com/caglarturali","imageURL":"https://github.com/caglarturali.png","key":"caglarturali","page":null},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"Eduardo L\xe1zaro","alias":"edulazaro","url":"https://github.com/edulazaro","imageURL":"https://github.com/edulazaro.png","key":"edulazaro","page":null},{"name":"Eric Carboni","alias":"eric-hc","url":"https://github.com/eric-hc","imageURL":"https://github.com/eric-hc.png","key":"eric-hc","page":null},{"name":"Mohd Shad Mirza","alias":"iamshadmirza","url":"https://github.com/iamshadmirza","imageURL":"https://github.com/iamshadmirza.png","key":"iamshadmirza","page":null},{"name":"Bhargav Ponnapalli","alias":"imbhargav5","url":"https://github.com/imbhargav5","imageURL":"https://github.com/imbhargav5.png","key":"imbhargav5","page":null},{"name":"Ivan Ru\u017eevi\u0107","alias":"iruzevic","url":"https://github.com/iruzevic","imageURL":"https://github.com/iruzevic.png","key":"iruzevic","page":null},{"name":"Jessica Lin","alias":"jlin27","url":"https://github.com/jlin27","imageURL":"https://github.com/jlin27.png","key":"jlin27","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Juan Carlos Blanco Delgado","alias":"juancarlosjr97","url":"https://github.com/juancarlosjr97","imageURL":"https://github.com/juancarlosjr97.png","key":"juancarlosjr97","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Kumar Aditya","alias":"kumaraditya303","url":"https://github.com/kumaraditya303","imageURL":"https://github.com/kumaraditya303.png","key":"kumaraditya303","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},{"name":"Power Lin","alias":"linyuxuanlin","url":"https://github.com/linyuxuanlin","imageURL":"https://github.com/linyuxuanlin.png","key":"linyuxuanlin","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},{"name":"Miroiu Emanuel","alias":"miroiu","url":"https://github.com/miroiu","imageURL":"https://github.com/miroiu.png","key":"miroiu","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Sean Campbell","alias":"natac13","url":"https://github.com/natac13","imageURL":"https://github.com/natac13.png","key":"natac13","page":null},{"name":"Nico Jansen","alias":"nicojs","url":"https://github.com/nicojs","imageURL":"https://github.com/nicojs.png","key":"nicojs","page":null},{"name":"Nikolay Samokhvalov","alias":"NikolayS","url":"https://github.com/NikolayS","imageURL":"https://github.com/NikolayS.png","key":"NikolayS","page":null},{"name":"Nathan Bosscher","alias":"ntbosscher","url":"https://github.com/ntbosscher","imageURL":"https://github.com/ntbosscher.png","key":"ntbosscher","page":null},{"name":"Matt Oestreich","alias":"oze4","url":"https://github.com/oze4","imageURL":"https://github.com/oze4.png","key":"oze4","page":null},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},{"name":"Saihajpreet Singh","alias":"saihaj","url":"https://github.com/saihaj","imageURL":"https://github.com/saihaj.png","key":"saihaj","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Sam Hrncir","alias":"samhrncir","url":"https://github.com/samhrncir","imageURL":"https://github.com/samhrncir.png","key":"samhrncir","page":null},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},{"name":"saydo17","alias":"saydo17","url":"https://github.com/saydo17","imageURL":"https://github.com/saydo17.png","key":"saydo17","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Siemienik Pawel","alias":"Siemienik","url":"https://github.com/Siemienik","imageURL":"https://github.com/Siemienik.png","key":"Siemienik","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"Sam Sam","alias":"sksamuel","url":"https://github.com/sksamuel","imageURL":"https://github.com/sksamuel.png","key":"sksamuel","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ankur Kedia","alias":"theankurkedia","url":"https://github.com/theankurkedia","imageURL":"https://github.com/theankurkedia.png","key":"theankurkedia","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Tien Vo Xuan","alias":"tienvx","url":"https://github.com/tienvx","imageURL":"https://github.com/tienvx.png","key":"tienvx","page":null},{"name":"tokarchyn","alias":"tokarchyn","url":"https://github.com/tokarchyn","imageURL":"https://github.com/tokarchyn.png","key":"tokarchyn","page":null},{"name":"Tomas Fernandez","alias":"tomsfernandez","url":"https://github.com/tomsfernandez","imageURL":"https://github.com/tomsfernandez.png","key":"tomsfernandez","page":null},{"name":"Vamsi Krishna Reddy Satti","alias":"vamsi3","url":"https://github.com/vamsi3","imageURL":"https://github.com/vamsi3.png","key":"vamsi3","page":null},{"name":"Kevin Viglucci","alias":"viglucci","url":"https://github.com/viglucci","imageURL":"https://github.com/viglucci.png","key":"viglucci","page":null},{"name":"Welly","alias":"wellyshen","url":"https://github.com/wellyshen","imageURL":"https://github.com/wellyshen.png","key":"wellyshen","page":null},{"name":"wolf20482","alias":"wolf20482","url":"https://github.com/wolf20482","imageURL":"https://github.com/wolf20482.png","key":"wolf20482","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Yash Totale","alias":"YashTotale","url":"https://github.com/YashTotale","imageURL":"https://github.com/YashTotale.png","key":"YashTotale","page":null},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null},{"name":"Yuri Sulyma","alias":"ysulyma","url":"https://github.com/ysulyma","imageURL":"https://github.com/ysulyma.png","key":"ysulyma","page":null},{"name":"Yuval Hazaz","alias":"yuval-hazaz","url":"https://github.com/yuval-hazaz","imageURL":"https://github.com/yuval-hazaz.png","key":"yuval-hazaz","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-09T20:00","authors":["3alisaki","9oelM","apurvaojas","armano2","ArtFlag","asystentka-jolka","ataft","aukokyong","ayonious","B4nan","ben-qnimble","bennodev19","caglarturali","christian-bromann","dbrrt","edno","edulazaro","eric-hc","iamshadmirza","imbhargav5","iruzevic","jlin27","JoelMarcey","juancarlosjr97","juzhiyuan","kumaraditya303","lex111","limkinZero","linyuxuanlin","lisa761","LittleboyHarry","longlho","manzinello","massoudmaboudi","MatanBobi","miroiu","MisterFISHUP","moonrailgun","natac13","nicojs","NikolayS","ntbosscher","oze4","philipp985","RDIL","roydukkey","saihaj","SamChou19815","samhrncir","sammychinedu2ky","saydo17","semoal","Siemienik","Simek","sksamuel","slorber","theankurkedia","TheodoreChu","tienvx","tokarchyn","tomsfernandez","vamsi3","viglucci","wellyshen","wolf20482","yangshun","YashTotale","ykzts","ysulyma","yuval-hazaz"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"nextItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#4222](https://github.com/facebook/docusaurus/pull/4222) feat(v2): add ability to set custom heading id ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#4328](https://github.com/facebook/docusaurus/pull/4328) feat(v2): Add playgroundPosition config for live codeblock ([@tokarchyn](https://github.com/tokarchyn))\\n- `docusaurus-theme-classic`\\n - [#4209](https://github.com/facebook/docusaurus/pull/4209) feat(v2): auto focus to tab if it is outside viewport ([@lex111](https://github.com/lex111))\\n - [#4329](https://github.com/facebook/docusaurus/pull/4329) feat(v2): add arabic translation ([@3alisaki](https://github.com/3alisaki))\\n - [#4325](https://github.com/facebook/docusaurus/pull/4325) feat(v2): [theme-classic] add Polish translation ([@Simek](https://github.com/Simek))\\n - [#4312](https://github.com/facebook/docusaurus/pull/4312) feat(v2): Add Turkish translations for theme labels ([@caglarturali](https://github.com/caglarturali))\\n - [#4271](https://github.com/facebook/docusaurus/pull/4271) feat(v2): add Farsi default translations ([@slorber](https://github.com/slorber))\\n - [#4261](https://github.com/facebook/docusaurus/pull/4261) feat(v2): add icon to generic sidebar link ([@lex111](https://github.com/lex111))\\n - [#4109](https://github.com/facebook/docusaurus/pull/4109) feat(v2): default canonical urls ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4308](https://github.com/facebook/docusaurus/pull/4308) feat(v2): add --config option to CLI ([@longlho](https://github.com/longlho))\\n - [#4185](https://github.com/facebook/docusaurus/pull/4185) feat(v2): allow extend PostCSS config ([@lex111](https://github.com/lex111))\\n - [#4021](https://github.com/facebook/docusaurus/pull/4021) feat(v2): Allow plugins to consume webpack stats ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4303](https://github.com/facebook/docusaurus/pull/4303) feat(v2): add japanese translations ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4295](https://github.com/facebook/docusaurus/pull/4295) feat(v2): Add Interpolate / interpolate APIs + complete theme translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#4278](https://github.com/facebook/docusaurus/pull/4278) feat(v2): ability to \\"escape\\" JSX in MDX files as code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4232](https://github.com/facebook/docusaurus/pull/4232) feat(v2): editUrl functions should receive md doc permalink ([@slorber](https://github.com/slorber))\\n - [#4121](https://github.com/facebook/docusaurus/pull/4121) feat(v2): editUrl function for advanced use-cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4218](https://github.com/facebook/docusaurus/pull/4218) feat(v2): support/use React v17 by default ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#4215](https://github.com/facebook/docusaurus/pull/4215) feat(v2): Add i18n default code translation bundles ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4140](https://github.com/facebook/docusaurus/pull/4140) feat(v2): add support for RTL direction ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4199](https://github.com/facebook/docusaurus/pull/4199) feat(v2): allow to change location of search bar ([@lex111](https://github.com/lex111))\\n - [#3993](https://github.com/facebook/docusaurus/pull/3993) feat(v2): themed logo in footer ([@natac13](https://github.com/natac13))\\n- `docusaurus`\\n - [#4198](https://github.com/facebook/docusaurus/pull/4198) feat(v2): add fonts loaders + webpack resolve.roots ([@slorber](https://github.com/slorber))\\n - [#3998](https://github.com/facebook/docusaurus/pull/3998) feat(v2): Cache hashed assets to dedicated folders ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#3979](https://github.com/facebook/docusaurus/pull/3979) feat(v2): better error message for invalid plugin config ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4168](https://github.com/facebook/docusaurus/pull/4168) feat(v2): Extract/translate hardcoded labels from classic theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4098](https://github.com/facebook/docusaurus/pull/4098) feat(v2): improve templates, use JSDoc type annotation, improve `docusaurus.config.js` autocompletion ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-init`, `docusaurus-migrate`\\n - [#3986](https://github.com/facebook/docusaurus/pull/3986) feat(v2): skip dependency install on docusaurus init ([@kumaraditya303](https://github.com/kumaraditya303))\\n- `docusaurus-plugin-content-docs`\\n - [#3949](https://github.com/facebook/docusaurus/pull/3949) feat(v2): new docs edit options: editCurrentVersion + editLocalizedDocs ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4223](https://github.com/facebook/docusaurus/pull/4223) chore(v2): upgrade dependencies + require Node 12 ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#4366](https://github.com/facebook/docusaurus/pull/4366) fix(v2): align installed core-js version with babel config ([@armano2](https://github.com/armano2))\\n - [#4345](https://github.com/facebook/docusaurus/pull/4345) fix(v2): always extract translations from site/src ([@slorber](https://github.com/slorber))\\n - [#4342](https://github.com/facebook/docusaurus/pull/4342) chore(v2): bump clean-css to 5.1.1 ([@lex111](https://github.com/lex111))\\n - [#4212](https://github.com/facebook/docusaurus/pull/4212) fix(v2): typo in resolve.roots ([@slorber](https://github.com/slorber))\\n - [#4155](https://github.com/facebook/docusaurus/pull/4155) fix(v2): BaseUrl issue banner insertion should be prevented if JS can load ([@slorber](https://github.com/slorber))\\n - [#4137](https://github.com/facebook/docusaurus/pull/4137) fix(v2): escape apostrophes in route paths ([@lex111](https://github.com/lex111))\\n - [#4136](https://github.com/facebook/docusaurus/pull/4136) fix(v2): fix navigation from homepage ([@lex111](https://github.com/lex111))\\n - [#4125](https://github.com/facebook/docusaurus/pull/4125) fix(v2): baseUrl help banner should not be indexed by Google / SEO ([@slorber](https://github.com/slorber))\\n - [#4080](https://github.com/facebook/docusaurus/pull/4080) fix(v2): chokidar reloading debounced ([@semoal](https://github.com/semoal))\\n - [#3965](https://github.com/facebook/docusaurus/pull/3965) fix(v2): fix svg loader for CSS files ([@apurvaojas](https://github.com/apurvaojas))\\n - [#3943](https://github.com/facebook/docusaurus/pull/3943) fix(v2): disables all inlining in CleanCSS ([@lex111](https://github.com/lex111))\\n - [#3941](https://github.com/facebook/docusaurus/pull/3941) fix(v2): fix i18n build logging. ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4349](https://github.com/facebook/docusaurus/pull/4349) fix(v2): fix update code translations script + update some translations ([@slorber](https://github.com/slorber))\\n - [#4311](https://github.com/facebook/docusaurus/pull/4311) fix(v2): fit footer in viewport when content area is too small ([@lex111](https://github.com/lex111))\\n - [#4340](https://github.com/facebook/docusaurus/pull/4340) fix(v2): prevent useless blog pages to be in search results ([@slorber](https://github.com/slorber))\\n - [#4274](https://github.com/facebook/docusaurus/pull/4274) fix(v2): theme classic should have lib-next prettified ([@slorber](https://github.com/slorber))\\n - [#4267](https://github.com/facebook/docusaurus/pull/4267) fix(v2): Allow null as valid for title of item in footer links. ([@ben-qnimble](https://github.com/ben-qnimble))\\n - [#4254](https://github.com/facebook/docusaurus/pull/4254) fix(v2): fix LTR PostCSS bug on Netlify and monorepo symlinks ([@slorber](https://github.com/slorber))\\n - [#4247](https://github.com/facebook/docusaurus/pull/4247) fix(v2): make doc container full width when hidden sidebar ([@lex111](https://github.com/lex111))\\n - [#4241](https://github.com/facebook/docusaurus/pull/4241) fix(v2): avoid horizontal scrolling when long lines of code ([@lex111](https://github.com/lex111))\\n - [#4200](https://github.com/facebook/docusaurus/pull/4200) fix(v2): various minor bugs with location hash ([@lex111](https://github.com/lex111))\\n - [#4195](https://github.com/facebook/docusaurus/pull/4195) fix(v2): restore hamburger menu ([@lex111](https://github.com/lex111))\\n - [#4189](https://github.com/facebook/docusaurus/pull/4189) fix(v2): prevent click on item menu with children on mobiles ([@lex111](https://github.com/lex111))\\n - [#4176](https://github.com/facebook/docusaurus/pull/4176) fix(v2): make locale dropdown accessible from keyboard ([@lex111](https://github.com/lex111))\\n - [#4163](https://github.com/facebook/docusaurus/pull/4163) fix(v2): fix warning and improve styling inline TOC ([@lex111](https://github.com/lex111))\\n - [#4162](https://github.com/facebook/docusaurus/pull/4162) fix(v2): make more accessible skip link ([@lex111](https://github.com/lex111))\\n - [#4160](https://github.com/facebook/docusaurus/pull/4160) fix(v2): fix hreflang headers ([@slorber](https://github.com/slorber))\\n - [#4147](https://github.com/facebook/docusaurus/pull/4147) fix(v2): avoid misuse section tag in blog posts ([@lex111](https://github.com/lex111))\\n - [#4146](https://github.com/facebook/docusaurus/pull/4146) fix(v2): use current color for language icon ([@lex111](https://github.com/lex111))\\n - [#4118](https://github.com/facebook/docusaurus/pull/4118) fix(v2): navbar dropdown subitems should be translated properly ([@slorber](https://github.com/slorber))\\n - [#4011](https://github.com/facebook/docusaurus/pull/4011) fix(v2): fix accessibility issue with IconArrow ([@natac13](https://github.com/natac13))\\n - [#3968](https://github.com/facebook/docusaurus/pull/3968) fix(v2): fix blog only contextual search ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#4315](https://github.com/facebook/docusaurus/pull/4315) fix(v2): make code blocks more standalone ([@lex111](https://github.com/lex111))\\n - [#4277](https://github.com/facebook/docusaurus/pull/4277) fix(v2): Code blocks should be LTR by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#4318](https://github.com/facebook/docusaurus/pull/4318) fix(v2): evaluate code in live editor on client only ([@lex111](https://github.com/lex111))\\n - [#3954](https://github.com/facebook/docusaurus/pull/3954) fix(v2): allow async/await in live code editor ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4339](https://github.com/facebook/docusaurus/pull/4339) fix(v2): search page results localization ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4304](https://github.com/facebook/docusaurus/pull/4304) fix(v2): fix bad theme pluralization rules for some labels ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`\\n - [#4240](https://github.com/facebook/docusaurus/pull/4240) fix(v2): remove PostCSS plugin for combine duplicated selectors ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4234](https://github.com/facebook/docusaurus/pull/4234) fix(v2): fix website versions page ([@slorber](https://github.com/slorber))\\n - [#4233](https://github.com/facebook/docusaurus/pull/4233) fix(v2): website editUrl should target upstream docs ([@slorber](https://github.com/slorber))\\n - [#4067](https://github.com/facebook/docusaurus/pull/4067) fix(v2): Fix blog post url/date ([@slorber](https://github.com/slorber))\\n - [#3952](https://github.com/facebook/docusaurus/pull/3952) docs(v2): Fix invalid json ([@oze4](https://github.com/oze4))\\n- `docusaurus-theme-search-algolia`\\n - [#4188](https://github.com/facebook/docusaurus/pull/4188) fix(v2): prepend docsearch modal to body element ([@lex111](https://github.com/lex111))\\n - [#4154](https://github.com/facebook/docusaurus/pull/4154) fix(v2): add base url to opensearch.xml ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#4166](https://github.com/facebook/docusaurus/pull/4166) fix(v2): ideal image assets should be served under ./assets ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4092](https://github.com/facebook/docusaurus/pull/4092) fix(v2): fix/enhance minor i18n issues reported ([@slorber](https://github.com/slorber))\\n - [#3940](https://github.com/facebook/docusaurus/pull/3940) fix(v2): i18n should not crash theme without footer ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#4004](https://github.com/facebook/docusaurus/pull/4004) fix(v2): Fix double trailingSlash in sitemap.xml ([@ntbosscher](https://github.com/ntbosscher))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#3970](https://github.com/facebook/docusaurus/pull/3970) fix(v2): fix multi-instance mdx loaders not sandboxed correctly ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#3903](https://github.com/facebook/docusaurus/pull/3903) fix(v2): fix redirect toUrl (windows + trailing slash) ([@saydo17](https://github.com/saydo17))\\n- `docusaurus-utils`\\n - [#3944](https://github.com/facebook/docusaurus/pull/3944) fix(v2): ignore style imports in excerpt ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4371](https://github.com/facebook/docusaurus/pull/4371) refactor(v2): update Russian translation in classic theme ([@lex111](https://github.com/lex111))\\n - [#4359](https://github.com/facebook/docusaurus/pull/4359) polish(v2): [theme-classic] slightly improve Japanese translation ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n - [#4350](https://github.com/facebook/docusaurus/pull/4350) polish(v2): Updated theme label translations for Turkish ([@caglarturali](https://github.com/caglarturali))\\n - [#4351](https://github.com/facebook/docusaurus/pull/4351) polish(v2): add japanese translation for #4304 ([@ykzts](https://github.com/ykzts))\\n - [#4309](https://github.com/facebook/docusaurus/pull/4309) polish(v2): improved Farsi translation ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4279](https://github.com/facebook/docusaurus/pull/4279) polish(v2): theme default translations for language de / german ([@philipp985](https://github.com/philipp985))\\n - [#4275](https://github.com/facebook/docusaurus/pull/4275) polish(v2): Add more tags translations ([@slorber](https://github.com/slorber))\\n - [#4246](https://github.com/facebook/docusaurus/pull/4246) refactor(v2): add Russian translation for classic theme ([@lex111](https://github.com/lex111))\\n - [#4242](https://github.com/facebook/docusaurus/pull/4242) refactor(v2): use Link component for external links ([@lex111](https://github.com/lex111))\\n - [#4244](https://github.com/facebook/docusaurus/pull/4244) refactor(v2): clean-ups and fixes ([@lex111](https://github.com/lex111))\\n - [#4193](https://github.com/facebook/docusaurus/pull/4193) refactor(v2): update tabs to follow WAI-ARIA spec ([@lex111](https://github.com/lex111))\\n - [#4194](https://github.com/facebook/docusaurus/pull/4194) refactor(v2): use transform instead of top position for hideable navbar ([@lex111](https://github.com/lex111))\\n - [#4167](https://github.com/facebook/docusaurus/pull/4167) refactor(v2): minor styling improvements ([@lex111](https://github.com/lex111))\\n - [#4169](https://github.com/facebook/docusaurus/pull/4169) refactor(v2): remove delay after skip link pressed ([@lex111](https://github.com/lex111))\\n - [#4086](https://github.com/facebook/docusaurus/pull/4086) style(v2): add className to tab container ([@ArtFlag](https://github.com/ArtFlag))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4352](https://github.com/facebook/docusaurus/pull/4352) refactor(v2): format last updated date using Intl ([@lex111](https://github.com/lex111))\\n - [#4243](https://github.com/facebook/docusaurus/pull/4243) refactor(v2): introduce Seo component for internal using ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4344](https://github.com/facebook/docusaurus/pull/4344) refactor(v2): format post date using Intl ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4257](https://github.com/facebook/docusaurus/pull/4257) refactor(v2): improve notifier message ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4219](https://github.com/facebook/docusaurus/pull/4219) refactor(v2): add more translatable strings ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4074](https://github.com/facebook/docusaurus/pull/4074) polish(v2): improve codesandbox template package.json ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3953](https://github.com/facebook/docusaurus/pull/3953) refactor(v2): fix debug plugin name ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#3946](https://github.com/facebook/docusaurus/pull/3946) refactor(v2): minor a11y tweaks ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4369](https://github.com/facebook/docusaurus/pull/4369) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n - [#4362](https://github.com/facebook/docusaurus/pull/4362) docs(v2): Add stryker-mutator.io to showcase ([@nicojs](https://github.com/nicojs))\\n - [#4354](https://github.com/facebook/docusaurus/pull/4354) docs(v2): add trpgengine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#4346](https://github.com/facebook/docusaurus/pull/4346) docs(v1): update phrasing for website dir relative to docs dir ([@aukokyong](https://github.com/aukokyong))\\n - [#4338](https://github.com/facebook/docusaurus/pull/4338) docs(v2): update showcase instruction regarding tags + fix site tags ([@slorber](https://github.com/slorber))\\n - [#4331](https://github.com/facebook/docusaurus/pull/4331) docs(v2): add ocpeasy to users ([@dbrrt](https://github.com/dbrrt))\\n - [#4307](https://github.com/facebook/docusaurus/pull/4307) docs(v2): Add RactivePlayer to showcase ([@ysulyma](https://github.com/ysulyma))\\n - [#4297](https://github.com/facebook/docusaurus/pull/4297) docs(v2): Fix examples by importing React ([@roydukkey](https://github.com/roydukkey))\\n - [#4296](https://github.com/facebook/docusaurus/pull/4296) docs(v2): move migrated sites from v1 to v2 showcase ([@lisa761](https://github.com/lisa761))\\n - [#4293](https://github.com/facebook/docusaurus/pull/4293) docs(v2): Added React Native ARIA to showcase ([@theankurkedia](https://github.com/theankurkedia))\\n - [#4284](https://github.com/facebook/docusaurus/pull/4284) docs(v2): Add AttoBot website to showcase page ([@wolf20482](https://github.com/wolf20482))\\n - [#4285](https://github.com/facebook/docusaurus/pull/4285) docs(v2): escape more jsx in mdx files for Crowdin ([@slorber](https://github.com/slorber))\\n - [#4283](https://github.com/facebook/docusaurus/pull/4283) docs(v2): Add Postgres.ai to showcase ([@NikolayS](https://github.com/NikolayS))\\n - [#4282](https://github.com/facebook/docusaurus/pull/4282) docs: update Netlify deploy status badge ([@slorber](https://github.com/slorber))\\n - [#4259](https://github.com/facebook/docusaurus/pull/4259) docs(v2): improve cli docs ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4266](https://github.com/facebook/docusaurus/pull/4266) docs(v2): update agilets banner ([@bennodev19](https://github.com/bennodev19))\\n - [#4263](https://github.com/facebook/docusaurus/pull/4263) docs(v2): remove npx and use github action to configure ssh key ([@MatanBobi](https://github.com/MatanBobi))\\n - [#4262](https://github.com/facebook/docusaurus/pull/4262) docs(v2): Added kotest to showcase ([@sksamuel](https://github.com/sksamuel))\\n - [#4256](https://github.com/facebook/docusaurus/pull/4256) docs(v2): Add docusaurus2-graphql-doc-generator to community resources ([@edno](https://github.com/edno))\\n - [#4252](https://github.com/facebook/docusaurus/pull/4252) docs(v2): Added mailgo to showcase ([@manzinello](https://github.com/manzinello))\\n - [#4251](https://github.com/facebook/docusaurus/pull/4251) docs(v2): Add Axioms to showcase ([@limkinZero](https://github.com/limkinZero))\\n - [#4237](https://github.com/facebook/docusaurus/pull/4237) docs(v2): Replace mbt-bundle by sicope-model ([@tienvx](https://github.com/tienvx))\\n - [#4236](https://github.com/facebook/docusaurus/pull/4236) docs(v2): v2 migration should mention RSS feed url change ([@slorber](https://github.com/slorber))\\n - [#4230](https://github.com/facebook/docusaurus/pull/4230) docs(v2): fix npm/yarn command example for swizzling TypeScript theme components ([@YashTotale](https://github.com/YashTotale))\\n - [#4229](https://github.com/facebook/docusaurus/pull/4229) docs(v2): Fix link to slash introduction svg ([@SamChou19815](https://github.com/SamChou19815))\\n - [#4226](https://github.com/facebook/docusaurus/pull/4226) docs(v2): Removing wrong parenthesis on image variable ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n - [#4225](https://github.com/facebook/docusaurus/pull/4225) docs(v2): added Apache APISIX ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#4224](https://github.com/facebook/docusaurus/pull/4224) docs(v2): Add MikroORM site to showcase page ([@B4nan](https://github.com/B4nan))\\n - [#4220](https://github.com/facebook/docusaurus/pull/4220) Add WebdriverIO docs page as showcase ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4210](https://github.com/facebook/docusaurus/pull/4210) misc: add requirements for sites being added to showcase ([@lex111](https://github.com/lex111))\\n - [#4207](https://github.com/facebook/docusaurus/pull/4207) docs(v2): Added Console Table Documentation Site to showcase ([@ayonious](https://github.com/ayonious))\\n - [#4204](https://github.com/facebook/docusaurus/pull/4204) docs(v1): fixing a broken link in blog posts ([@ayonious](https://github.com/ayonious))\\n - [#4178](https://github.com/facebook/docusaurus/pull/4178) docs(v2): localize 404 page with Netlify + docs ([@slorber](https://github.com/slorber))\\n - [#4177](https://github.com/facebook/docusaurus/pull/4177) docs(v2): Add docusaurus-plugin-remote-content to resources list ([@RDIL](https://github.com/RDIL))\\n - [#4172](https://github.com/facebook/docusaurus/pull/4172) docs(v2): Add react-hooks.org to showcase ([@imbhargav5](https://github.com/imbhargav5))\\n - [#4173](https://github.com/facebook/docusaurus/pull/4173) docs(v2): typo fixing double colon ([@ayonious](https://github.com/ayonious))\\n - [#4164](https://github.com/facebook/docusaurus/pull/4164) docs(v2): add a note for images not rendered on dev server ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n - [#4161](https://github.com/facebook/docusaurus/pull/4161) docs(v2): Add docusaurus-theme-github-codeblock ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4158](https://github.com/facebook/docusaurus/pull/4158) docs(v2): improve bad static assets doc + remove some useless useBaseUrl usage ([@slorber](https://github.com/slorber))\\n - [#4144](https://github.com/facebook/docusaurus/pull/4144) docs(v2): community docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4143](https://github.com/facebook/docusaurus/pull/4143) docs(v2): guide docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4141](https://github.com/facebook/docusaurus/pull/4141) docs(v2): plugins docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4139](https://github.com/facebook/docusaurus/pull/4139) docs(v2): Add Rematch site to showcase page ([@semoal](https://github.com/semoal))\\n - [#4128](https://github.com/facebook/docusaurus/pull/4128) docs(v2): remove duplicate link from docs about Docusaurus1 ([@ayonious](https://github.com/ayonious))\\n - [#4129](https://github.com/facebook/docusaurus/pull/4129) docs(v2): typo fix in Migration Docs ([@ayonious](https://github.com/ayonious))\\n - [#4127](https://github.com/facebook/docusaurus/pull/4127) docs(v2): remove unnecessary brace from installation doc ([@ayonious](https://github.com/ayonious))\\n - [#4130](https://github.com/facebook/docusaurus/pull/4130) docs(v2): typo in i18n docs ([@ayonious](https://github.com/ayonious))\\n - [#4112](https://github.com/facebook/docusaurus/pull/4112) docs(v2): Do not encourage using the permalink prop ([@slorber](https://github.com/slorber))\\n - [#4106](https://github.com/facebook/docusaurus/pull/4106) docs(v2): update broken link on resources page ([@eric-hc](https://github.com/eric-hc))\\n - [#4084](https://github.com/facebook/docusaurus/pull/4084) docs(v2): Use the TOCInline component in config doc ([@slorber](https://github.com/slorber))\\n - [#4020](https://github.com/facebook/docusaurus/pull/4020) docs(v2): 2020 recap blog post ([@slorber](https://github.com/slorber))\\n - [#4009](https://github.com/facebook/docusaurus/pull/4009) docs(v2): add hideableSidebar option to config demo ([@natac13](https://github.com/natac13))\\n - [#4062](https://github.com/facebook/docusaurus/pull/4062) docs(v2): Add codesandbox integration ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n - [#4058](https://github.com/facebook/docusaurus/pull/4058) docs(v2): Include new.docusaurus.io CodeSandbox in issue templates + README ([@slorber](https://github.com/slorber))\\n - [#4053](https://github.com/facebook/docusaurus/pull/4053) docs(v2): Add Eightshift Docs site to showcase page ([@iruzevic](https://github.com/iruzevic))\\n - [#4048](https://github.com/facebook/docusaurus/pull/4048) docs(v1): Docker: remind the user to use the --host flag ([@tomsfernandez](https://github.com/tomsfernandez))\\n - [#4047](https://github.com/facebook/docusaurus/pull/4047) docs(v1): version page should recommend v2 ([@slorber](https://github.com/slorber))\\n - [#4046](https://github.com/facebook/docusaurus/pull/4046) docs(v2): add sciwp to showcase ([@edulazaro](https://github.com/edulazaro))\\n - [#4036](https://github.com/facebook/docusaurus/pull/4036) docs(v2): Add Nodify to showcase ([@miroiu](https://github.com/miroiu))\\n - [#4038](https://github.com/facebook/docusaurus/pull/4038) docs(v1): suggest to use Docusaurus 2 even for non-FB websites ([@slorber](https://github.com/slorber))\\n - [#4026](https://github.com/facebook/docusaurus/pull/4026) docs(v2): Add FlexIt to showcase ([@ataft](https://github.com/ataft))\\n - [#4022](https://github.com/facebook/docusaurus/pull/4022) docs: fix typo from \'dissapear\' to \'disappear\' ([@vamsi3](https://github.com/vamsi3))\\n - [#4002](https://github.com/facebook/docusaurus/pull/4002) docs(v2): Add how to run your own DocSearch ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#3997](https://github.com/facebook/docusaurus/pull/3997) docs(v2): Add Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#3990](https://github.com/facebook/docusaurus/pull/3990) docs(v2): Add wiki-powerto site showcase ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n - [#3991](https://github.com/facebook/docusaurus/pull/3991) docs(v2): add overwriting css variables for dark mode ([@natac13](https://github.com/natac13))\\n - [#3987](https://github.com/facebook/docusaurus/pull/3987) docs(v2): Add AgileTs site to showcase page ([@bennodev19](https://github.com/bennodev19))\\n - [#3978](https://github.com/facebook/docusaurus/pull/3978) docs(v2): Add documentation for docs multi-instance support ([@slorber](https://github.com/slorber))\\n - [#3977](https://github.com/facebook/docusaurus/pull/3977) docs(v2): nudge users to add site to showcase ([@slorber](https://github.com/slorber))\\n - [#3975](https://github.com/facebook/docusaurus/pull/3975) docs(v2): Reorganize/split the guides doc / markdown sections ([@slorber](https://github.com/slorber))\\n - [#3976](https://github.com/facebook/docusaurus/pull/3976) docs(v2): Add AI-Speaker site to showcase page ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n - [#3974](https://github.com/facebook/docusaurus/pull/3974) docs(v2): doc typo on sidebar admonition ([@slorber](https://github.com/slorber))\\n - [#3962](https://github.com/facebook/docusaurus/pull/3962) docs(v2): Add migration info doc regarding docs folder location ([@slorber](https://github.com/slorber))\\n - [#3950](https://github.com/facebook/docusaurus/pull/3950) docs(v2): update GitHub entreprise deployment doc ([@samhrncir](https://github.com/samhrncir))\\n - [#3945](https://github.com/facebook/docusaurus/pull/3945) docs(v2): Added information about setting `/` in routeBasePath ([@Siemienik](https://github.com/Siemienik))\\n- `docusaurus-theme-classic`\\n - [#4356](https://github.com/facebook/docusaurus/pull/4356) polish(v2): [theme-classic] add Chinese translations (zh-Hant & zh-Hans) ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus`\\n - [#4126](https://github.com/facebook/docusaurus/pull/4126) docs(v2): do not recommend using useBaseUrl() hook in most cases ([@slorber](https://github.com/slorber))\\n - [#4049](https://github.com/facebook/docusaurus/pull/4049) docs(v1): version page should recommend v2 (bis) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4014](https://github.com/facebook/docusaurus/pull/4014) docs(v2): i18n doc + polish ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#4034](https://github.com/facebook/docusaurus/pull/4034) docs(v2): Add READMEs to v2 packages ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`\\n - [#3881](https://github.com/facebook/docusaurus/pull/3881) docs(v2): update FB OSS logo ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4372](https://github.com/facebook/docusaurus/pull/4372) chore(v1): release docusaurus v1.14.7 ([@slorber](https://github.com/slorber))\\n - [#4368](https://github.com/facebook/docusaurus/pull/4368) chore(deps): bump elliptic from 6.5.3 to 6.5.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#4365](https://github.com/facebook/docusaurus/pull/4365) chore: unstable yarnlock ([@slorber](https://github.com/slorber))\\n - [#4337](https://github.com/facebook/docusaurus/pull/4337) misc: restore build size bot ([@slorber](https://github.com/slorber))\\n - [#4289](https://github.com/facebook/docusaurus/pull/4289) chore(v2): remove docs for alpha v69 ([@lex111](https://github.com/lex111))\\n - [#4253](https://github.com/facebook/docusaurus/pull/4253) chore(v2): remove docs for alpha v68 ([@lex111](https://github.com/lex111))\\n - [#4248](https://github.com/facebook/docusaurus/pull/4248) chore(v2): Fix build size bot ([@slorber](https://github.com/slorber))\\n - [#4214](https://github.com/facebook/docusaurus/pull/4214) chore(v2): setup for i18n staging deployment ([@slorber](https://github.com/slorber))\\n - [#4159](https://github.com/facebook/docusaurus/pull/4159) chore(v2): fix build size bot again ([@slorber](https://github.com/slorber))\\n - [#4156](https://github.com/facebook/docusaurus/pull/4156) chore(v2): fix build size bot monitoring of js/css assets ([@slorber](https://github.com/slorber))\\n - [#4100](https://github.com/facebook/docusaurus/pull/4100) chore(v2): remove docs for alpha v66 ([@lex111](https://github.com/lex111))\\n - [#4077](https://github.com/facebook/docusaurus/pull/4077) chore(v2): fix unstable master yarn.lock ([@slorber](https://github.com/slorber))\\n - [#4063](https://github.com/facebook/docusaurus/pull/4063) chore(v2): Regen codesandbox templates + add template: \\"docusaurus\\" ([@slorber](https://github.com/slorber))\\n - [#4056](https://github.com/facebook/docusaurus/pull/4056) chore(v2): update codesandbox redirect ([@slorber](https://github.com/slorber))\\n - [#4041](https://github.com/facebook/docusaurus/pull/4041) chore(v1): revert v1 netlify.toml ([@slorber](https://github.com/slorber))\\n - [#4040](https://github.com/facebook/docusaurus/pull/4040) chore(v1): upgrade v1 Crowdin cli + CI config ([@slorber](https://github.com/slorber))\\n - [#4030](https://github.com/facebook/docusaurus/pull/4030) chore(v2): install Crowdin cli through npm package ([@slorber](https://github.com/slorber))\\n - [#4003](https://github.com/facebook/docusaurus/pull/4003) chore: add DevContainer config for GitHub codespaces ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#4001](https://github.com/facebook/docusaurus/pull/4001) chore(v2): Upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#3995](https://github.com/facebook/docusaurus/pull/3995) chore(v2): remove docs for alpha v65 ([@lex111](https://github.com/lex111))\\n - [#3960](https://github.com/facebook/docusaurus/pull/3960) fix(v2): remove duplicate section on Versions page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#4370](https://github.com/facebook/docusaurus/pull/4370) chore(v2): update infima ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4361](https://github.com/facebook/docusaurus/pull/4361) refactor(v2): remove duplicated lodash dependencies and import only what needed ([@armano2](https://github.com/armano2))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#4270](https://github.com/facebook/docusaurus/pull/4270) chore(v2): upgrade react-dev-utils ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#4264](https://github.com/facebook/docusaurus/pull/4264) chore(v2): bump/align deps in monorepo: commander, semver, fs-extra ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#4265](https://github.com/facebook/docusaurus/pull/4265) chore(v2): PostCSS peer dep fix ([@RDIL](https://github.com/RDIL))\\n - [#4091](https://github.com/facebook/docusaurus/pull/4091) refactor(v2): Switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n - [#4066](https://github.com/facebook/docusaurus/pull/4066) chore(v2): Update a few dependencies ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4148](https://github.com/facebook/docusaurus/pull/4148) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4120](https://github.com/facebook/docusaurus/pull/4120) chore(v2): Update workbox to v6 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-utils`, `docusaurus`\\n - [#4081](https://github.com/facebook/docusaurus/pull/4081) chore(v2): Update webpack-related dependencies, pre-work to migrate to Webpack 5 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus`\\n - [#4012](https://github.com/facebook/docusaurus/pull/4012) chore(v2): docusaurus-init: switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-sitemap`\\n - [#4005](https://github.com/facebook/docusaurus/pull/4005) chore(v2): prettier fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`\\n - [#3988](https://github.com/facebook/docusaurus/pull/3988) chore(v2): fix date-sensitive test fixture ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#3959](https://github.com/facebook/docusaurus/pull/3959) chore(v2): fix windows Jest tests ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-content-blog`, `docusaurus`\\n - [#4355](https://github.com/facebook/docusaurus/pull/4355) perf(v2): improve blog mdx-loader and postcss loader ([@lex111](https://github.com/lex111))\\n\\n## Committers: 70\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Ankur Kedia ([@theankurkedia](https://github.com/theankurkedia))\\n- Apurva Ojas ([@apurvaojas](https://github.com/apurvaojas))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben ([@ben-qnimble](https://github.com/ben-qnimble))\\n- BennoDev ([@bennodev19](https://github.com/bennodev19))\\n- Bhargav Ponnapalli ([@imbhargav5](https://github.com/imbhargav5))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- Eduardo L\xe1zaro ([@edulazaro](https://github.com/edulazaro))\\n- Eric Carboni ([@eric-hc](https://github.com/eric-hc))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Ivan Ru\u017eevi\u0107 ([@iruzevic](https://github.com/iruzevic))\\n- Jessica Lin ([@jlin27](https://github.com/jlin27))\\n- Joel M ([@9oelM](https://github.com/9oelM))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jola ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n- Juan Carlos Blanco Delgado ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n- Kevin Viglucci ([@viglucci](https://github.com/viglucci))\\n- Kumar Aditya ([@kumaraditya303](https://github.com/kumaraditya303))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Martin Ad\xe1mek ([@B4nan](https://github.com/B4nan))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Matt Oestreich ([@oze4](https://github.com/oze4))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- Miroiu Emanuel ([@miroiu](https://github.com/miroiu))\\n- Mohd Shad Mirza ([@iamshadmirza](https://github.com/iamshadmirza))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- Nathan Bosscher ([@ntbosscher](https://github.com/ntbosscher))\\n- Nico Jansen ([@nicojs](https://github.com/nicojs))\\n- Nikolay Samokhvalov ([@NikolayS](https://github.com/NikolayS))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Power Lin ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Saihajpreet Singh ([@saihaj](https://github.com/saihaj))\\n- Sam Hrncir ([@samhrncir](https://github.com/samhrncir))\\n- Sam Sam ([@sksamuel](https://github.com/sksamuel))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sean Campbell ([@natac13](https://github.com/natac13))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Siemienik Pawel ([@Siemienik](https://github.com/Siemienik))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Tien Vo Xuan ([@tienvx](https://github.com/tienvx))\\n- Tomas Fernandez ([@tomsfernandez](https://github.com/tomsfernandez))\\n- Vamsi Krishna Reddy Satti ([@vamsi3](https://github.com/vamsi3))\\n- Welly ([@wellyshen](https://github.com/wellyshen))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yash Totale ([@YashTotale](https://github.com/YashTotale))\\n- Yuri Sulyma ([@ysulyma](https://github.com/ysulyma))\\n- Yuval Hazaz ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@aukokyong](https://github.com/aukokyong)\\n- [@philipp985](https://github.com/philipp985)\\n- [@roydukkey](https://github.com/roydukkey)\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- [@saydo17](https://github.com/saydo17)\\n- [@tokarchyn](https://github.com/tokarchyn)\\n- [@wolf20482](https://github.com/wolf20482)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- \xc7a\u011flar Tural\u0131 ([@caglarturali](https://github.com/caglarturali))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.70","metadata":{"permalink":"/changelog/2.0.0-alpha.70","source":"@site/changelog/source/2.0.0-alpha.70.md","title":"2.0.0-alpha.70","description":"New Feature","date":"2020-12-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aar\xf3n Garc\xeda Herv\xe1s","alias":"aarongarciah","url":"https://github.com/aarongarciah","imageURL":"https://github.com/aarongarciah.png","key":"aarongarciah","page":null},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Alex1304","alias":"Alex1304","url":"https://github.com/Alex1304","imageURL":"https://github.com/Alex1304.png","key":"Alex1304","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"borool","alias":"borool","url":"https://github.com/borool","imageURL":"https://github.com/borool.png","key":"borool","page":null},{"name":"Cindy Gu","alias":"cindygu4","url":"https://github.com/cindygu4","imageURL":"https://github.com/cindygu4.png","key":"cindygu4","page":null},{"name":"davidmauskop","alias":"davidmauskop","url":"https://github.com/davidmauskop","imageURL":"https://github.com/davidmauskop.png","key":"davidmauskop","page":null},{"name":"Derric Gilling","alias":"dgilling","url":"https://github.com/dgilling","imageURL":"https://github.com/dgilling.png","key":"dgilling","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Hadrien Milano","alias":"hmil","url":"https://github.com/hmil","imageURL":"https://github.com/hmil.png","key":"hmil","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lo\xefc Poullain","alias":"LoicPoullain","url":"https://github.com/LoicPoullain","imageURL":"https://github.com/LoicPoullain.png","key":"LoicPoullain","page":null},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},{"name":"Matija Sosic","alias":"matijaSos","url":"https://github.com/matijaSos","imageURL":"https://github.com/matijaSos.png","key":"matijaSos","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},{"name":"Rami","alias":"Romstar","url":"https://github.com/Romstar","imageURL":"https://github.com/Romstar.png","key":"Romstar","page":null},{"name":"Sarthak kundra","alias":"sarthakkundra","url":"https://github.com/sarthakkundra","imageURL":"https://github.com/sarthakkundra.png","key":"sarthakkundra","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"Kaartic Sivaraam","alias":"sivaraam","url":"https://github.com/sivaraam","imageURL":"https://github.com/sivaraam.png","key":"sivaraam","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Varshit Shah","alias":"Varshit07","url":"https://github.com/Varshit07","imageURL":"https://github.com/Varshit07.png","key":"Varshit07","page":null},{"name":"Stephen Woodruff","alias":"woodrufs","url":"https://github.com/woodrufs","imageURL":"https://github.com/woodrufs.png","key":"woodrufs","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-12-17T20:00","authors":["aarongarciah","aeneasr","Alex1304","ArtFlag","borool","cindygu4","davidmauskop","dgilling","francoischalifour","hmil","lex111","LoicPoullain","manzinello","matijaSos","mpsq","oriooctopus","Romstar","sarthakkundra","Simek","sivaraam","slorber","Varshit07","woodrufs"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"nextItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3932](https://github.com/facebook/docusaurus/pull/3932) feat(v2): Add Root theme element ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3916](https://github.com/facebook/docusaurus/pull/3916) feat(v2): Add localeDropdown navbar item type + i18n localeConfigs field ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#3888](https://github.com/facebook/docusaurus/pull/3888) feat(v2): add custom props for consumption by swizzled sidebar ([@oriooctopus](https://github.com/oriooctopus))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n- Other\\n - [#3827](https://github.com/facebook/docusaurus/pull/3827) feat(v2): add automated canary releases ([@slorber](https://github.com/slorber))\\n - [#3761](https://github.com/facebook/docusaurus/pull/3761) feat(v2): Added Lighthouse CI to PR checks ([@sarthakkundra](https://github.com/sarthakkundra))\\n- `docusaurus-1.x`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3325](https://github.com/facebook/docusaurus/pull/3325) feat(v2): core v2 i18n support + Docusaurus site Crowdin integration ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3922](https://github.com/facebook/docusaurus/pull/3922) fix(v2): fix navbar items issue on Windows? ([@slorber](https://github.com/slorber))\\n - [#3920](https://github.com/facebook/docusaurus/pull/3920) fix(v2): i18n translation extractor should handle JSX formatting edge cases better ([@slorber](https://github.com/slorber))\\n - [#3896](https://github.com/facebook/docusaurus/pull/3896) fix(v2): do not treat at-rules during CSS minification ([@lex111](https://github.com/lex111))\\n - [#3869](https://github.com/facebook/docusaurus/pull/3869) fix(v2): load plugin commands async to fix broken plugin CLI commands `docs:version` ([@aeneasr](https://github.com/aeneasr))\\n- `docusaurus-theme-classic`\\n - [#3921](https://github.com/facebook/docusaurus/pull/3921) fix(v2): remove useless console log ([@slorber](https://github.com/slorber))\\n - [#3895](https://github.com/facebook/docusaurus/pull/3895) fix(v2): use proper element for pagination nav label ([@lex111](https://github.com/lex111))\\n - [#3882](https://github.com/facebook/docusaurus/pull/3882) fix(v2): improve Footer structure, add class names, use Infima transition ([@Simek](https://github.com/Simek))\\n - [#3877](https://github.com/facebook/docusaurus/pull/3877) fix(v2): dynamic dark mode detection without toggle widget ([@hmil](https://github.com/hmil))\\n - [#3854](https://github.com/facebook/docusaurus/pull/3854) fix(v2): refactor icons in theme-classic, fix swizzle issue ([@Simek](https://github.com/Simek))\\n - [#3823](https://github.com/facebook/docusaurus/pull/3823) fix(v2): support rendering of singular tabs ([@aeneasr](https://github.com/aeneasr))\\n - [#3817](https://github.com/facebook/docusaurus/pull/3817) fix(v2): Allow footer logo at attribute to be empty ([@aarongarciah](https://github.com/aarongarciah))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3900](https://github.com/facebook/docusaurus/pull/3900) fix(v2): correct typo in metas generated for Twitter cards ([@mpsq](https://github.com/mpsq))\\n- Other\\n - [#3872](https://github.com/facebook/docusaurus/pull/3872) chore: add missing v1 generated files to ignores ([@Simek](https://github.com/Simek))\\n - [#3833](https://github.com/facebook/docusaurus/pull/3833) fix(v2): temporary: disable crowdin until PR env variable permission fixed ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#3852](https://github.com/facebook/docusaurus/pull/3852) fix(v2): to fix the canary release GH workflow ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3853](https://github.com/facebook/docusaurus/pull/3853) fix(v2): fix DocSearch keyboard navigator ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3837](https://github.com/facebook/docusaurus/pull/3837) fix(v2): update SearchPage styling, fix appearance in dark mode ([@Simek](https://github.com/Simek))\\n - [#3828](https://github.com/facebook/docusaurus/pull/3828) fix(v2): restore Algolia search ([@lex111](https://github.com/lex111))\\n - [#3819](https://github.com/facebook/docusaurus/pull/3819) feat(search): update DocSearch to alpha.31 ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-docs`\\n - [#3839](https://github.com/facebook/docusaurus/pull/3839) fix(v2): remove unnecessary backtick in output ([@sivaraam](https://github.com/sivaraam))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3829](https://github.com/facebook/docusaurus/pull/3829) fix(v2): fix search ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3824](https://github.com/facebook/docusaurus/pull/3824) fix(v2): update notifier dist tag ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3880](https://github.com/facebook/docusaurus/pull/3880) polish(v2): improve docusaurus deploy logs ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3931](https://github.com/facebook/docusaurus/pull/3931) docs(v2): blog.md with docs: false, for blog-only mode ([@Romstar](https://github.com/Romstar))\\n- [#3924](https://github.com/facebook/docusaurus/pull/3924) docs(v2): Removed unnecessary closing parenthesis ([@Varshit07](https://github.com/Varshit07))\\n- [#3928](https://github.com/facebook/docusaurus/pull/3928) docs(v2): add FoalTS to showcase page ([@LoicPoullain](https://github.com/LoicPoullain))\\n- [#3899](https://github.com/facebook/docusaurus/pull/3899) docs(v2): Move sidebar content to its own page ([@ArtFlag](https://github.com/ArtFlag))\\n- [#3856](https://github.com/facebook/docusaurus/pull/3856) docs(v2): typo ([@borool](https://github.com/borool))\\n- [#3891](https://github.com/facebook/docusaurus/pull/3891) docs(v2): Wrap section about custom domains in :::info ([@Alex1304](https://github.com/Alex1304))\\n- [#3871](https://github.com/facebook/docusaurus/pull/3871) docs(v2): missing `<ColorGenerator/>` mdx import ([@slorber](https://github.com/slorber))\\n- [#3873](https://github.com/facebook/docusaurus/pull/3873) docs(v2): From docusaurus-migrate to @docusaurus/migrate ([@manzinello](https://github.com/manzinello))\\n- [#3867](https://github.com/facebook/docusaurus/pull/3867) docs(v2): Add docusaurus-plugin-moesif to community plugins ([@dgilling](https://github.com/dgilling))\\n- [#3851](https://github.com/facebook/docusaurus/pull/3851) docs(v2): Fixed Typo: Hided => Hidden ([@woodrufs](https://github.com/woodrufs))\\n- [#3832](https://github.com/facebook/docusaurus/pull/3832) docs(v2): Add wasp to showcase ([@matijaSos](https://github.com/matijaSos))\\n- [#3813](https://github.com/facebook/docusaurus/pull/3813) docs(v2): render deployment doc ([@davidmauskop](https://github.com/davidmauskop))\\n- [#3835](https://github.com/facebook/docusaurus/pull/3835) docs(v2): update Client API docs page ([@Simek](https://github.com/Simek))\\n- [#3831](https://github.com/facebook/docusaurus/pull/3831) docs(v2): Docs refactoring and reorganization ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3912](https://github.com/facebook/docusaurus/pull/3912) chore(v2): remove docs for alpha v64 ([@lex111](https://github.com/lex111))\\n - [#3907](https://github.com/facebook/docusaurus/pull/3907) chore(ci): fix canary release filtering ([@slorber](https://github.com/slorber))\\n - [#3902](https://github.com/facebook/docusaurus/pull/3902) chore(deps): bump ini from 1.3.5 to 1.3.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3884](https://github.com/facebook/docusaurus/pull/3884) chore(ci): increase Lighthouse CI max_timeout ([@Simek](https://github.com/Simek))\\n - [#3883](https://github.com/facebook/docusaurus/pull/3883) chore(v2): remove docs for alpha v62-63 ([@lex111](https://github.com/lex111))\\n - [#3863](https://github.com/facebook/docusaurus/pull/3863) chore(ci): run V1 Build and Migration CLI tests conditionally on CI ([@Simek](https://github.com/Simek))\\n - [#3861](https://github.com/facebook/docusaurus/pull/3861) chore(ci): reduce number of jobs, remove build from lighthouse pipeline ([@Simek](https://github.com/Simek))\\n - [#3860](https://github.com/facebook/docusaurus/pull/3860) chore: add Yarn v2 cache directory to ignores ([@Simek](https://github.com/Simek))\\n - [#3858](https://github.com/facebook/docusaurus/pull/3858) chore(v2): disable Crowdin for deploy previews ([@slorber](https://github.com/slorber))\\n - [#3857](https://github.com/facebook/docusaurus/pull/3857) fix(v2): fix Crowdin ci commands ([@slorber](https://github.com/slorber))\\n - [#3849](https://github.com/facebook/docusaurus/pull/3849) chore(ci): CI scripts cleanup, add Node 14 runs, bump checkout action ([@Simek](https://github.com/Simek))\\n - [#3850](https://github.com/facebook/docusaurus/pull/3850) chore(v2): i18n CI: add write-translations call ([@slorber](https://github.com/slorber))\\n - [#3848](https://github.com/facebook/docusaurus/pull/3848) chore(v2): fix CI typo ([@slorber](https://github.com/slorber))\\n - [#3847](https://github.com/facebook/docusaurus/pull/3847) chore(v2): wire production Crowdin project + setup ([@slorber](https://github.com/slorber))\\n - [#3846](https://github.com/facebook/docusaurus/pull/3846) chore(v2): fix PRs not able to add lighthouse/buildsize comment from works ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3865](https://github.com/facebook/docusaurus/pull/3865) chore(v2): fix ignore paths and Prettier commands in themes ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#3844](https://github.com/facebook/docusaurus/pull/3844) chore(v2): fix several lint warnings, add missing types, cleanup ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#3838](https://github.com/facebook/docusaurus/pull/3838) refactor(v2): extract site title formatter to theme-common util ([@Simek](https://github.com/Simek))\\n\\n## Committers: 23\\n\\n- Aar\xf3n Garc\xeda Herv\xe1s ([@aarongarciah](https://github.com/aarongarciah))\\n- Alex1304 ([@Alex1304](https://github.com/Alex1304))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Cindy Gu ([@cindygu4](https://github.com/cindygu4))\\n- Derric Gilling ([@dgilling](https://github.com/dgilling))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Hadrien Milano ([@hmil](https://github.com/hmil))\\n- Kaartic Sivaraam ([@sivaraam](https://github.com/sivaraam))\\n- Lo\xefc Poullain ([@LoicPoullain](https://github.com/LoicPoullain))\\n- Matija Sosic ([@matijaSos](https://github.com/matijaSos))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Rami ([@Romstar](https://github.com/Romstar))\\n- Sarthak kundra ([@sarthakkundra](https://github.com/sarthakkundra))\\n- Stephen Woodruff ([@woodrufs](https://github.com/woodrufs))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varshit Shah ([@Varshit07](https://github.com/Varshit07))\\n- [@borool](https://github.com/borool)\\n- [@davidmauskop](https://github.com/davidmauskop)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))"},{"id":"/2.0.0-alpha.69","metadata":{"permalink":"/changelog/2.0.0-alpha.69","source":"@site/changelog/source/2.0.0-alpha.69.md","title":"2.0.0-alpha.69","description":"New Feature","date":"2020-11-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ma\xebl Nison","alias":"arcanis","url":"https://github.com/arcanis","imageURL":"https://github.com/arcanis.png","key":"arcanis","page":null},{"name":"camiluc","alias":"camiluc","url":"https://github.com/camiluc","imageURL":"https://github.com/camiluc.png","key":"camiluc","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-24T20:00","authors":["arcanis","camiluc","lex111","Simek","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"nextItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3802](https://github.com/facebook/docusaurus/pull/3802) feat(v2): add baseUrlIssueBanner configuration to disable banner ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3807](https://github.com/facebook/docusaurus/pull/3807) chore(v2): upgrade Infima to v0.2.0-alpha.18 ([@lex111](https://github.com/lex111))\\n - [#3806](https://github.com/facebook/docusaurus/pull/3806) fix(v2): remove aria-hidden attr from anchor link of heading ([@lex111](https://github.com/lex111))\\n - [#3784](https://github.com/facebook/docusaurus/pull/3784) fix(v2): fix missing logo in dark theme when darkSrc was not set ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3804](https://github.com/facebook/docusaurus/pull/3804) fix(v2): Algolia: allow contextualSearch + facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3796](https://github.com/facebook/docusaurus/pull/3796) Adds createRequire for preset resolution ([@arcanis](https://github.com/arcanis))\\n\\n## :memo: Documentation\\n\\n- [#3803](https://github.com/facebook/docusaurus/pull/3803) docs(v2): fix docusaurus init issue when not using @latest ([@slorber](https://github.com/slorber))\\n- [#3785](https://github.com/facebook/docusaurus/pull/3785) docs(v2): recommend Docusaurus 2 usage ([@slorber](https://github.com/slorber))\\n- [#3783](https://github.com/facebook/docusaurus/pull/3783) docs(v2): remove @next tags needed to install v2 packages ([@slorber](https://github.com/slorber))\\n- [#3781](https://github.com/facebook/docusaurus/pull/3781) docs(v2): rename zeit to vercel ([@camiluc](https://github.com/camiluc))\\n\\n## :house: Internal\\n\\n- [#3800](https://github.com/facebook/docusaurus/pull/3800) chore(v2): remove useless stylelint-copyright peerDependency ([@slorber](https://github.com/slorber))\\n- [#3786](https://github.com/facebook/docusaurus/pull/3786) chore(v2): ensure publishConfig.access presence with tests ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ma\xebl Nison ([@arcanis](https://github.com/arcanis))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@camiluc](https://github.com/camiluc)"},{"id":"/2.0.0-alpha.68","metadata":{"permalink":"/changelog/2.0.0-alpha.68","source":"@site/changelog/source/2.0.0-alpha.68.md","title":"2.0.0-alpha.68","description":"New Feature","date":"2020-11-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"iAmir","alias":"AmyrAhmady","url":"https://github.com/AmyrAhmady","imageURL":"https://github.com/AmyrAhmady.png","key":"AmyrAhmady","page":null},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"Beno\xeet Lemaire","alias":"belemaire","url":"https://github.com/belemaire","imageURL":"https://github.com/belemaire.png","key":"belemaire","page":null},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},{"name":"David Goss","alias":"davidjgoss","url":"https://github.com/davidjgoss","imageURL":"https://github.com/davidjgoss.png","key":"davidjgoss","page":null},{"name":"Bright Egbo","alias":"egbobright","url":"https://github.com/egbobright","imageURL":"https://github.com/egbobright.png","key":"egbobright","page":null},{"name":"Hai","alias":"haivp3010","url":"https://github.com/haivp3010","imageURL":"https://github.com/haivp3010.png","key":"haivp3010","page":null},{"name":"Anh Hong","alias":"hong4rc","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":"hong4rc","page":null},{"name":"Jainam Chirag Shah","alias":"jcs98","url":"https://github.com/jcs98","imageURL":"https://github.com/jcs98.png","key":"jcs98","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Roman Bug","alias":"ka1bi4","url":"https://github.com/ka1bi4","imageURL":"https://github.com/ka1bi4.png","key":"ka1bi4","page":null},{"name":"kenve","alias":"kenve","url":"https://github.com/kenve","imageURL":"https://github.com/kenve.png","key":"kenve","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nate Giraudeau","alias":"nategiraudeau","url":"https://github.com/nategiraudeau","imageURL":"https://github.com/nategiraudeau.png","key":"nategiraudeau","page":null},{"name":"Nico Domino","alias":"ndom91","url":"https://github.com/ndom91","imageURL":"https://github.com/ndom91.png","key":"ndom91","page":null},{"name":"Rhys Arkins","alias":"rarkins","url":"https://github.com/rarkins","imageURL":"https://github.com/rarkins.png","key":"rarkins","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},{"name":"Gergely Sinka","alias":"sigewuzhere","url":"https://github.com/sigewuzhere","imageURL":"https://github.com/sigewuzhere.png","key":"sigewuzhere","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stephen McElhinney","alias":"smcelhinney","url":"https://github.com/smcelhinney","imageURL":"https://github.com/smcelhinney.png","key":"smcelhinney","page":null},{"name":"Thakur Karthik","alias":"ThakurKarthik","url":"https://github.com/ThakurKarthik","imageURL":"https://github.com/ThakurKarthik.png","key":"ThakurKarthik","page":null},{"name":"Marc Rabat Pla","alias":"vanbasten17","url":"https://github.com/vanbasten17","imageURL":"https://github.com/vanbasten17.png","key":"vanbasten17","page":null},{"name":"Shenwei Wang","alias":"weareoutman","url":"https://github.com/weareoutman","imageURL":"https://github.com/weareoutman.png","key":"weareoutman","page":null},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T20:00","authors":["AmyrAhmady","artemkovalyov","belemaire","charleskorn","davidjgoss","egbobright","haivp3010","hong4rc","jcs98","juzhiyuan","ka1bi4","kenve","lex111","nategiraudeau","ndom91","rarkins","SamChou19815","sammychinedu2ky","sigewuzhere","Simek","slorber","smcelhinney","ThakurKarthik","vanbasten17","weareoutman","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"nextItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#3717](https://github.com/facebook/docusaurus/pull/3717) feat(v2): official CodeSandbox support ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n- `docusaurus-init`\\n - [#3729](https://github.com/facebook/docusaurus/pull/3729) feat(v2): allow init project via npm ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3730](https://github.com/facebook/docusaurus/pull/3730) feat(v2): add ThemedImage component ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3716](https://github.com/facebook/docusaurus/pull/3716) feat(v2): introduce new minification of CSS bundle ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3694](https://github.com/facebook/docusaurus/pull/3694) feat(v2): Added the ability to specify GIT_PASS in deploy command (for CI purposes) ([@smcelhinney](https://github.com/smcelhinney))\\n - [#3621](https://github.com/facebook/docusaurus/pull/3621) feat(v2): baseUrl config issues: show help message if css/js can\'t load ([@jcs98](https://github.com/jcs98))\\n - [#3594](https://github.com/facebook/docusaurus/pull/3594) feat(v2): add support for key,cert in https ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3705](https://github.com/facebook/docusaurus/pull/3705) feat(v2): add support for sync to npm2yarn tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3658](https://github.com/facebook/docusaurus/pull/3658) feat(v2): onBrokenMarkdownLinks config ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- `docusaurus-theme-classic`\\n - [#3640](https://github.com/facebook/docusaurus/pull/3640) feat(v2): add skip to content link ([@lex111](https://github.com/lex111))\\n - [#3615](https://github.com/facebook/docusaurus/pull/3615) feat(v2): add ability to hide doc sidebar ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3749](https://github.com/facebook/docusaurus/pull/3749) fix(v2): add support for interleaving Markdown in code blocks ([@lex111](https://github.com/lex111))\\n - [#3739](https://github.com/facebook/docusaurus/pull/3739) fix(v2): add support for prefers-reduced-motion in hideable sidebar ([@lex111](https://github.com/lex111))\\n - [#3726](https://github.com/facebook/docusaurus/pull/3726) fix(v2): add thin scrollbar to proper element in TOC ([@lex111](https://github.com/lex111))\\n - [#3681](https://github.com/facebook/docusaurus/pull/3681) Revert \\"refactor(v2): improve regex matching code-block title\\" ([@lex111](https://github.com/lex111))\\n - [#3662](https://github.com/facebook/docusaurus/pull/3662) fix(v2): navbar dropdown crash when item.to is undefined ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#3669](https://github.com/facebook/docusaurus/pull/3669) fix(v2): make scrollbar styles consistent ([@nategiraudeau](https://github.com/nategiraudeau))\\n - [#3666](https://github.com/facebook/docusaurus/pull/3666) fix(v2): make optional title for footer links column ([@lex111](https://github.com/lex111))\\n - [#3647](https://github.com/facebook/docusaurus/pull/3647) fix(v2): do not set height for mobile dropdown during build ([@lex111](https://github.com/lex111))\\n - [#3650](https://github.com/facebook/docusaurus/pull/3650) fix(v2): add landmark for skip to content link ([@lex111](https://github.com/lex111))\\n - [#3627](https://github.com/facebook/docusaurus/pull/3627) fix(v2): disable tabbing on hidden doc sidebar ([@lex111](https://github.com/lex111))\\n - [#3637](https://github.com/facebook/docusaurus/pull/3637) fix(v2): wrap code blocks on print ([@haivp3010](https://github.com/haivp3010))\\n - [#3603](https://github.com/facebook/docusaurus/pull/3603) fix(v2): animate dropdown properly ([@lex111](https://github.com/lex111))\\n - [#3611](https://github.com/facebook/docusaurus/pull/3611) fix(v2): Added back support for optional logo field in theme-classic navbarConfig ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3763](https://github.com/facebook/docusaurus/pull/3763) refactor(v2): various markup improvements ([@lex111](https://github.com/lex111))\\n - [#3724](https://github.com/facebook/docusaurus/pull/3724) fix(v2): add support for non-ASCII chars in anchor link scroll ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3723](https://github.com/facebook/docusaurus/pull/3723) fix(v2): restore prefetch functionality ([@lex111](https://github.com/lex111))\\n- Other\\n - [#3760](https://github.com/facebook/docusaurus/pull/3760) fix(v2): codesandbox generated examples should use published init package ([@slorber](https://github.com/slorber))\\n - [#3701](https://github.com/facebook/docusaurus/pull/3701) fix(v2): limit images height on showcase page ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3757](https://github.com/facebook/docusaurus/pull/3757) fix(v2): escape alt text in img tag ([@lex111](https://github.com/lex111))\\n - [#3653](https://github.com/facebook/docusaurus/pull/3653) fix(v2): handle multiple asset links in one line properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#3721](https://github.com/facebook/docusaurus/pull/3721) fix(v2): use swizzled SearchPage component if any ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3704](https://github.com/facebook/docusaurus/pull/3704) refactor(v2): allow adding plugins depending on condition ([@lex111](https://github.com/lex111))\\n - [#3691](https://github.com/facebook/docusaurus/pull/3691) fix(v2): use SVGO in webpack SVGR loader ([@charleskorn](https://github.com/charleskorn))\\n - [#3667](https://github.com/facebook/docusaurus/pull/3667) fix(v2): Fix typo in BaseUrlSuggestionWarning ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-utils`\\n - [#3703](https://github.com/facebook/docusaurus/pull/3703) fix(v2): ignore export declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#3639](https://github.com/facebook/docusaurus/pull/3639) fix(v2): restore infinite scroll pagination on search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3622](https://github.com/facebook/docusaurus/pull/3622) fix(v2): docusaurus start --poll 500 should work + better config load failure error ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3765](https://github.com/facebook/docusaurus/pull/3765) chore(v2): replace wait-file with wait-on to reduce npm warnings ([@lex111](https://github.com/lex111))\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3609](https://github.com/facebook/docusaurus/pull/3609) refactor(v2): Improve SSR error message: log page path ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3764](https://github.com/facebook/docusaurus/pull/3764) refactor(v2): make accessible anchor links from keyboard ([@lex111](https://github.com/lex111))\\n - [#3745](https://github.com/facebook/docusaurus/pull/3745) refactor(v2): introduce Logo component, remove useLogo hook ([@Simek](https://github.com/Simek))\\n - [#3706](https://github.com/facebook/docusaurus/pull/3706) refactor(v2): render all tab panels at once ([@lex111](https://github.com/lex111))\\n - [#3712](https://github.com/facebook/docusaurus/pull/3712) chore(v2): upgrade Infima to v0.2.0-alpha.15 ([@lex111](https://github.com/lex111))\\n - [#3685](https://github.com/facebook/docusaurus/pull/3685) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3674](https://github.com/facebook/docusaurus/pull/3674) feat(v2): add additional wrapper class to blog pages ([@Simek](https://github.com/Simek))\\n - [#3671](https://github.com/facebook/docusaurus/pull/3671) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3654](https://github.com/facebook/docusaurus/pull/3654) refactor(v2): clean up code blocks ([@lex111](https://github.com/lex111))\\n - [#3649](https://github.com/facebook/docusaurus/pull/3649) refactor(v2): make code blocks scrollable from keyboard ([@lex111](https://github.com/lex111))\\n - [#3626](https://github.com/facebook/docusaurus/pull/3626) refactor(v2): remove focus outline from mouse users ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#3709](https://github.com/facebook/docusaurus/pull/3709) chore(v2): adjust website npm package ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3707](https://github.com/facebook/docusaurus/pull/3707) chore(v2): upgrade Infima to v0.2.0-alpha.14 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3638](https://github.com/facebook/docusaurus/pull/3638) chore(v2): migrate hapi/joi to joi ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`\\n - [#3604](https://github.com/facebook/docusaurus/pull/3604) refactor(v2): use new way to get versions for search page ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3762](https://github.com/facebook/docusaurus/pull/3762) Adding ConfigCat to showcase ([@sigewuzhere](https://github.com/sigewuzhere))\\n - [#3750](https://github.com/facebook/docusaurus/pull/3750) docs(v2): add npm2yarn to typescript install command ([@davidjgoss](https://github.com/davidjgoss))\\n - [#3743](https://github.com/facebook/docusaurus/pull/3743) docs(v2): convert teams page to MDX ([@slorber](https://github.com/slorber))\\n - [#3737](https://github.com/facebook/docusaurus/pull/3737) docs(v2): add Inline SVG color override example ([@Simek](https://github.com/Simek))\\n - [#3718](https://github.com/facebook/docusaurus/pull/3718) docs(v2): showcase Botonic ([@vanbasten17](https://github.com/vanbasten17))\\n - [#3696](https://github.com/facebook/docusaurus/pull/3696) docs(v2): normalize showcase preview images height ([@Simek](https://github.com/Simek))\\n - [#3699](https://github.com/facebook/docusaurus/pull/3699) docs(v2): deployment should use mdx extension ([@slorber](https://github.com/slorber))\\n - [#3695](https://github.com/facebook/docusaurus/pull/3695) docs(v2): add React Native website to the showcase ([@Simek](https://github.com/Simek))\\n - [#3645](https://github.com/facebook/docusaurus/pull/3645) Update Docusaurus v2 Showcase ([@ndom91](https://github.com/ndom91))\\n - [#3644](https://github.com/facebook/docusaurus/pull/3644) docs(v2): update the link of joi ([@kenve](https://github.com/kenve))\\n - [#3636](https://github.com/facebook/docusaurus/pull/3636) docs(v2): fix some misspellings ([@ka1bi4](https://github.com/ka1bi4))\\n - [#3630](https://github.com/facebook/docusaurus/pull/3630) docs: remove runme ([@juzhiyuan](https://github.com/juzhiyuan))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3624](https://github.com/facebook/docusaurus/pull/3624) Fix typo in remark-plugin-npm2yarn documentation ([@belemaire](https://github.com/belemaire))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3769](https://github.com/facebook/docusaurus/pull/3769) docs(v2): fix statements background, update footer background ([@Simek](https://github.com/Simek))\\n - [#3744](https://github.com/facebook/docusaurus/pull/3744) chore(v2): add build size bot workflow GitHub CI workflow ([@jcs98](https://github.com/jcs98))\\n - [#3741](https://github.com/facebook/docusaurus/pull/3741) chore: update yarn lock again ([@slorber](https://github.com/slorber))\\n - [#3740](https://github.com/facebook/docusaurus/pull/3740) chore: update yarn lock ([@slorber](https://github.com/slorber))\\n - [#3738](https://github.com/facebook/docusaurus/pull/3738) chore(internal): add yarn deduplicate script, cleanup lock ([@Simek](https://github.com/Simek))\\n - [#3732](https://github.com/facebook/docusaurus/pull/3732) fix(internal): fix clear script from the main package.json ([@Simek](https://github.com/Simek))\\n - [#3708](https://github.com/facebook/docusaurus/pull/3708) chore(v2): remove docs for alpha v60-61 ([@lex111](https://github.com/lex111))\\n - [#3693](https://github.com/facebook/docusaurus/pull/3693) fix(v2): fix website scripts on Windows by using cross-env ([@Simek](https://github.com/Simek))\\n - [#3673](https://github.com/facebook/docusaurus/pull/3673) test(e2e): dogfood Yarn with enableGlobalCache ([@ylemkimon](https://github.com/ylemkimon))\\n - [#3641](https://github.com/facebook/docusaurus/pull/3641) misc: fix unbound env variable in test release script ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `lqip-loader`\\n - [#3766](https://github.com/facebook/docusaurus/pull/3766) chore(v2): fix several npm warnings ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3753](https://github.com/facebook/docusaurus/pull/3753) chore(v2): fix mismatch peer dependency in MDX loader ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3742](https://github.com/facebook/docusaurus/pull/3742) chore(v2): pin version of babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3734](https://github.com/facebook/docusaurus/pull/3734) chore(v2): downgrade babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3714](https://github.com/facebook/docusaurus/pull/3714) chore(v2): fix prettier formatting ([@slorber](https://github.com/slorber))\\n - [#3619](https://github.com/facebook/docusaurus/pull/3619) refactor(v2): add better error message for yarn workspace/monorepo/terser issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3727](https://github.com/facebook/docusaurus/pull/3727) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#3715](https://github.com/facebook/docusaurus/pull/3715) chore(v2): update Browserslist ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`\\n - [#3675](https://github.com/facebook/docusaurus/pull/3675) fix(v2): add missing \'react\' and \'webpack\' peer dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3613](https://github.com/facebook/docusaurus/pull/3613) fix: add repository metadata to all packages ([@rarkins](https://github.com/rarkins))\\n\\n## Committers: 26\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anh Hong ([@hong4rc](https://github.com/hong4rc))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Beno\xeet Lemaire ([@belemaire](https://github.com/belemaire))\\n- Bright Egbo ([@egbobright](https://github.com/egbobright))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- David Goss ([@davidjgoss](https://github.com/davidjgoss))\\n- Gergely Sinka ([@sigewuzhere](https://github.com/sigewuzhere))\\n- Hai ([@haivp3010](https://github.com/haivp3010))\\n- Jainam Chirag Shah ([@jcs98](https://github.com/jcs98))\\n- Marc Rabat Pla ([@vanbasten17](https://github.com/vanbasten17))\\n- Nate Giraudeau ([@nategiraudeau](https://github.com/nategiraudeau))\\n- Nico Domino ([@ndom91](https://github.com/ndom91))\\n- Rhys Arkins ([@rarkins](https://github.com/rarkins))\\n- Roman Bug ([@ka1bi4](https://github.com/ka1bi4))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shenwei Wang ([@weareoutman](https://github.com/weareoutman))\\n- Stephen McElhinney ([@smcelhinney](https://github.com/smcelhinney))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thakur Karthik ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- iAmir ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- kenve ([@kenve](https://github.com/kenve))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.67","metadata":{"permalink":"/changelog/2.0.0-alpha.67","source":"@site/changelog/source/2.0.0-alpha.67.md","title":"2.0.0-alpha.67","description":"Failed release","date":"2020-11-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"nextItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nFailed release"},{"id":"/2.0.0-alpha.66","metadata":{"permalink":"/changelog/2.0.0-alpha.66","source":"@site/changelog/source/2.0.0-alpha.66.md","title":"2.0.0-alpha.66","description":"New Feature","date":"2020-10-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},{"name":"Abhishek Tiwari","alias":"abhishektiwari","url":"https://github.com/abhishektiwari","imageURL":"https://github.com/abhishektiwari.png","key":"abhishektiwari","page":null},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},{"name":"honlyHuang","alias":"honlyHuang","url":"https://github.com/honlyHuang","imageURL":"https://github.com/honlyHuang.png","key":"honlyHuang","page":null},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},{"name":"John Gracey","alias":"jagracey","url":"https://github.com/jagracey","imageURL":"https://github.com/jagracey.png","key":"jagracey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},{"name":"Russ Taylor","alias":"russtaylor","url":"https://github.com/russtaylor","imageURL":"https://github.com/russtaylor.png","key":"russtaylor","page":null},{"name":"SaintMalik","alias":"saintmalik","url":"https://github.com/saintmalik","imageURL":"https://github.com/saintmalik.png","key":"saintmalik","page":null},{"name":"Shubham Zanwar","alias":"shubhamzanwar","url":"https://github.com/shubhamzanwar","imageURL":"https://github.com/shubhamzanwar.png","key":"shubhamzanwar","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Umair Kamran","alias":"UmairKamran","url":"https://github.com/UmairKamran","imageURL":"https://github.com/UmairKamran.png","key":"UmairKamran","page":null},{"name":"Utkarsh Goel","alias":"utkarsh867","url":"https://github.com/utkarsh867","imageURL":"https://github.com/utkarsh867.png","key":"utkarsh867","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-19T20:00","authors":["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"nextItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3593](https://github.com/facebook/docusaurus/pull/3593) feat(v2): blog sidebar ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#3469](https://github.com/facebook/docusaurus/pull/3469) feat(v2): Extract npm2yarn plugin ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3580](https://github.com/facebook/docusaurus/pull/3580) feat(v2): allow to define custom CSS class for Tabs component ([@Simek](https://github.com/Simek))\\n - [#3553](https://github.com/facebook/docusaurus/pull/3553) feat(v2): make dropdown menu collapsible on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-migrate`, `docusaurus-types`, `docusaurus`\\n - [#3573](https://github.com/facebook/docusaurus/pull/3573) feat(v2): Add themeConfig.noIndex option #3528 ([@hamzahamidi](https://github.com/hamzahamidi))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3543](https://github.com/facebook/docusaurus/pull/3543) feat(v2): persist docs preferred version ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3548](https://github.com/facebook/docusaurus/pull/3548) feat(v2): version dropdown before/after items + move site \\"All Versions\\" link ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#3545](https://github.com/facebook/docusaurus/pull/3545) feat(v2): site client modules ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3539](https://github.com/facebook/docusaurus/pull/3539) feat(v2): doc navbar item type ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3607](https://github.com/facebook/docusaurus/pull/3607) fix(v2): fix error with required href attr of link in mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3602](https://github.com/facebook/docusaurus/pull/3602) fix(v2): make dropdown button clickable with mouse ([@lex111](https://github.com/lex111))\\n - [#3601](https://github.com/facebook/docusaurus/pull/3601) fix(v2): fix table-of-content scroll highlighting issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3599](https://github.com/facebook/docusaurus/pull/3599) fix(v2): remove event listeners on Tabs component unmount ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3531](https://github.com/facebook/docusaurus/pull/3531) fix(v2): Fixes serve cli --port option ([@UmairKamran](https://github.com/UmairKamran))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3585](https://github.com/facebook/docusaurus/pull/3585) refactor(v2): various dropdown improvements ([@lex111](https://github.com/lex111))\\n - [#3588](https://github.com/facebook/docusaurus/pull/3588) refactor(v2): make accessible copy code button from keyboard ([@lex111](https://github.com/lex111))\\n - [#3578](https://github.com/facebook/docusaurus/pull/3578) refactor(v2): apply common behavior to dropdowns ([@lex111](https://github.com/lex111))\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3587](https://github.com/facebook/docusaurus/pull/3587) refactor(v2): various fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3569](https://github.com/facebook/docusaurus/pull/3569) refactor(v2): improve broken links error message ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3576](https://github.com/facebook/docusaurus/pull/3576) docs(v2): removed obsolete \\"you\\" identifier ([@christian-bromann](https://github.com/christian-bromann))\\n - [#3589](https://github.com/facebook/docusaurus/pull/3589) docs(v2): add taro to users ([@honlyHuang](https://github.com/honlyHuang))\\n - [#3565](https://github.com/facebook/docusaurus/pull/3565) docs(v2): deployment, add required GitHub token scope infos ([@russtaylor](https://github.com/russtaylor))\\n - [#3574](https://github.com/facebook/docusaurus/pull/3574) docs(v2): adding vue-nodegui to users ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n - [#3556](https://github.com/facebook/docusaurus/pull/3556) Added Axioms to users ([@abhishektiwari](https://github.com/abhishektiwari))\\n - [#3558](https://github.com/facebook/docusaurus/pull/3558) docs(v2): embedding real source code in MDX as a code block ([@slorber](https://github.com/slorber))\\n - [#3555](https://github.com/facebook/docusaurus/pull/3555) docs(v2): add \\"Wisdom\\" dev docs website to showcase. ([@jagracey](https://github.com/jagracey))\\n - [#3532](https://github.com/facebook/docusaurus/pull/3532) docs(v2): change package name in example script ([@MatanBobi](https://github.com/MatanBobi))\\n - [#3538](https://github.com/facebook/docusaurus/pull/3538) docs(v1): added drone for 1.0 #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3533](https://github.com/facebook/docusaurus/pull/3533) docs(v1): Fix broken link in the documentation ([@saintmalik](https://github.com/saintmalik))\\n - [#3534](https://github.com/facebook/docusaurus/pull/3534) docs(v2): Fix url bugs in v2 docs ([@saintmalik](https://github.com/saintmalik))\\n- `docusaurus-theme-classic`\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-search-algolia`\\n - [#3591](https://github.com/facebook/docusaurus/pull/3591) chore(v2): enable new contextual search feature ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3586](https://github.com/facebook/docusaurus/pull/3586) chore(v2): fix/upgrade react types ([@slorber](https://github.com/slorber))\\n - [#3577](https://github.com/facebook/docusaurus/pull/3577) refactor(v2): clarify versions page ([@lex111](https://github.com/lex111))\\n - [#3560](https://github.com/facebook/docusaurus/pull/3560) feat(v2): prevent using remote image urls in showcase ([@slorber](https://github.com/slorber))\\n - [#3554](https://github.com/facebook/docusaurus/pull/3554) fix(v2): use absolute path to manifest file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3394](https://github.com/facebook/docusaurus/pull/3394) refactor(v2): add useThemeConfig hook + cleanup useless theme default values ([@imskr](https://github.com/imskr))\\n\\n## Committers: 17\\n\\n- Abhishek Tiwari ([@abhishektiwari](https://github.com/abhishektiwari))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- John Gracey ([@jagracey](https://github.com/jagracey))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Russ Taylor ([@russtaylor](https://github.com/russtaylor))\\n- SaintMalik ([@saintmalik](https://github.com/saintmalik))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Shubham Zanwar ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Umair Kamran ([@UmairKamran](https://github.com/UmairKamran))\\n- Utkarsh Goel ([@utkarsh867](https://github.com/utkarsh867))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- honlyHuang ([@honlyHuang](https://github.com/honlyHuang))"},{"id":"/2.0.0-alpha.65","metadata":{"permalink":"/changelog/2.0.0-alpha.65","source":"@site/changelog/source/2.0.0-alpha.65.md","title":"2.0.0-alpha.65","description":"New Feature","date":"2020-10-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},{"name":"Henry V\xe9lez","alias":"abadon7","url":"https://github.com/abadon7","imageURL":"https://github.com/abadon7.png","key":"abadon7","page":null},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Andrey Rublev","alias":"anru","url":"https://github.com/anru","imageURL":"https://github.com/anru.png","key":"anru","page":null},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"Jeremy Hager","alias":"jeremyhager","url":"https://github.com/jeremyhager","imageURL":"https://github.com/jeremyhager.png","key":"jeremyhager","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Muskan Kumar","alias":"muskanvk","url":"https://github.com/muskanvk","imageURL":"https://github.com/muskanvk.png","key":"muskanvk","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tim Gates","alias":"timgates42","url":"https://github.com/timgates42","imageURL":"https://github.com/timgates42.png","key":"timgates42","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-02T20:00","authors":["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"nextItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3497](https://github.com/facebook/docusaurus/pull/3497) feat(v2): env variable TERSER_PARALLEL to customize TerserPlugin.parallel ([@aeneasr](https://github.com/aeneasr))\\n - [#3446](https://github.com/facebook/docusaurus/pull/3446) feat(v2): new docusaurus clear command ([@abadon7](https://github.com/abadon7))\\n - [#3485](https://github.com/facebook/docusaurus/pull/3485) feat(v2): Add @theme-init components to user theme ([@edno](https://github.com/edno))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#3467](https://github.com/facebook/docusaurus/pull/3467) feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#3496](https://github.com/facebook/docusaurus/pull/3496) feat(v2): migrate bootstrap components to ts ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3474](https://github.com/facebook/docusaurus/pull/3474) feat(v2): allow to use array of files in customCss field ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3457](https://github.com/facebook/docusaurus/pull/3457) feat(v2): add optional custom wrapper class name for pages based on theme classic Layout ([@Simek](https://github.com/Simek))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3517](https://github.com/facebook/docusaurus/pull/3517) fix(v1): v1 deploy preview should be available ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3498](https://github.com/facebook/docusaurus/pull/3498) fix(v2): fixed props being passed to @svgr/webpack loader ([@anru](https://github.com/anru))\\n- `docusaurus-theme-search-algolia`\\n - [#3456](https://github.com/facebook/docusaurus/pull/3456) fix(v2): use valid value for crossorigin attribute ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#3427](https://github.com/facebook/docusaurus/pull/3427) fix(v2): normalizeUrl edge cases ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-theme-classic`\\n - [#3472](https://github.com/facebook/docusaurus/pull/3472) fix(v2): Show dropdown instead of a single button when there are two versions ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#3441](https://github.com/facebook/docusaurus/pull/3441) fix(v2): fixing typo in error message ([@ayonious](https://github.com/ayonious))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3499](https://github.com/facebook/docusaurus/pull/3499) chore(v2): upgrade Infima to 0.2.0-alpha.13 ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus`\\n - [#3502](https://github.com/facebook/docusaurus/pull/3502) docs(v2): add doc for wrapping theme components with @theme-original and @theme-init ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3473](https://github.com/facebook/docusaurus/pull/3473) misc: add License to the documentation ([@muskanvk](https://github.com/muskanvk))\\n - [#3492](https://github.com/facebook/docusaurus/pull/3492) docs(v2): Added drone.io publish docs #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3479](https://github.com/facebook/docusaurus/pull/3479) docs(v2): remove redundant new line in code block ([@lex111](https://github.com/lex111))\\n - [#3448](https://github.com/facebook/docusaurus/pull/3448) chore(v2): fix theme classic navbar style docs ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-migrate`\\n - [#3504](https://github.com/facebook/docusaurus/pull/3504) chore(v1): move v1 docs inside website-1.x ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3506](https://github.com/facebook/docusaurus/pull/3506) chore(v2): v2 website should make it easy to contribute to upstream docs ([@slorber](https://github.com/slorber))\\n - [#3511](https://github.com/facebook/docusaurus/pull/3511) misc: update CODEOWNERS ([@yangshun](https://github.com/yangshun))\\n - [#3477](https://github.com/facebook/docusaurus/pull/3477) chore(v2): remove alpha 58 doc ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`\\n - [#3453](https://github.com/facebook/docusaurus/pull/3453) test(v2): add protocol relative uri validation test ([@moonrailgun](https://github.com/moonrailgun))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrey Rublev ([@anru](https://github.com/anru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Henry V\xe9lez ([@abadon7](https://github.com/abadon7))\\n- Jeremy Hager ([@jeremyhager](https://github.com/jeremyhager))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Muskan Kumar ([@muskanvk](https://github.com/muskanvk))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tim Gates ([@timgates42](https://github.com/timgates42))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))"},{"id":"/2.0.0-alpha.64","metadata":{"permalink":"/changelog/2.0.0-alpha.64","source":"@site/changelog/source/2.0.0-alpha.64.md","title":"2.0.0-alpha.64","description":"New Feature","date":"2020-09-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ash","alias":"ashscodes","url":"https://github.com/ashscodes","imageURL":"https://github.com/ashscodes.png","key":"ashscodes","page":null},{"name":"josephMG","alias":"josephMG","url":"https://github.com/josephMG","imageURL":"https://github.com/josephMG.png","key":"josephMG","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Rutik Wankhade","alias":"rutikwankhade","url":"https://github.com/rutikwankhade","imageURL":"https://github.com/rutikwankhade.png","key":"rutikwankhade","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-11T20:00","authors":["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"nextItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#3432](https://github.com/facebook/docusaurus/pull/3432) feat(v2): add style property to theme-classic navbar ([@Simek](https://github.com/Simek))\\n - [#3406](https://github.com/facebook/docusaurus/pull/3406) feat(v2): ability to add/override theme html metadatas ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#3426](https://github.com/facebook/docusaurus/pull/3426) feat(v2): add option to add trailing slash to urls in sitemap ([@mpsq](https://github.com/mpsq))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3438](https://github.com/facebook/docusaurus/pull/3438) fix(v2): docusaurus 2 PWA should work under baseurl (deploy previews) ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3435](https://github.com/facebook/docusaurus/pull/3435) fix(v2): fix empty link error message ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#3436](https://github.com/facebook/docusaurus/pull/3436) fix(v2): Correctly resolve sw.js path on windows ([@ashscodes](https://github.com/ashscodes))\\n- `docusaurus-theme-classic`\\n - [#3433](https://github.com/facebook/docusaurus/pull/3433) fix(v2): fix theme-classic announcement bar closeable style ([@Simek](https://github.com/Simek))\\n- `docusaurus-1.x`\\n - [#3429](https://github.com/facebook/docusaurus/pull/3429) fix(v1): versioned_docs and skip-next-release relative path issue ([@josephMG](https://github.com/josephMG))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3418](https://github.com/facebook/docusaurus/pull/3418) fix(v2): reset sidebar state on sidebar changes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3405](https://github.com/facebook/docusaurus/pull/3405) fix(v2): fix debug plugin unscoped inline code global css ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3428](https://github.com/facebook/docusaurus/pull/3428) docs(v2): fix grammar ([@thadguidry](https://github.com/thadguidry))\\n- [#3425](https://github.com/facebook/docusaurus/pull/3425) docs(v2): mention Eta in ssrTemplate section ([@mpsq](https://github.com/mpsq))\\n- [#3423](https://github.com/facebook/docusaurus/pull/3423) docs(v2): minor typo fix ([@rutikwankhade](https://github.com/rutikwankhade))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3439](https://github.com/facebook/docusaurus/pull/3439) chore(v2): fix serialize-javascript security issue by upgrading webpack/workbox ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3401](https://github.com/facebook/docusaurus/pull/3401) chore(deps): bump decompress from 4.2.0 to 4.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 7\\n\\n- Ash ([@ashscodes](https://github.com/ashscodes))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Rutik Wankhade ([@rutikwankhade](https://github.com/rutikwankhade))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- [@josephMG](https://github.com/josephMG)"},{"id":"/2.0.0-alpha.63","metadata":{"permalink":"/changelog/2.0.0-alpha.63","source":"@site/changelog/source/2.0.0-alpha.63.md","title":"2.0.0-alpha.63","description":"New Feature","date":"2020-09-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Sam Ko","alias":"samsisle","url":"https://github.com/samsisle","imageURL":"https://github.com/samsisle.png","key":"samsisle","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-03T20:00","authors":["mpsq","samsisle","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"nextItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3387](https://github.com/facebook/docusaurus/pull/3387) feat(v2): allow users to specify a custom ssr HTML template ([@mpsq](https://github.com/mpsq))\\n- `docusaurus-plugin-debug`\\n - [#3392](https://github.com/facebook/docusaurus/pull/3392) feat(v2): officially release @docusaurus/plugin-debug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3388](https://github.com/facebook/docusaurus/pull/3388) feat(v2): add isCloseable property for theme-classic announcement bar ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3373](https://github.com/facebook/docusaurus/pull/3373) feat(v2): docs options.onlyIncludeVersions ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3397](https://github.com/facebook/docusaurus/pull/3397) fix(v2): DocSearch should keep working after a new release (part 2/2) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3393](https://github.com/facebook/docusaurus/pull/3393) fix(v2): DocSearch should keep working after a new release (part 1/2) ([@slorber](https://github.com/slorber))\\n - [#3381](https://github.com/facebook/docusaurus/pull/3381) fix(v2): alpha 62 doc fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3385](https://github.com/facebook/docusaurus/pull/3385) fix(v2): scripts should allow unknown values ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3382](https://github.com/facebook/docusaurus/pull/3382) fix(v2): allow using classic theme/preset without the docs plugin ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`\\n - [#3377](https://github.com/facebook/docusaurus/pull/3377) fix(v2): reject routeBasePath: \'\' ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3390](https://github.com/facebook/docusaurus/pull/3390) docs(v1, v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n- [#3344](https://github.com/facebook/docusaurus/pull/3344) docs(v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n\\n## :house: Internal\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3386](https://github.com/facebook/docusaurus/pull/3386) chore(v2): pin exact dependency versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3359](https://github.com/facebook/docusaurus/pull/3359) chore(v2): prepare v2.0.0.alpha-62 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Sam Ko ([@samsisle](https://github.com/samsisle))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))"},{"id":"/2.0.0-alpha.62","metadata":{"permalink":"/changelog/2.0.0-alpha.62","source":"@site/changelog/source/2.0.0-alpha.62.md","title":"2.0.0-alpha.62","description":"New Feature","date":"2020-08-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adinaja","alias":"adinaja","url":"https://github.com/adinaja","imageURL":"https://github.com/adinaja.png","key":"adinaja","page":null},{"name":"Franklyn Chisom","alias":"ajifrank75","url":"https://github.com/ajifrank75","imageURL":"https://github.com/ajifrank75.png","key":"ajifrank75","page":null},{"name":"Ali Hosseini","alias":"Ako92","url":"https://github.com/Ako92","imageURL":"https://github.com/Ako92.png","key":"Ako92","page":null},{"name":"Amy Lei","alias":"amy-lei","url":"https://github.com/amy-lei","imageURL":"https://github.com/amy-lei.png","key":"amy-lei","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"Archit","alias":"arcvats","url":"https://github.com/arcvats","imageURL":"https://github.com/arcvats.png","key":"arcvats","page":null},{"name":"Arthur Flam","alias":"arthur-flam","url":"https://github.com/arthur-flam","imageURL":"https://github.com/arthur-flam.png","key":"arthur-flam","page":null},{"name":"Bogdan Doroschenko","alias":"BogdanDor","url":"https://github.com/BogdanDor","imageURL":"https://github.com/BogdanDor.png","key":"BogdanDor","page":null},{"name":"alex busnelli","alias":"boosh511","url":"https://github.com/boosh511","imageURL":"https://github.com/boosh511.png","key":"boosh511","page":null},{"name":"Daniel Wilkowski","alias":"Danon","url":"https://github.com/Danon","imageURL":"https://github.com/Danon.png","key":"Danon","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Derek","alias":"dschaller","url":"https://github.com/dschaller","imageURL":"https://github.com/dschaller.png","key":"dschaller","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Nisarag","alias":"FocalChord","url":"https://github.com/FocalChord","imageURL":"https://github.com/FocalChord.png","key":"FocalChord","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Govardhan Srinivas","alias":"govardhan-srinivas","url":"https://github.com/govardhan-srinivas","imageURL":"https://github.com/govardhan-srinivas.png","key":"govardhan-srinivas","page":null},{"name":"Yang Luo","alias":"hsluoyz","url":"https://github.com/hsluoyz","imageURL":"https://github.com/hsluoyz.png","key":"hsluoyz","page":null},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},{"name":"Jean-Marc Saad","alias":"JeanMarcSaad","url":"https://github.com/JeanMarcSaad","imageURL":"https://github.com/JeanMarcSaad.png","key":"JeanMarcSaad","page":null},{"name":"Jonas Dellinger","alias":"JohnnyCrazy","url":"https://github.com/JohnnyCrazy","imageURL":"https://github.com/JohnnyCrazy.png","key":"JohnnyCrazy","page":null},{"name":"Jonathan","alias":"Jonathannsegal","url":"https://github.com/Jonathannsegal","imageURL":"https://github.com/Jonathannsegal.png","key":"Jonathannsegal","page":null},{"name":"lebogang Olifant","alias":"lebogangolifant","url":"https://github.com/lebogangolifant","imageURL":"https://github.com/lebogangolifant.png","key":"lebogangolifant","page":null},{"name":"leoigel","alias":"leoigel","url":"https://github.com/leoigel","imageURL":"https://github.com/leoigel.png","key":"leoigel","page":null},{"name":"Manuel Cepeda","alias":"mecm1993","url":"https://github.com/mecm1993","imageURL":"https://github.com/mecm1993.png","key":"mecm1993","page":null},{"name":"Mirzayev Farid","alias":"MirzayevFarid","url":"https://github.com/MirzayevFarid","imageURL":"https://github.com/MirzayevFarid.png","key":"MirzayevFarid","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Olawanle Joel","alias":"olawanlejoel","url":"https://github.com/olawanlejoel","imageURL":"https://github.com/olawanlejoel.png","key":"olawanlejoel","page":null},{"name":"Orta Therox","alias":"orta","url":"https://github.com/orta","imageURL":"https://github.com/orta.png","key":"orta","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"shalinikumari50","alias":"shalinikumari50","url":"https://github.com/shalinikumari50","imageURL":"https://github.com/shalinikumari50.png","key":"shalinikumari50","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Sourav Dey","alias":"Souravdey777","url":"https://github.com/Souravdey777","imageURL":"https://github.com/Souravdey777.png","key":"Souravdey777","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Hani Mohammed","alias":"thehanimo","url":"https://github.com/thehanimo","imageURL":"https://github.com/thehanimo.png","key":"thehanimo","page":null},{"name":"Tolunay Akbulut","alias":"tolunayakbulut","url":"https://github.com/tolunayakbulut","imageURL":"https://github.com/tolunayakbulut.png","key":"tolunayakbulut","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"Vincent","alias":"Vinnl","url":"https://github.com/Vinnl","imageURL":"https://github.com/Vinnl.png","key":"Vinnl","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-28T20:00","authors":["adinaja","ajifrank75","Ako92","amy-lei","anshulrgoyal","arcvats","arthur-flam","BogdanDor","boosh511","Danon","Drewbi","dschaller","fanny","FocalChord","francoischalifour","govardhan-srinivas","hsluoyz","imskr","JeanMarcSaad","JohnnyCrazy","Jonathannsegal","lebogangolifant","leoigel","mecm1993","MirzayevFarid","nebrelbug","olawanlejoel","orta","SamChou19815","shalinikumari50","slorber","Souravdey777","teikjun","thehanimo","tolunayakbulut","vandreleal","Vinnl","yangshun","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"nextItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3357](https://github.com/facebook/docusaurus/pull/3357) feat(v2): docs version configuration: lastVersion, version.{path,label} ([@slorber](https://github.com/slorber))\\n - [#3328](https://github.com/facebook/docusaurus/pull/3328) feat(v2): Provide docs plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3356](https://github.com/facebook/docusaurus/pull/3356) feat(v2): Provide type definitions for remaining theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#3274](https://github.com/facebook/docusaurus/pull/3274) feat(v2): add TOC to blog posts ([@amy-lei](https://github.com/amy-lei))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3354](https://github.com/facebook/docusaurus/pull/3354) feat(v2): Provide type definitions for MDXPage from page plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3348](https://github.com/facebook/docusaurus/pull/3348) feat(v2): Provide typing to most of the theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`\\n - [#3284](https://github.com/facebook/docusaurus/pull/3284) feat(v2): blog slug frontmatter ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#2981](https://github.com/facebook/docusaurus/pull/2981) feat(v2): bootstrap theme, preset, template, CI previews ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3267](https://github.com/facebook/docusaurus/pull/3267) feat(v2): Provide blog plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-debug`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-types`, `docusaurus`\\n - [#3229](https://github.com/facebook/docusaurus/pull/3229) feat(v2): debug pages + debug layout + ability to debug content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3021](https://github.com/facebook/docusaurus/pull/3021) feat(v2): update swizzle command to suggest component/theme ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3196](https://github.com/facebook/docusaurus/pull/3196) feat(v2): add support to ignore files in pages plugin ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3204](https://github.com/facebook/docusaurus/pull/3204) feat(v2): blog + docs multi-instance plugins ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3096](https://github.com/facebook/docusaurus/pull/3096) feat(v2): add support to import assets using relative link in markdown syntax ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#3358](https://github.com/facebook/docusaurus/pull/3358) fix(v2): fix migrate cli paths (sidebars/customcss) ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3311](https://github.com/facebook/docusaurus/pull/3311) fix(v2): add https support in webpack devserver ([@arcvats](https://github.com/arcvats))\\n - [#3313](https://github.com/facebook/docusaurus/pull/3313) fix(v2): resolve webpack loaders from siteDir/node_modules ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3308](https://github.com/facebook/docusaurus/pull/3308) fix(v2): brokenLinks should not report links that belong to an existing folder if folder/index.html exists ([@slorber](https://github.com/slorber))\\n - [#3273](https://github.com/facebook/docusaurus/pull/3273) fix: logic error while deciding deploymentBranch ([@thehanimo](https://github.com/thehanimo))\\n - [#3281](https://github.com/facebook/docusaurus/pull/3281) fix(v2): allow swizzling of component even if case doesn\'t match ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3222](https://github.com/facebook/docusaurus/pull/3222) fix(v2): update react-loadable-ssr-addon to solve yarn2 error ([@slorber](https://github.com/slorber))\\n - [#3191](https://github.com/facebook/docusaurus/pull/3191) fix(v2): add missing `lodash.flatmap` dependency ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-bootstrap`, `docusaurus-theme-search-algolia`, `docusaurus-types`\\n - [#3355](https://github.com/facebook/docusaurus/pull/3355) fix(v2): Add missing dependencies to packages ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3352](https://github.com/facebook/docusaurus/pull/3352) fix(v2): Allow the alt for the logo to be empty ([@Vinnl](https://github.com/Vinnl))\\n - [#3240](https://github.com/facebook/docusaurus/pull/3240) fix(v2): navbar dropdown opened with tab, not closing on click outside ([@Ako92](https://github.com/Ako92))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3347](https://github.com/facebook/docusaurus/pull/3347) fix(v2): linking to asset or external html page -> don\'t use history.push() ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3340](https://github.com/facebook/docusaurus/pull/3340) fix(v1): show images after one line code block ([@adinaja](https://github.com/adinaja))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#3290](https://github.com/facebook/docusaurus/pull/3290) fix(v1,v2): Add initial-scale=1.0 to all meta viewport tags ([@nebrelbug](https://github.com/nebrelbug))\\n- `docusaurus-theme-search-algolia`\\n - [#3297](https://github.com/facebook/docusaurus/pull/3297) fix(v2): keep DocSearch state on remounts ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3280](https://github.com/facebook/docusaurus/pull/3280) fix(v2): allow search page swizzle ([@Ako92](https://github.com/Ako92))\\n - [#3263](https://github.com/facebook/docusaurus/pull/3263) fix(v2): do not index search pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3283](https://github.com/facebook/docusaurus/pull/3283) fix(v2): pass images in static dir to webpack-loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Other\\n - [#3269](https://github.com/facebook/docusaurus/pull/3269) fix(v2): website feedback page hydration bug ([@mecm1993](https://github.com/mecm1993))\\n - [#3200](https://github.com/facebook/docusaurus/pull/3200) fix(v1): self-host user images ([@leoigel](https://github.com/leoigel))\\n- `docusaurus-plugin-google-gtag`\\n - [#3243](https://github.com/facebook/docusaurus/pull/3243) fix(v2): GTM, send page_view events on navigate ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3262](https://github.com/facebook/docusaurus/pull/3262) fix(v2): doc path special char (space or other) should lead to a valid slug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3247](https://github.com/facebook/docusaurus/pull/3247) fix(v2): modify validation schema and tests for rehype/remark + remove duplicate dependency ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-init`\\n - [#3258](https://github.com/facebook/docusaurus/pull/3258) fix(v2): fix template alt image prop ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3227](https://github.com/facebook/docusaurus/pull/3227) fix(v2): relax URI validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`\\n - [#3228](https://github.com/facebook/docusaurus/pull/3228) fix(v2): deprecate docs homePageId in favor of frontmatter \\"slug: /\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3225](https://github.com/facebook/docusaurus/pull/3225) fix(v2): swizzle minor improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#3210](https://github.com/facebook/docusaurus/pull/3210) fix(v2): fix theme validation for prism field and add tests ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3192](https://github.com/facebook/docusaurus/pull/3192) fix(v2): add missing `chalk` and `lodash` dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3188](https://github.com/facebook/docusaurus/pull/3188) fix(v2): Add a missing whitespace before prompt to use `npm run serve` ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3346](https://github.com/facebook/docusaurus/pull/3346) docs(v2): add draft doc ([@imskr](https://github.com/imskr))\\n - [#3336](https://github.com/facebook/docusaurus/pull/3336) docs(v2): add Nisarag to Fellows section ([@FocalChord](https://github.com/FocalChord))\\n - [#3335](https://github.com/facebook/docusaurus/pull/3335) docs(v2): update team profile ([@yangshun](https://github.com/yangshun))\\n - [#3334](https://github.com/facebook/docusaurus/pull/3334) docs(v2): add Drew to Fellows section ([@Drewbi](https://github.com/Drewbi))\\n - [#3333](https://github.com/facebook/docusaurus/pull/3333) docs(v2): add anshul and teikjun to fellows section of team page ([@teikjun](https://github.com/teikjun))\\n - [#3326](https://github.com/facebook/docusaurus/pull/3326) docs(v1): showcase user Casbin ([@hsluoyz](https://github.com/hsluoyz))\\n - [#3316](https://github.com/facebook/docusaurus/pull/3316) docs(v1): add Global CTO Forum to users ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n - [#3310](https://github.com/facebook/docusaurus/pull/3310) docs(v2): add \\"T-Regx\\" website to showcase ([@Danon](https://github.com/Danon))\\n - [#3307](https://github.com/facebook/docusaurus/pull/3307) docs(v2): showcase SpotifyAPI-NET ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n - [#3295](https://github.com/facebook/docusaurus/pull/3295) docs(v2): showcase Oxidizer ([@vandreleal](https://github.com/vandreleal))\\n - [#3287](https://github.com/facebook/docusaurus/pull/3287) docs: update README.md with some grammatical corrections ([@shalinikumari50](https://github.com/shalinikumari50))\\n - [#3271](https://github.com/facebook/docusaurus/pull/3271) docs(v2): fix typo ([@thehanimo](https://github.com/thehanimo))\\n - [#3277](https://github.com/facebook/docusaurus/pull/3277) docs(v1): Add Radity to users ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n - [#3276](https://github.com/facebook/docusaurus/pull/3276) docs: corrected some few typos in the docusaurus tech docs ([@ajifrank75](https://github.com/ajifrank75))\\n - [#3249](https://github.com/facebook/docusaurus/pull/3249) docs(v2): fix migration command ([@BogdanDor](https://github.com/BogdanDor))\\n - [#3248](https://github.com/facebook/docusaurus/pull/3248) Added twitter badge and modified discord Badges ([@Souravdey777](https://github.com/Souravdey777))\\n - [#3251](https://github.com/facebook/docusaurus/pull/3251) docs(v2): fix migration command for earlier versions ([@teikjun](https://github.com/teikjun))\\n - [#3252](https://github.com/facebook/docusaurus/pull/3252) docs(v2): docs typos ([@olawanlejoel](https://github.com/olawanlejoel))\\n - [#3111](https://github.com/facebook/docusaurus/pull/3111) docs(v2): clarify theme-original and theme-init ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n - [#3232](https://github.com/facebook/docusaurus/pull/3232) docs(v2): showcase user QA-Board ([@arthur-flam](https://github.com/arthur-flam))\\n - [#3205](https://github.com/facebook/docusaurus/pull/3205) docs: format reference links ([@lebogangolifant](https://github.com/lebogangolifant))\\n - [#3194](https://github.com/facebook/docusaurus/pull/3194) docs(v2): Added switch config docs to theme-classic API ([@Drewbi](https://github.com/Drewbi))\\n - [#3201](https://github.com/facebook/docusaurus/pull/3201) docs(v2): removed duplicate text under \\"Using React\\" section ([@boosh511](https://github.com/boosh511))\\n - [#3186](https://github.com/facebook/docusaurus/pull/3186) docs(v1): formatting changelog ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3202](https://github.com/facebook/docusaurus/pull/3202) fix(v2): fix svg loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3323](https://github.com/facebook/docusaurus/pull/3323) test(v2): Add unit test for migration of config file ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-theme-classic`\\n - [#3343](https://github.com/facebook/docusaurus/pull/3343) refactor(v2): announcement bar bad spelling + minor refactors ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3339](https://github.com/facebook/docusaurus/pull/3339) test(v2): make blog posts unit test ordering determinate ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3306](https://github.com/facebook/docusaurus/pull/3306) chore(v2): Define type for markdown right table of contents ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3282](https://github.com/facebook/docusaurus/pull/3282) chore(v2): fix javascript-serialize vulnerability ([@slorber](https://github.com/slorber))\\n - [#3265](https://github.com/facebook/docusaurus/pull/3265) chore(v2): upgrade terser-webpack-plugin ([@dschaller](https://github.com/dschaller))\\n- Other\\n - [#3241](https://github.com/facebook/docusaurus/pull/3241) chore(deps): bump prismjs from 1.20.0 to 1.21.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3259](https://github.com/facebook/docusaurus/pull/3259) chore(v2): fix slow commits due to lint-staged ([@slorber](https://github.com/slorber))\\n - [#3197](https://github.com/facebook/docusaurus/pull/3197) chore(v2): lockfile update ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3218](https://github.com/facebook/docusaurus/pull/3218) chore(v1): release 1.14.6 ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3238](https://github.com/facebook/docusaurus/pull/3238) refactor(v2): precompile ETA templates ([@slorber](https://github.com/slorber))\\n\\n## Committers: 39\\n\\n- Ali Hosseini ([@Ako92](https://github.com/Ako92))\\n- Amy Lei ([@amy-lei](https://github.com/amy-lei))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Archit ([@arcvats](https://github.com/arcvats))\\n- Arthur Flam ([@arthur-flam](https://github.com/arthur-flam))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Bogdan Doroschenko ([@BogdanDor](https://github.com/BogdanDor))\\n- Daniel Wilkowski ([@Danon](https://github.com/Danon))\\n- Derek ([@dschaller](https://github.com/dschaller))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Franklyn Chisom ([@ajifrank75](https://github.com/ajifrank75))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Govardhan Srinivas ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- Hani Mohammed ([@thehanimo](https://github.com/thehanimo))\\n- Jean-Marc Saad ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- Jonas Dellinger ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n- Jonathan ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n- Manuel Cepeda ([@mecm1993](https://github.com/mecm1993))\\n- Mirzayev Farid ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n- Nisarag ([@FocalChord](https://github.com/FocalChord))\\n- Olawanle Joel ([@olawanlejoel](https://github.com/olawanlejoel))\\n- Orta Therox ([@orta](https://github.com/orta))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Sourav Dey ([@Souravdey777](https://github.com/Souravdey777))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tolunay Akbulut ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Vincent ([@Vinnl](https://github.com/Vinnl))\\n- Yang Luo ([@hsluoyz](https://github.com/hsluoyz))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@adinaja](https://github.com/adinaja)\\n- [@leoigel](https://github.com/leoigel)\\n- [@shalinikumari50](https://github.com/shalinikumari50)\\n- alex busnelli ([@boosh511](https://github.com/boosh511))\\n- lebogang Olifant ([@lebogangolifant](https://github.com/lebogangolifant))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))"},{"id":"/2.0.0-alpha.61","metadata":{"permalink":"/changelog/2.0.0-alpha.61","source":"@site/changelog/source/2.0.0-alpha.61.md","title":"2.0.0-alpha.61","description":"New Feature","date":"2020-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Bucky Maler","alias":"BuckyMaler","url":"https://github.com/BuckyMaler","imageURL":"https://github.com/BuckyMaler.png","key":"BuckyMaler","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Faizan","alias":"mdfaizan7","url":"https://github.com/mdfaizan7","imageURL":"https://github.com/mdfaizan7.png","key":"mdfaizan7","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-01T20:00","authors":["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"nextItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3083](https://github.com/facebook/docusaurus/pull/3083) feat(v2): warn user when there are conflicting routes ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3158](https://github.com/facebook/docusaurus/pull/3158) feat(v2): markdown pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3127](https://github.com/facebook/docusaurus/pull/3127) feat(v2): dark mode toggle customization ([@Drewbi](https://github.com/Drewbi))\\n- `docusaurus-theme-search-algolia`\\n - [#3166](https://github.com/facebook/docusaurus/pull/3166) feat(v2): improve Algolia search accessibility ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2359](https://github.com/facebook/docusaurus/pull/2359) feat(v2): support custom description for blog-only mode ([@zxuqian](https://github.com/zxuqian))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3180](https://github.com/facebook/docusaurus/pull/3180) fix(v2): fix markdown images always using webpack url-loader ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3171](https://github.com/facebook/docusaurus/pull/3171) fix(v2): tab label showing outline & background when clicked ([@mdfaizan7](https://github.com/mdfaizan7))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#3168](https://github.com/facebook/docusaurus/pull/3168) fix(v2): fix link items refusing attributes like target, rel etc... ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3162](https://github.com/facebook/docusaurus/pull/3162) fix(v2): inability for users to pin their docusaurus version ([@BuckyMaler](https://github.com/BuckyMaler))\\n\\n## :memo: Documentation\\n\\n- [#3163](https://github.com/facebook/docusaurus/pull/3163) docs(v2): showcase user questdb ([@mpsq](https://github.com/mpsq))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3164](https://github.com/facebook/docusaurus/pull/3164) chore(deps): bump elliptic from 6.5.2 to 6.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3157](https://github.com/facebook/docusaurus/pull/3157) chore(v2): remove alpha 59 doc ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3154](https://github.com/facebook/docusaurus/pull/3154) chore(v2): prepare v2.0.0.alpha-60 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Bucky Maler ([@BuckyMaler](https://github.com/BuckyMaler))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Faizan ([@mdfaizan7](https://github.com/mdfaizan7))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))"},{"id":"/2.0.0-alpha.60","metadata":{"permalink":"/changelog/2.0.0-alpha.60","source":"@site/changelog/source/2.0.0-alpha.60.md","title":"2.0.0-alpha.60","description":"New Feature","date":"2020-07-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Hob Adams","alias":"hobadams","url":"https://github.com/hobadams","imageURL":"https://github.com/hobadams.png","key":"hobadams","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-29T20:00","authors":["hobadams","Simek","slorber","teikjun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"nextItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3134](https://github.com/facebook/docusaurus/pull/3134) feat(v2): add validation escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3124](https://github.com/facebook/docusaurus/pull/3124) feat(v1): add \'slugPreprocessor\' config option to allow users customize the hash links ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3133](https://github.com/facebook/docusaurus/pull/3133) feat(v2): add themeConfig validation to algolia theme ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3142](https://github.com/facebook/docusaurus/pull/3142) fix(v2): config validation fixes + add tests for config validation ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#3149](https://github.com/facebook/docusaurus/pull/3149) fix(v2): BrowserOnly should not return undefined ([@slorber](https://github.com/slorber))\\n - [#3143](https://github.com/facebook/docusaurus/pull/3143) fix(v2): absolute Links should be automatically prefixed by baseurl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#3141](https://github.com/facebook/docusaurus/pull/3141) fix(v2): remove buggy routesLoaded + deprecate routesLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3140](https://github.com/facebook/docusaurus/pull/3140) fix(v2): navbar item links should allow unknown attributes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3138](https://github.com/facebook/docusaurus/pull/3138) fix(v2): add accessible label for Algolia search button ([@hobadams](https://github.com/hobadams))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3120](https://github.com/facebook/docusaurus/pull/3120) fix(v2): make config validation less strict ([@teikjun](https://github.com/teikjun))\\n\\n## :memo: Documentation\\n\\n- [#3145](https://github.com/facebook/docusaurus/pull/3145) docs(v2): add myself to /team page + add TeamProfileCard component ([@slorber](https://github.com/slorber))\\n- [#3146](https://github.com/facebook/docusaurus/pull/3146) docs(v2): prettier docs ([@slorber](https://github.com/slorber))\\n- [#3116](https://github.com/facebook/docusaurus/pull/3116) chore(v2): docs updates after release ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3130](https://github.com/facebook/docusaurus/pull/3130) chore(v2): remove old versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3114](https://github.com/facebook/docusaurus/pull/3114) chore(v2): prepare v2.0.0.alpha-59 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 4\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Hob Adams ([@hobadams](https://github.com/hobadams))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))"},{"id":"/2.0.0-alpha.59","metadata":{"permalink":"/changelog/2.0.0-alpha.59","source":"@site/changelog/source/2.0.0-alpha.59.md","title":"2.0.0-alpha.59","description":"New Feature","date":"2020-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mahfoudh Arous","alias":"aladin002dz","url":"https://github.com/aladin002dz","imageURL":"https://github.com/aladin002dz.png","key":"aladin002dz","page":null},{"name":"Eric Dobbertin","alias":"aldeed","url":"https://github.com/aldeed","imageURL":"https://github.com/aldeed.png","key":"aldeed","page":null},{"name":"Amirul Ahmad","alias":"amirulahmad","url":"https://github.com/amirulahmad","imageURL":"https://github.com/amirulahmad.png","key":"amirulahmad","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"Ayan Banerjee","alias":"ayan-b","url":"https://github.com/ayan-b","imageURL":"https://github.com/ayan-b.png","key":"ayan-b","page":null},{"name":"Jeremy Asuncion","alias":"codemonkey800","url":"https://github.com/codemonkey800","imageURL":"https://github.com/codemonkey800.png","key":"codemonkey800","page":null},{"name":"Daniel Hochman","alias":"danielhochman","url":"https://github.com/danielhochman","imageURL":"https://github.com/danielhochman.png","key":"danielhochman","page":null},{"name":"Deepak Giri","alias":"dpkg","url":"https://github.com/dpkg","imageURL":"https://github.com/dpkg.png","key":"dpkg","page":null},{"name":"ehsan jso","alias":"ehsanjso","url":"https://github.com/ehsanjso","imageURL":"https://github.com/ehsanjso.png","key":"ehsanjso","page":null},{"name":"Arsalan Khattak","alias":"eKhattak","url":"https://github.com/eKhattak","imageURL":"https://github.com/eKhattak.png","key":"eKhattak","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"matbub","alias":"hi-matbub","url":"https://github.com/hi-matbub","imageURL":"https://github.com/hi-matbub.png","key":"hi-matbub","page":null},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"Jordan Liu","alias":"jordanliu","url":"https://github.com/jordanliu","imageURL":"https://github.com/jordanliu.png","key":"jordanliu","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Paul Cowgill","alias":"pcowgill","url":"https://github.com/pcowgill","imageURL":"https://github.com/pcowgill.png","key":"pcowgill","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Frida Hjelm","alias":"svtfrida","url":"https://github.com/svtfrida","imageURL":"https://github.com/svtfrida.png","key":"svtfrida","page":null},{"name":"Taylor Allen","alias":"taylorallen0913","url":"https://github.com/taylorallen0913","imageURL":"https://github.com/taylorallen0913.png","key":"taylorallen0913","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"Rian Finnegan","alias":"xtellurian","url":"https://github.com/xtellurian","imageURL":"https://github.com/xtellurian.png","key":"xtellurian","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-24T20:00","authors":["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"nextItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`\\n - [#3015](https://github.com/facebook/docusaurus/pull/3015) feat: automate migration from v1 to v2 ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3105](https://github.com/facebook/docusaurus/pull/3105) feat(v2): add docusaurus script for npm users ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2815](https://github.com/facebook/docusaurus/pull/2815) feat(v2): introduce DocSearch v3 search ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-init`, `docusaurus-types`, `docusaurus`\\n - [#3059](https://github.com/facebook/docusaurus/pull/3059) feat(v2): broken links detection ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3084](https://github.com/facebook/docusaurus/pull/3084) feat(v2): absolute slugs and slug resolution system ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#3069](https://github.com/facebook/docusaurus/pull/3069) feat(v2): support for adding relative images and handling broken image links ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3080](https://github.com/facebook/docusaurus/pull/3080) feat(v2): add support for serve command ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#3058](https://github.com/facebook/docusaurus/pull/3058) feat(v2): useDocusaurusContext().siteMetadata ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3032](https://github.com/facebook/docusaurus/pull/3032) feat(v2): notify users when docusaurus version is outdated ([@teikjun](https://github.com/teikjun))\\n - [#3033](https://github.com/facebook/docusaurus/pull/3033) feat(v2): add useBaseUrlUtils() hook ([@slorber](https://github.com/slorber))\\n - [#3006](https://github.com/facebook/docusaurus/pull/3006) feat(v2): prompt user when default port is in use ([@taylorallen0913](https://github.com/taylorallen0913))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus`\\n - [#3050](https://github.com/facebook/docusaurus/pull/3050) feat(v2): Collect plugin versions to allow them to be inspected in debug plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3038](https://github.com/facebook/docusaurus/pull/3038) feat(v2): Support keywords meta in blog posts ([@dpkg](https://github.com/dpkg))\\n - [#2974](https://github.com/facebook/docusaurus/pull/2974) feat(v2): Error when hooks depends on context is used outside of Layout ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#2205](https://github.com/facebook/docusaurus/pull/2205) feat(v2): Plugin for Offline/PWA support ([@codemonkey800](https://github.com/codemonkey800))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2994](https://github.com/facebook/docusaurus/pull/2994) feat(v2): configureWebpack merge strategy + use file-loader for common asset types ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#2989](https://github.com/facebook/docusaurus/pull/2989) feat(v2): add disableVersioning config to docs plugin ([@slorber](https://github.com/slorber))\\n - [#2877](https://github.com/facebook/docusaurus/pull/2877) feat(v2): allow skipping build docs for next version ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#2955](https://github.com/facebook/docusaurus/pull/2955) feat(v1): add deletedDocs config to fix unwanted versioning fallback ([@aldeed](https://github.com/aldeed))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#2943](https://github.com/facebook/docusaurus/pull/2943) feat(v2): option and config validation life cycle method for official plugins ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3107](https://github.com/facebook/docusaurus/pull/3107) fix(v2): broken links detector: ignore existing folders ([@slorber](https://github.com/slorber))\\n - [#3112](https://github.com/facebook/docusaurus/pull/3112) fix(v2): baseUrl is wrongly appended to anchor links ([@slorber](https://github.com/slorber))\\n - [#3063](https://github.com/facebook/docusaurus/pull/3063) fix(v2): classify link hrefs with protocol identifier as internal ([@svtfrida](https://github.com/svtfrida))\\n- `docusaurus-theme-classic`\\n - [#3106](https://github.com/facebook/docusaurus/pull/3106) fix(v2): dropdown navbar item: validation too strict ([@slorber](https://github.com/slorber))\\n - [#3029](https://github.com/facebook/docusaurus/pull/3029) fix(v2): change description for blog post paginator ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3108](https://github.com/facebook/docusaurus/pull/3108) fix(v2): fix docs instance path typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#3025](https://github.com/facebook/docusaurus/pull/3025) fix(v2):pass siteConfig as prop to pages ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#3017](https://github.com/facebook/docusaurus/pull/3017) fix(v2): fix broken links on versions page ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`, `docusaurus`\\n - [#3010](https://github.com/facebook/docusaurus/pull/3010) fix(v2): make client-redirect-plugin not baseUrl sensitive ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-1.x`\\n - [#2993](https://github.com/facebook/docusaurus/pull/2993) fix(relative path): last update date and by isn\u2019t generated if localh\u2026 ([@amirulahmad](https://github.com/amirulahmad))\\n- `docusaurus-plugin-client-redirects`\\n - [#2969](https://github.com/facebook/docusaurus/pull/2969) fix: fromExtensions and toExtensions translation when used with baseUrl ([@jknoxville](https://github.com/jknoxville))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3088](https://github.com/facebook/docusaurus/pull/3088) improve navbar menu ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :memo: Documentation\\n\\n- [#3026](https://github.com/facebook/docusaurus/pull/3026) docs(v2): add documentation for migration command ([@teikjun](https://github.com/teikjun))\\n- [#3094](https://github.com/facebook/docusaurus/pull/3094) docs(v2): showcase user Clutch ([@danielhochman](https://github.com/danielhochman))\\n- [#3101](https://github.com/facebook/docusaurus/pull/3101) docs(v2):Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3098](https://github.com/facebook/docusaurus/pull/3098) docs: Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3086](https://github.com/facebook/docusaurus/pull/3086) doc(v2): replace heading position ([@eKhattak](https://github.com/eKhattak))\\n- [#3082](https://github.com/facebook/docusaurus/pull/3082) fixing few typos and enhancing few sentences clarity ([@aladin002dz](https://github.com/aladin002dz))\\n- [#3078](https://github.com/facebook/docusaurus/pull/3078) Updated link for #docusaurus-2-dev discord ([@jordanliu](https://github.com/jordanliu))\\n- [#3076](https://github.com/facebook/docusaurus/pull/3076) docs(v2): showcase Runlet ([@vandreleal](https://github.com/vandreleal))\\n- [#3040](https://github.com/facebook/docusaurus/pull/3040) docs(v2): correct the documentation for docs-only mode ([@teikjun](https://github.com/teikjun))\\n- [#3034](https://github.com/facebook/docusaurus/pull/3034) docs(v2): showcase user Tasit ([@pcowgill](https://github.com/pcowgill))\\n- [#3022](https://github.com/facebook/docusaurus/pull/3022) docs(v2): showcase Eta ([@nebrelbug](https://github.com/nebrelbug))\\n- [#3011](https://github.com/facebook/docusaurus/pull/3011) docs(v1): external links ([@slorber](https://github.com/slorber))\\n- [#2997](https://github.com/facebook/docusaurus/pull/2997) docs(v2): Document TypeScript support ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2973](https://github.com/facebook/docusaurus/pull/2973) docs(v2): Fix typo in markdown-features ([@ehsanjso](https://github.com/ehsanjso))\\n- [#2991](https://github.com/facebook/docusaurus/pull/2991) Showcase Amphora Data ([@xtellurian](https://github.com/xtellurian))\\n- [#2983](https://github.com/facebook/docusaurus/pull/2983) docs(v2): add plugin redirects production build note ([@slorber](https://github.com/slorber))\\n- [#2967](https://github.com/facebook/docusaurus/pull/2967) docs(v2): fix typos in plugin-content examples ([@hi-matbub](https://github.com/hi-matbub))\\n- [#2960](https://github.com/facebook/docusaurus/pull/2960) doc(v2): publish doc update after alpha.58 release ([@slorber](https://github.com/slorber))\\n- [#2966](https://github.com/facebook/docusaurus/pull/2966) docs(v2): fix typo in plugin-content-pages example ([@hi-matbub](https://github.com/hi-matbub))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3113](https://github.com/facebook/docusaurus/pull/3113) chore(v2): ability to test the migration cli easily ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3099](https://github.com/facebook/docusaurus/pull/3099) fix(v2): netlify.toml shouldn\'t affect v1 site deployment config ([@slorber](https://github.com/slorber))\\n - [#3068](https://github.com/facebook/docusaurus/pull/3068) chore(deps): bump lodash from 4.17.15 to 4.17.19 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2958](https://github.com/facebook/docusaurus/pull/2958) docs(v2): rename 2.0.0-alpha.57 to 2.0.0-alpha.58 ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3093](https://github.com/facebook/docusaurus/pull/3093) fix(v2): fix recent baseurl issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3055](https://github.com/facebook/docusaurus/pull/3055) chore(v2): Adopt corejs 3 and only import at entry point ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2998](https://github.com/facebook/docusaurus/pull/2998) chore(v2): refactor yarn tsc to yarn build + add theme-classic watch mode ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3007](https://github.com/facebook/docusaurus/pull/3007) fix(v2): Add two missing docusaurus core babel dependency ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#2950](https://github.com/facebook/docusaurus/pull/2950) chore(v2): Implement a simple E2E testing mechanism for `docusausus start` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`\\n - [#2996](https://github.com/facebook/docusaurus/pull/2996) chore(v2): Merge devDependencies in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2977](https://github.com/facebook/docusaurus/pull/2977) chore(v2): Remove extraneous package-lock.json ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`\\n - [#2962](https://github.com/facebook/docusaurus/pull/2962) Feat: replace yup with joi for cleaner validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2976](https://github.com/facebook/docusaurus/pull/2976) chore(v2): Fix more eslint errors ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2972](https://github.com/facebook/docusaurus/pull/2972) chore(v2): Fix a lot of eslint warnings ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## Committers: 25\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amirul Ahmad ([@amirulahmad](https://github.com/amirulahmad))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Arsalan Khattak ([@eKhattak](https://github.com/eKhattak))\\n- Ayan Banerjee ([@ayan-b](https://github.com/ayan-b))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Daniel Hochman ([@danielhochman](https://github.com/danielhochman))\\n- Deepak Giri ([@dpkg](https://github.com/dpkg))\\n- Eric Dobbertin ([@aldeed](https://github.com/aldeed))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Frida Hjelm ([@svtfrida](https://github.com/svtfrida))\\n- Jeremy Asuncion ([@codemonkey800](https://github.com/codemonkey800))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Jordan Liu ([@jordanliu](https://github.com/jordanliu))\\n- Mahfoudh Arous ([@aladin002dz](https://github.com/aladin002dz))\\n- Paul Cowgill ([@pcowgill](https://github.com/pcowgill))\\n- Rian Finnegan ([@xtellurian](https://github.com/xtellurian))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Allen ([@taylorallen0913](https://github.com/taylorallen0913))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- ehsan jso ([@ehsanjso](https://github.com/ehsanjso))\\n- matbub ([@hi-matbub](https://github.com/hi-matbub))"},{"id":"/2.0.0-alpha.58","metadata":{"permalink":"/changelog/2.0.0-alpha.58","source":"@site/changelog/source/2.0.0-alpha.58.md","title":"2.0.0-alpha.58","description":"New Feature","date":"2020-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"belokonm","alias":"belokonm","url":"https://github.com/belokonm","imageURL":"https://github.com/belokonm.png","key":"belokonm","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Guillaume Jacquart","alias":"guillaumejacquart","url":"https://github.com/guillaumejacquart","imageURL":"https://github.com/guillaumejacquart.png","key":"guillaumejacquart","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Koki Nishihara","alias":"Nishikoh","url":"https://github.com/Nishikoh","imageURL":"https://github.com/Nishikoh.png","key":"Nishikoh","page":null},{"name":"Paul Glezen","alias":"pglezen","url":"https://github.com/pglezen","imageURL":"https://github.com/pglezen.png","key":"pglezen","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"tetunori","alias":"tetunori","url":"https://github.com/tetunori","imageURL":"https://github.com/tetunori.png","key":"tetunori","page":null},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T20:00","authors":["aeneasr","anshulrgoyal","belokonm","Drewbi","fanny","guillaumejacquart","JoelMarcey","jsjoeio","lex111","moonrailgun","Nishikoh","pglezen","SamChou19815","slorber","teikjun","tetunori","TomBrien","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"nextItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2916](https://github.com/facebook/docusaurus/pull/2916) feat(v2): add a banner that links to latest version of documentation ([@teikjun](https://github.com/teikjun))\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#2928](https://github.com/facebook/docusaurus/pull/2928) feat(v2): Implement proof-of-concept Docusaurus Debug Dashboard ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus`\\n - [#2903](https://github.com/facebook/docusaurus/pull/2903) feat(v2): Allow configuring babel via babel.config.js ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#2793](https://github.com/facebook/docusaurus/pull/2793) feat(v2): docusaurus-plugin-client-redirects ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#2826](https://github.com/facebook/docusaurus/pull/2826) feat(v2): allow adding components to react-live scope ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2856](https://github.com/facebook/docusaurus/pull/2856) feat(v2): allow specifying meta image for blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2841](https://github.com/facebook/docusaurus/pull/2841) feat(v2): Allow swizzling prism-include-languages in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2905](https://github.com/facebook/docusaurus/pull/2905) fix(v2): fix docs homepage permalink issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2932](https://github.com/facebook/docusaurus/pull/2932) fix(v2): Add hooks to detect window resize, toggle off sidebar and navbar in desktop ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n - [#2909](https://github.com/facebook/docusaurus/pull/2909) fix(v2): adjust anchor offset when routes switched ([@lex111](https://github.com/lex111))\\n - [#2896](https://github.com/facebook/docusaurus/pull/2896) fix(v2): set correct canonical url for docs home page ([@lex111](https://github.com/lex111))\\n - [#2893](https://github.com/facebook/docusaurus/pull/2893) fix(v2): Do not automatically change tab when a non-existing option is selected ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2888](https://github.com/facebook/docusaurus/pull/2888) fix(v2): restore styles for menu scrollbar ([@lex111](https://github.com/lex111))\\n - [#2857](https://github.com/facebook/docusaurus/pull/2857) fix(v2): treat inline code in raw HTML as native element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2951](https://github.com/facebook/docusaurus/pull/2951) fix(v2): Add optional-chaining and nullish-coalescing babel plugin ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2921](https://github.com/facebook/docusaurus/pull/2921) fix(v2): upgrade react-loadable-ssr-addon ([@slorber](https://github.com/slorber))\\n - [#2854](https://github.com/facebook/docusaurus/pull/2854) fix(v2): fix broken build when swizzled NotFound component exist ([@lex111](https://github.com/lex111))\\n - [#2829](https://github.com/facebook/docusaurus/pull/2829) fix(v2): Fix plugin path resolution ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-preset-classic`\\n - [#2944](https://github.com/facebook/docusaurus/pull/2944) fix(v2): Declare @docusaurus-plugin-debug as dependency of preset classic ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`\\n - [#2902](https://github.com/facebook/docusaurus/pull/2902) feat(v2): add nojekyll file to static folder for all templates ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-bootstrap`\\n - [#2860](https://github.com/facebook/docusaurus/pull/2860) fix(v2): bootstrap doc sidebar ([@fanny](https://github.com/fanny))\\n- Other\\n - [#2874](https://github.com/facebook/docusaurus/pull/2874) fix(v2): Getting Started URL ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2867](https://github.com/facebook/docusaurus/pull/2867) fix(v2): fix FOUC in doc sidebar and various improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2838](https://github.com/facebook/docusaurus/pull/2838) fix(v2): use base url to navigate to search page ([@tetunori](https://github.com/tetunori))\\n- `docusaurus-utils`\\n - [#2855](https://github.com/facebook/docusaurus/pull/2855) fix(v2): strip images and footnotes for excerpt correctly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2835](https://github.com/facebook/docusaurus/pull/2835) fix(v2): set proper font for live editor ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2884](https://github.com/facebook/docusaurus/pull/2884) polish(v2): improve Docusaurus 1 to 2 migration developer experience ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2870](https://github.com/facebook/docusaurus/pull/2870) refactor(v2): combine nested theme providers into one ([@lex111](https://github.com/lex111))\\n - [#2880](https://github.com/facebook/docusaurus/pull/2880) fix(v2): render as regular text uncollapsible categories ([@lex111](https://github.com/lex111))\\n - [#2864](https://github.com/facebook/docusaurus/pull/2864) refactor(v2): add aria role for doc sidebar ([@lex111](https://github.com/lex111))\\n - [#2859](https://github.com/facebook/docusaurus/pull/2859) refactor(v2): add aria label to paginators ([@lex111](https://github.com/lex111))\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2862](https://github.com/facebook/docusaurus/pull/2862) Updated banner in solidarity ([@JoelMarcey](https://github.com/JoelMarcey))\\n\\n## :memo: Documentation\\n\\n- [#2946](https://github.com/facebook/docusaurus/pull/2946) docs(v2): add require.resolve to plugin imports on remaining pages ([@teikjun](https://github.com/teikjun))\\n- [#2941](https://github.com/facebook/docusaurus/pull/2941) docs(v2): wrap all plugin imports in require.resolve() ([@TomBrien](https://github.com/TomBrien))\\n- [#2934](https://github.com/facebook/docusaurus/pull/2934) docs(v2): add useThemeContext note ([@Drewbi](https://github.com/Drewbi))\\n- [#2935](https://github.com/facebook/docusaurus/pull/2935) docs(v2): Add router implementation note ([@Drewbi](https://github.com/Drewbi))\\n- [#2933](https://github.com/facebook/docusaurus/pull/2933) docs(v2): add documentation for multiple blogs ([@teikjun](https://github.com/teikjun))\\n- [#2910](https://github.com/facebook/docusaurus/pull/2910) docs(v2): fix GitHub action workflow in docs ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- [#2886](https://github.com/facebook/docusaurus/pull/2886) docs(v2): fix typo in command on installation page ([@pglezen](https://github.com/pglezen))\\n- [#2887](https://github.com/facebook/docusaurus/pull/2887) docs(v2): make .nojekyll warning more obvious ([@yangshun](https://github.com/yangshun))\\n- [#2865](https://github.com/facebook/docusaurus/pull/2865) docs(v2): description field in frontmatter of blog post ([@lex111](https://github.com/lex111))\\n- [#2839](https://github.com/facebook/docusaurus/pull/2839) docs(v2): \\\\_index docs page does not show a sidebar ([@aeneasr](https://github.com/aeneasr))\\n- [#2852](https://github.com/facebook/docusaurus/pull/2852) misc: move runme demo in block quote about v2 ([@lex111](https://github.com/lex111))\\n- [#2842](https://github.com/facebook/docusaurus/pull/2842) docs(v2): Update ZEIT to Vercel ([@Nishikoh](https://github.com/Nishikoh))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2948](https://github.com/facebook/docusaurus/pull/2948) refactor(v2): legacy export = syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`\\n - [#2922](https://github.com/facebook/docusaurus/pull/2922) misc(v2): better dx: yarn clear, yarn watch, yarn serve ([@slorber](https://github.com/slorber))\\n- Other\\n - [#2929](https://github.com/facebook/docusaurus/pull/2929) chore(v2): Run E2E tests in CI ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2899](https://github.com/facebook/docusaurus/pull/2899) chore(deps): bump websocket-extensions from 0.1.3 to 0.1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2897](https://github.com/facebook/docusaurus/pull/2897) refactor(v2): synchronize yarn/npm command on site ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`\\n - [#2931](https://github.com/facebook/docusaurus/pull/2931) chore(v2): remove unused hooks from bootstrap theme ([@fanny](https://github.com/fanny))\\n- `docusaurus-1.x`, `docusaurus-plugin-content-docs`\\n - [#2906](https://github.com/facebook/docusaurus/pull/2906) chore(v2): fix async tests ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-sitemap`\\n - [#2936](https://github.com/facebook/docusaurus/pull/2936) perf(v2): convert synchronous filewrite to asynchronous ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2900](https://github.com/facebook/docusaurus/pull/2900) chore(v2): replace Clipboard with copy-text-to-clipboard ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Guillaume Jacquart ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Koki Nishihara ([@Nishikoh](https://github.com/Nishikoh))\\n- Paul Glezen ([@pglezen](https://github.com/pglezen))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@belokonm](https://github.com/belokonm)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- tetunori ([@tetunori](https://github.com/tetunori))"},{"id":"/2.0.0-alpha.57","metadata":{"permalink":"/changelog/2.0.0-alpha.57","source":"@site/changelog/source/2.0.0-alpha.57.md","title":"2.0.0-alpha.57","description":"Bad release, check ## 2.0.0-alpha.58","date":"2020-06-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"nextItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\nBad release, check ## 2.0.0-alpha.58"},{"id":"/2.0.0-alpha.56","metadata":{"permalink":"/changelog/2.0.0-alpha.56","source":"@site/changelog/source/2.0.0-alpha.56.md","title":"2.0.0-alpha.56","description":"Breaking Change","date":"2020-05-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"James McShane","alias":"jmcshane","url":"https://github.com/jmcshane","imageURL":"https://github.com/jmcshane.png","key":"jmcshane","page":null},{"name":"Kasper B\xf8gebjerg Pedersen","alias":"kasperp","url":"https://github.com/kasperp","imageURL":"https://github.com/kasperp.png","key":"kasperp","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Muhammad Ali","alias":"mrmuhammadali","url":"https://github.com/mrmuhammadali","imageURL":"https://github.com/mrmuhammadali.png","key":"mrmuhammadali","page":null},{"name":"Piotr Baran","alias":"piotros","url":"https://github.com/piotros","imageURL":"https://github.com/piotros.png","key":"piotros","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-28T20:00","authors":["jknoxville","jmcshane","kasperp","lex111","mrmuhammadali","piotros","s-pace","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"nextItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- If you refer to modules (plugins) in your config file in a string form, you will need to replace them with `require.resolve` calls, for example:\\n\\n```diff\\n- plugins: [\'@docusaurus/plugin-google-analytics\']\\n+ plugins: [require.resolve(\'@docusaurus/plugin-google-analytics\')]\\n```\\n\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2780](https://github.com/facebook/docusaurus/pull/2780) feat(v2): open external links in new tab by default ([@jknoxville](https://github.com/jknoxville))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2770](https://github.com/facebook/docusaurus/pull/2770) feat(v2): allow deploy without building website ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2645](https://github.com/facebook/docusaurus/pull/2645) fix(v2): enable scrolling for sidebar menu only ([@lex111](https://github.com/lex111))\\n - [#2800](https://github.com/facebook/docusaurus/pull/2800) fix(v2): make proper h1 font size on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2788](https://github.com/facebook/docusaurus/pull/2788) fix(v2): use `require.resolve` for all webpack presets and plugins ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#2785](https://github.com/facebook/docusaurus/pull/2785) fix(v2): do not show sidebar on reserved docs home page ([@lex111](https://github.com/lex111))\\n - [#2777](https://github.com/facebook/docusaurus/pull/2777) fix(v2): check for docs homepage correctly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2820](https://github.com/facebook/docusaurus/pull/2820) chore(v2): upgrade Infima to 0.2.0-alpha.12 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2814](https://github.com/facebook/docusaurus/pull/2814) refactor(v2): align search icon to center on mobiles ([@lex111](https://github.com/lex111))\\n - [#2799](https://github.com/facebook/docusaurus/pull/2799) refactor(v2): increase search input on medium screens ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2802](https://github.com/facebook/docusaurus/pull/2802) misc: minor improvements for init templates ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2783](https://github.com/facebook/docusaurus/pull/2783) refactor(v2): make external links more secure ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2809](https://github.com/facebook/docusaurus/pull/2809) docs(v2): add mention on DocSearch when you run the crawler on your own ([@s-pace](https://github.com/s-pace))\\n\\n## :house: Internal\\n\\n- [#2778](https://github.com/facebook/docusaurus/pull/2778) fix(v2): do not highlight root docs path in navbar ([@lex111](https://github.com/lex111))\\n\\n## Committers: 8\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- James McShane ([@jmcshane](https://github.com/jmcshane))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Kasper B\xf8gebjerg Pedersen ([@kasperp](https://github.com/kasperp))\\n- Muhammad Ali ([@mrmuhammadali](https://github.com/mrmuhammadali))\\n- Piotr Baran ([@piotros](https://github.com/piotros))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))"},{"id":"/2.0.0-alpha.55","metadata":{"permalink":"/changelog/2.0.0-alpha.55","source":"@site/changelog/source/2.0.0-alpha.55.md","title":"2.0.0-alpha.55","description":"Breaking Change","date":"2020-05-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Rajiv Singh","alias":"iamrajiv","url":"https://github.com/iamrajiv","imageURL":"https://github.com/iamrajiv.png","key":"iamrajiv","page":null},{"name":"Jimmy","alias":"jcomack","url":"https://github.com/jcomack","imageURL":"https://github.com/jcomack.png","key":"jcomack","page":null},{"name":"Julien Deniau","alias":"jdeniau","url":"https://github.com/jdeniau","imageURL":"https://github.com/jdeniau.png","key":"jdeniau","page":null},{"name":"Jonny Nabors","alias":"jonnynabors","url":"https://github.com/jonnynabors","imageURL":"https://github.com/jonnynabors.png","key":"jonnynabors","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Marco Moretti","alias":"marcosvega91","url":"https://github.com/marcosvega91","imageURL":"https://github.com/marcosvega91.png","key":"marcosvega91","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-19T20:00","authors":["artemkovalyov","fanny","iamrajiv","jcomack","jdeniau","jonnynabors","lex111","marcosvega91","nebrelbug","slorber","taylorreece","yangshun","ykzts"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"nextItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n\\n - The following Infima classes have been renamed for consistency:\\n\\n - `page-item` \u2192 `pagination__item`\\n - `pagination-nav__link--label` \u2192 `pagination-nav__label`\\n - `pagination-nav__link--sublabel` \u2192 `pagination-nav__sublabel`\\n - `tab-item` \u2192 `tabs__item`\\n - `tab-item--active` \u2192 `tabs__item--active`\\n\\n If you have swizzled components, you need to replace these class names.\\n\\n- `docusaurus`\\n\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2690](https://github.com/facebook/docusaurus/pull/2690) feat(v2): allow activeBaseTest in NavLink ([@nebrelbug](https://github.com/nebrelbug))\\n - [#2694](https://github.com/facebook/docusaurus/pull/2694) feat(v2): add canonical URL to `<head>` ([@jcomack](https://github.com/jcomack))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2652](https://github.com/facebook/docusaurus/pull/2652) feat(v2): allow home page for docs ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2756](https://github.com/facebook/docusaurus/pull/2756) feat(v2): add search page \ud83d\udd0e ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#2701](https://github.com/facebook/docusaurus/pull/2701) fix(v2): remove Markdown syntax from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2765](https://github.com/facebook/docusaurus/pull/2765) fix(v2): remove invalid attr from mobile nav links ([@lex111](https://github.com/lex111))\\n - [#2760](https://github.com/facebook/docusaurus/pull/2760) fix(v2): move anchor link to right of heading ([@lex111](https://github.com/lex111))\\n - [#2758](https://github.com/facebook/docusaurus/pull/2758) fix(v2): remove extra top margin of tab item ([@lex111](https://github.com/lex111))\\n - [#2759](https://github.com/facebook/docusaurus/pull/2759) fix(v2): restore hiding of docs toc ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2762](https://github.com/facebook/docusaurus/pull/2762) fix(v2): avoid duplication search input in navbar ([@lex111](https://github.com/lex111))\\n- `lqip-loader`\\n - [#2693](https://github.com/facebook/docusaurus/pull/2693) fix(v2): add support ES Module to lqip-loader ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-init`\\n - [#2751](https://github.com/facebook/docusaurus/pull/2751) fix(v2): fix index page features.length when 0 ([@jdeniau](https://github.com/jdeniau))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2773](https://github.com/facebook/docusaurus/pull/2773) chore(v2): upgrade Infima to 0.2.0-alpha.11 ([@lex111](https://github.com/lex111))\\n - [#2766](https://github.com/facebook/docusaurus/pull/2766) refactor(v2): remove extra active CSS class for menu item links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2767](https://github.com/facebook/docusaurus/pull/2767) refactor(v2): add support for dark mode to live code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2761](https://github.com/facebook/docusaurus/pull/2761) refactor(v2): improve UX of search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2729](https://github.com/facebook/docusaurus/pull/2729) chore(v2): upgrade Infima to 0.2.0-alpha.10 ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2696](https://github.com/facebook/docusaurus/pull/2696) refactor(v2): make semicolon optional in imports for excerpt ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2768](https://github.com/facebook/docusaurus/pull/2768) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n- [#2670](https://github.com/facebook/docusaurus/pull/2670) docs(v2): add deployment workflow manual for GitHub Actions ([@artemkovalyov](https://github.com/artemkovalyov))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2464](https://github.com/facebook/docusaurus/pull/2464) refactor(v2): add @theme-init alias to give access to initial components ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2684](https://github.com/facebook/docusaurus/pull/2684) refactor(v2): replace EJS with Eta for SSR generation ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jimmy ([@jcomack](https://github.com/jcomack))\\n- Jonny Nabors ([@jonnynabors](https://github.com/jonnynabors))\\n- Julien Deniau ([@jdeniau](https://github.com/jdeniau))\\n- Marco Moretti ([@marcosvega91](https://github.com/marcosvega91))\\n- Rajiv Singh ([@iamrajiv](https://github.com/iamrajiv))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.54","metadata":{"permalink":"/changelog/2.0.0-alpha.54","source":"@site/changelog/source/2.0.0-alpha.54.md","title":"2.0.0-alpha.54","description":"HOTFIX for 2.0.0-alpha.53.","date":"2020-04-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-28T20:00","authors":["jsjoeio","lex111","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"nextItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.53**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2688](https://github.com/facebook/docusaurus/pull/2688) fix(v2): add default value for options in theme classic ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#2687](https://github.com/facebook/docusaurus/pull/2687) fix(v2): Add all webpack module aliases to type declaration file ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- [#2680](https://github.com/facebook/docusaurus/pull/2680) docs(v2): add swizzle example ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))"},{"id":"/2.0.0-alpha.53","metadata":{"permalink":"/changelog/2.0.0-alpha.53","source":"@site/changelog/source/2.0.0-alpha.53.md","title":"2.0.0-alpha.53","description":"HOTFIX for 2.0.0-alpha.51.","date":"2020-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"nextItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.51**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2676](https://github.com/facebook/docusaurus/pull/2676) fix(v2): allow build website without custom css ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.51","metadata":{"permalink":"/changelog/2.0.0-alpha.51","source":"@site/changelog/source/2.0.0-alpha.51.md","title":"2.0.0-alpha.51","description":"Breaking Change","date":"2020-04-27T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anayo Oleru","alias":"AnayoOleru","url":"https://github.com/AnayoOleru","imageURL":"https://github.com/AnayoOleru.png","key":"AnayoOleru","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Jay Lees","alias":"jaylees14","url":"https://github.com/jaylees14","imageURL":"https://github.com/jaylees14.png","key":"jaylees14","page":null},{"name":"Jos\xe9 Renan","alias":"JoseRenan","url":"https://github.com/JoseRenan","imageURL":"https://github.com/JoseRenan.png","key":"JoseRenan","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Kamil Kisiela","alias":"kamilkisiela","url":"https://github.com/kamilkisiela","imageURL":"https://github.com/kamilkisiela.png","key":"kamilkisiela","page":null},{"name":"Krist\xf3f Poduszl\xf3","alias":"kripod","url":"https://github.com/kripod","imageURL":"https://github.com/kripod.png","key":"kripod","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},{"name":"Chris Watson","alias":"watzon","url":"https://github.com/watzon","imageURL":"https://github.com/watzon.png","key":"watzon","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Mehmet Yatk\u0131","alias":"yatki","url":"https://github.com/yatki","imageURL":"https://github.com/yatki.png","key":"yatki","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T19:00","authors":["AnayoOleru","fanny","jaylees14","JoseRenan","jsjoeio","kamilkisiela","kripod","lex111","Noah-Silvera","RDIL","s-pace","SamChou19815","Simek","slorber","TomBrien","watzon","yangshun","yatki"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"nextItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n - The following infima variables have been renamed for consistency:\\n - `--ifm-font-base-color` \u2192 `--ifm-font-color-base`\\n - `--ifm-font-base-color-inverse` \u2192 `--ifm-font-color-base-inverse`\\n - `--ifm-font-color-secondary` \u2192 `--ifm-font-color-secondary`\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2660](https://github.com/facebook/docusaurus/pull/2660) feat(v2): add ability to specify CSS class for navbar item ([@lex111](https://github.com/lex111))\\n - [#2597](https://github.com/facebook/docusaurus/pull/2597) feat(v2): add ability set dark mode by default ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2665](https://github.com/facebook/docusaurus/pull/2665) feat(v2): add fallback to BrowserOnly component ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2630](https://github.com/facebook/docusaurus/pull/2630) feat(v2): add CLI option for polling ([@TomBrien](https://github.com/TomBrien))\\n- `docusaurus-init`\\n - [#2541](https://github.com/facebook/docusaurus/pull/2541) feat(v2): add showReadingTime and editUrl to the templates ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2524](https://github.com/facebook/docusaurus/pull/2524) feat(v2): add edit url in post page ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2531](https://github.com/facebook/docusaurus/pull/2531) feat(v2): add blog post estimated reading time ([@JoseRenan](https://github.com/JoseRenan))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2672](https://github.com/facebook/docusaurus/pull/2672) fix(v2): add a11y support for dropdown ([@lex111](https://github.com/lex111))\\n - [#2649](https://github.com/facebook/docusaurus/pull/2649) fix(v2): hide sidebar after click on child item ([@lex111](https://github.com/lex111))\\n - [#2631](https://github.com/facebook/docusaurus/pull/2631) fix(v2): hide doc sidebar on mobiles ([@lex111](https://github.com/lex111))\\n - [#2626](https://github.com/facebook/docusaurus/pull/2626) fix(v2): make border right of doc sidebar equals doc page ([@lex111](https://github.com/lex111))\\n - [#2625](https://github.com/facebook/docusaurus/pull/2625) fix(v2): disable tab focus on collapsed doc sidebar items ([@lex111](https://github.com/lex111))\\n - [#2602](https://github.com/facebook/docusaurus/pull/2602) fix(v2): inherit color for announcement bar close icon ([@lex111](https://github.com/lex111))\\n - [#2582](https://github.com/facebook/docusaurus/pull/2582) fix(v2): remove horizontal scroll on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2666](https://github.com/facebook/docusaurus/pull/2666) chore(v2): upgrade prism-react-renderer to latest version ([@lex111](https://github.com/lex111))\\n - [#2533](https://github.com/facebook/docusaurus/pull/2533) fix(v2): add rounded corners in code blocks properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2661](https://github.com/facebook/docusaurus/pull/2661) chore: upgrade shelljs to 0.8.4 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2642](https://github.com/facebook/docusaurus/pull/2642) fix(v2): use remark-admonitions separately in each plugin instead of in preset only ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2380](https://github.com/facebook/docusaurus/pull/2380) fix(v2): ignore import declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-sitemap`\\n - [#2616](https://github.com/facebook/docusaurus/pull/2616) fix(v2): don\'t include 404 page in sitemaps ([@RDIL](https://github.com/RDIL))\\n - [#2530](https://github.com/facebook/docusaurus/pull/2530) fix(v2): Use `writeFileSync` to write generated sitemap.xml to avoid early termination ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2558](https://github.com/facebook/docusaurus/pull/2558) fix(v2): properly link top-level github pages sites in deploy command ([@RDIL](https://github.com/RDIL))\\n - [#2580](https://github.com/facebook/docusaurus/pull/2580) fix(v2): do not process anchor links by router ([@lex111](https://github.com/lex111))\\n - [#2579](https://github.com/facebook/docusaurus/pull/2579) fix(v2): treat mailto and tel links properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2540](https://github.com/facebook/docusaurus/pull/2540) fix(v2): use synchronous write for generate blog feeds ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2656](https://github.com/facebook/docusaurus/pull/2656) refactor(v2): lose focus of active sidebar item after click on it ([@lex111](https://github.com/lex111))\\n - [#2627](https://github.com/facebook/docusaurus/pull/2627) refactor(v2): extract scroll position detection into separate hook ([@lex111](https://github.com/lex111))\\n - [#2595](https://github.com/facebook/docusaurus/pull/2595) refactor(v2): make margin top on blog pages as on other pages ([@lex111](https://github.com/lex111))\\n - [#2588](https://github.com/facebook/docusaurus/pull/2588) refactor(v2): remove redundant container on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2585](https://github.com/facebook/docusaurus/pull/2585) refactor(v2): use nav link component only where needed ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2556](https://github.com/facebook/docusaurus/pull/2556) refactor(v2): enhance CLI experience ([@RDIL](https://github.com/RDIL))\\n - [#2529](https://github.com/facebook/docusaurus/pull/2529) refactor(v2): replace few Lodash methods with native counterparts ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2534](https://github.com/facebook/docusaurus/pull/2534) refactor(v2): make better code blocks ([@lex111](https://github.com/lex111))\\n - [#2526](https://github.com/facebook/docusaurus/pull/2526) fix(v2): make code block nicer again ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#2519](https://github.com/facebook/docusaurus/pull/2519) chore(v2): use single method Lodash packages in docs plugin ([@Simek](https://github.com/Simek))\\n\\n## :memo: Documentation\\n\\n- [#2659](https://github.com/facebook/docusaurus/pull/2659) fix(docs): mention that appID is optional ([@s-pace](https://github.com/s-pace))\\n- [#2596](https://github.com/facebook/docusaurus/pull/2596) docs(v2): remove duplicated package.json in installation directory structure ([@jaylees14](https://github.com/jaylees14))\\n- [#2572](https://github.com/facebook/docusaurus/pull/2572) docs(v2): mention that `plugin-ideal-image` only perform compression on a production build ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2570](https://github.com/facebook/docusaurus/pull/2570) docs(v2): fix syntax error for @docusaurus/plugin-ideal-image example ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2566](https://github.com/facebook/docusaurus/pull/2566) docs(v2): be more polite ([@lex111](https://github.com/lex111))\\n- [#2559](https://github.com/facebook/docusaurus/pull/2559) doc(v2): remove legacy blog metadata ([@RDIL](https://github.com/RDIL))\\n- [#2549](https://github.com/facebook/docusaurus/pull/2549) docs(v2): command for swizzling all components ([@fanny](https://github.com/fanny))\\n- [#2547](https://github.com/facebook/docusaurus/pull/2547) docs(v2): Fix typo in team page ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2545](https://github.com/facebook/docusaurus/pull/2545) docs(v2): add community pages ([@yangshun](https://github.com/yangshun))\\n- [#2521](https://github.com/facebook/docusaurus/pull/2521) docs(v2): useThemeContext hook ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2578](https://github.com/facebook/docusaurus/pull/2578) refactor(v2): Convert docusaurus-core to TypeScript ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#2569](https://github.com/facebook/docusaurus/pull/2569) docs(v2): showcase user Tourmaline ([@watzon](https://github.com/watzon))\\n - [#2553](https://github.com/facebook/docusaurus/pull/2553) misc(v2): remove deprecated/useless lerna field ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `lqip-loader`\\n - [#2563](https://github.com/facebook/docusaurus/pull/2563) chore(v2): fix lint, tweak lqip-loader utils comment ([@Simek](https://github.com/Simek))\\n- `lqip-loader`\\n - [#2561](https://github.com/facebook/docusaurus/pull/2561) chore(v2): add lqip-loader tests, clarify loader code, improve README ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#2544](https://github.com/facebook/docusaurus/pull/2544) refactor(v2): import lqip-loader to monorepo, fix build on Node 13, fix lint-staged ([@Simek](https://github.com/Simek))\\n- `docusaurus-init`\\n - [#2542](https://github.com/facebook/docusaurus/pull/2542) chore(v2): update Prettier config ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#2538](https://github.com/facebook/docusaurus/pull/2538) chore(v2): upgrade devDependencies ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-utils`\\n - [#2536](https://github.com/facebook/docusaurus/pull/2536) refactor(v2): replace Lodash with single methods packages in utils ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#2535](https://github.com/facebook/docusaurus/pull/2535) refactor(v2): replace Lodash with single methods packages in core ([@Simek](https://github.com/Simek))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anayo Oleru ([@AnayoOleru](https://github.com/AnayoOleru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Chris Watson ([@watzon](https://github.com/watzon))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jay Lees ([@jaylees14](https://github.com/jaylees14))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Jos\xe9 Renan ([@JoseRenan](https://github.com/JoseRenan))\\n- Kamil Kisiela ([@kamilkisiela](https://github.com/kamilkisiela))\\n- Krist\xf3f Poduszl\xf3 ([@kripod](https://github.com/kripod))\\n- Mehmet Yatk\u0131 ([@yatki](https://github.com/yatki))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.50","metadata":{"permalink":"/changelog/2.0.0-alpha.50","source":"@site/changelog/source/2.0.0-alpha.50.md","title":"2.0.0-alpha.50","description":"HOTFIX for 2.0.0-alpha.49.","date":"2020-04-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Can Gencer","alias":"cangencer","url":"https://github.com/cangencer","imageURL":"https://github.com/cangencer.png","key":"cangencer","page":null},{"name":"Richard Chan","alias":"iWun","url":"https://github.com/iWun","imageURL":"https://github.com/iWun.png","key":"iWun","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-02T20:00","authors":["cangencer","iWun","lex111","SamChou19815","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"nextItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.49**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2509](https://github.com/facebook/docusaurus/pull/2509) fix(v2): synchronize code block components changes ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2498](https://github.com/facebook/docusaurus/pull/2498) fix(v2): blog item styling ([@yangshun](https://github.com/yangshun))\\n - [#2489](https://github.com/facebook/docusaurus/pull/2489) fix(v2): fix HTML issues nav dropdown and highlight docs item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2496](https://github.com/facebook/docusaurus/pull/2496) fix(v2): do not force terminate building when running deploy command ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2497](https://github.com/facebook/docusaurus/pull/2497) fix(v2): unbreak blog-only mode routing by deplicating starting forward slashes ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2505](https://github.com/facebook/docusaurus/pull/2505) fix(v2): tweak colors for announcement bar ([@yangshun](https://github.com/yangshun))\\n - [#2504](https://github.com/facebook/docusaurus/pull/2504) refactor(v2): improve announcement bar ([@lex111](https://github.com/lex111))\\n - [#2495](https://github.com/facebook/docusaurus/pull/2495) refactor(v2): update HTML markup of pagination for better a11y ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2502](https://github.com/facebook/docusaurus/pull/2502) fix(v2): make code block nicer ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2490](https://github.com/facebook/docusaurus/pull/2490) fix(v2): use lodash instead of array-map-polyfill ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-theme-classic`\\n - [#2500](https://github.com/facebook/docusaurus/pull/2500) docs(v2): misc docs updates ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- [#2486](https://github.com/facebook/docusaurus/pull/2486) misc: add instructions about test release ([@lex111](https://github.com/lex111))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Can Gencer ([@cangencer](https://github.com/cangencer))\\n- Richard Chan ([@iWun](https://github.com/iWun))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.49","metadata":{"permalink":"/changelog/2.0.0-alpha.49","source":"@site/changelog/source/2.0.0-alpha.49.md","title":"2.0.0-alpha.49","description":"New Feature","date":"2020-04-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"38elements","alias":"38elements","url":"https://github.com/38elements","imageURL":"https://github.com/38elements.png","key":"38elements","page":null},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},{"name":"bravo-kernel","alias":"bravo-kernel","url":"https://github.com/bravo-kernel","imageURL":"https://github.com/bravo-kernel.png","key":"bravo-kernel","page":null},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},{"name":"Favour Kelvin","alias":"fakela","url":"https://github.com/fakela","imageURL":"https://github.com/fakela.png","key":"fakela","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"GermaVinsmoke","alias":"GermaVinsmoke","url":"https://github.com/GermaVinsmoke","imageURL":"https://github.com/GermaVinsmoke.png","key":"GermaVinsmoke","page":null},{"name":"iamkun","alias":"iamkun","url":"https://github.com/iamkun","imageURL":"https://github.com/iamkun.png","key":"iamkun","page":null},{"name":"Jefferson Licet","alias":"jeffersonlicet","url":"https://github.com/jeffersonlicet","imageURL":"https://github.com/jeffersonlicet.png","key":"jeffersonlicet","page":null},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Luke Collier","alias":"lukecollier","url":"https://github.com/lukecollier","imageURL":"https://github.com/lukecollier.png","key":"lukecollier","page":null},{"name":"mohrash92","alias":"mohrash92","url":"https://github.com/mohrash92","imageURL":"https://github.com/mohrash92.png","key":"mohrash92","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Nisar Hassan Naqvi","alias":"nisarhassan12","url":"https://github.com/nisarhassan12","imageURL":"https://github.com/nisarhassan12.png","key":"nisarhassan12","page":null},{"name":"Paul Armstrong","alias":"paularmstrong","url":"https://github.com/paularmstrong","imageURL":"https://github.com/paularmstrong.png","key":"paularmstrong","page":null},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"ZachJW34","alias":"ZachJW34","url":"https://github.com/ZachJW34","imageURL":"https://github.com/ZachJW34.png","key":"ZachJW34","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-01T20:00","authors":["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"nextItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2487](https://github.com/facebook/docusaurus/pull/2487) feat(v2): nav dropdown ([@yangshun](https://github.com/yangshun))\\n - [#2456](https://github.com/facebook/docusaurus/pull/2456) feat(v2): support comments for code highlighting ([@elviswolcott](https://github.com/elviswolcott))\\n - [#2330](https://github.com/facebook/docusaurus/pull/2330) feat(v2): add announcement bar ([@lex111](https://github.com/lex111))\\n - [#2440](https://github.com/facebook/docusaurus/pull/2440) feat(v2): make clickable sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2366](https://github.com/facebook/docusaurus/pull/2366) feat(v2): support syncing tab choices ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2323](https://github.com/facebook/docusaurus/pull/2323) feat(v2): add a way to exclude components from build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2469](https://github.com/facebook/docusaurus/pull/2469) feat(v2): add TypeScript support for theme components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2455](https://github.com/facebook/docusaurus/pull/2455) feat(v2): add @theme-original alias to give access to pre-swizzled components ([@yangshun](https://github.com/yangshun))\\n - [#2438](https://github.com/facebook/docusaurus/pull/2438) feat(v2): add version to page\'s generated meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2474](https://github.com/facebook/docusaurus/pull/2474) feat(v2): add ability to create unminimized bundles ([@lex111](https://github.com/lex111))\\n - [#2417](https://github.com/facebook/docusaurus/pull/2417) feat(v2): allow custom output directory for build ([@ZachJW34](https://github.com/ZachJW34))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2346](https://github.com/facebook/docusaurus/pull/2346) feat(v2): add filename in CodeBlock ([@KohheePeace](https://github.com/KohheePeace))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2444](https://github.com/facebook/docusaurus/pull/2444) feat(v2): allow nested sidebar category shorthand syntax ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2483](https://github.com/facebook/docusaurus/pull/2483) fix(v2): do not render sidebar logo if used sticky navbar ([@lex111](https://github.com/lex111))\\n - [#2475](https://github.com/facebook/docusaurus/pull/2475) fix(v2): make correct Open Graph title for doc page ([@lex111](https://github.com/lex111))\\n - [#2436](https://github.com/facebook/docusaurus/pull/2436) fix(v2): update twitter:card to summary_large_image ([@lex111](https://github.com/lex111))\\n - [#2434](https://github.com/facebook/docusaurus/pull/2434) fix(v2): add support dark logo for sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2420](https://github.com/facebook/docusaurus/pull/2420) fix(v2): fix external URL for og:image tag ([@38elements](https://github.com/38elements))\\n- `docusaurus-theme-live-codeblock`\\n - [#2480](https://github.com/facebook/docusaurus/pull/2480) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#2479](https://github.com/facebook/docusaurus/pull/2479) chore(v2): upgrade MDX to 1.5.8 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2476](https://github.com/facebook/docusaurus/pull/2476) fix(v2): improve code block scroll accessibility ([@lex111](https://github.com/lex111))\\n - [#2442](https://github.com/facebook/docusaurus/pull/2442) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2477](https://github.com/facebook/docusaurus/pull/2477) chore(v2): upgrade remark-admonitions for a11y fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2462](https://github.com/facebook/docusaurus/pull/2462) fix(v2): do not force terminate building when bundle analyzer is on ([@lex111](https://github.com/lex111))\\n - [#2393](https://github.com/facebook/docusaurus/pull/2393) fix(v2): normalize location for route matching ([@rlamana](https://github.com/rlamana))\\n - [#2443](https://github.com/facebook/docusaurus/pull/2443) fix(v2): always exit after successful build ([@mohrash92](https://github.com/mohrash92))\\n - [#2437](https://github.com/facebook/docusaurus/pull/2437) fix(v2): do not force terminate building if client bundle failed in development mode ([@lex111](https://github.com/lex111))\\n - [#2424](https://github.com/facebook/docusaurus/pull/2424) fix(v2): make correct internal link check ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`\\n - [#2451](https://github.com/facebook/docusaurus/pull/2451) fix(v2): pass options to remark-admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-mdx-loader`\\n - [#2426](https://github.com/facebook/docusaurus/pull/2426) fix(v2): remove HTML from heading slug ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2405](https://github.com/facebook/docusaurus/pull/2405) fix(v2): properly dedupe forward slashes in the entire URL path ([@rlamana](https://github.com/rlamana))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2485](https://github.com/facebook/docusaurus/pull/2485) refactor(v2): remove unnecessary X-UA-Compatible meta tag ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2460](https://github.com/facebook/docusaurus/pull/2460) refactor(v2): use single method package instead of whole Lodash package in blog plugin ([@Simek](https://github.com/Simek))\\n- Other\\n - [#2428](https://github.com/facebook/docusaurus/pull/2428) polish(v2): use npm-to-yarn for the npm2yarn remark plugin ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2478](https://github.com/facebook/docusaurus/pull/2478) docs(v2): mark that in dev server some features may not work ([@lex111](https://github.com/lex111))\\n - [#2472](https://github.com/facebook/docusaurus/pull/2472) docs(v2): fix typo in deployment docs ([@GermaVinsmoke](https://github.com/GermaVinsmoke))\\n - [#2423](https://github.com/facebook/docusaurus/pull/2423) docs(v2): add Sass/SCSS under the styling section ([@rlamana](https://github.com/rlamana))\\n - [#2446](https://github.com/facebook/docusaurus/pull/2446) docs(v2): add docusaurus-plugin-sass to community plugins ([@rlamana](https://github.com/rlamana))\\n - [#2408](https://github.com/facebook/docusaurus/pull/2408) docs(v2): suggest Surge for quick deployment ([@fakela](https://github.com/fakela))\\n - [#2401](https://github.com/facebook/docusaurus/pull/2401) docs(v2): add resources page ([@yangshun](https://github.com/yangshun))\\n - [#2413](https://github.com/facebook/docusaurus/pull/2413) docs(v2): include appId key for Algolia ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#2411](https://github.com/facebook/docusaurus/pull/2411) docs:(v2): add Netlify configuration warning ([@bravo-kernel](https://github.com/bravo-kernel))\\n - [#2397](https://github.com/facebook/docusaurus/pull/2397) docs(v2):update alpha version to current version ([@fakela](https://github.com/fakela))\\n - [#2395](https://github.com/facebook/docusaurus/pull/2395) docs(v2): clarify instructions on docs-only mode ([@phoqe](https://github.com/phoqe))\\n- `docusaurus-init`\\n - [#2458](https://github.com/facebook/docusaurus/pull/2458) fix(v2): expand broken admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2461](https://github.com/facebook/docusaurus/pull/2461) chore(v2): upgrade react-dev-utils ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2439](https://github.com/facebook/docusaurus/pull/2439) polish(v2): add logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2435](https://github.com/facebook/docusaurus/pull/2435) fix(v2): fix aspect ratio for Open Graph image ([@lex111](https://github.com/lex111))\\n - [#2433](https://github.com/facebook/docusaurus/pull/2433) chore(v2): ignore JetBrains editors .iml files ([@slorber](https://github.com/slorber))\\n - [#2416](https://github.com/facebook/docusaurus/pull/2416) docs(v2): Add Build Tracker to Showcase page ([@paularmstrong](https://github.com/paularmstrong))\\n - [#2388](https://github.com/facebook/docusaurus/pull/2388) docs(v1): showcase user Day.js ([@iamkun](https://github.com/iamkun))\\n- `stylelint-copyright`\\n - [#2415](https://github.com/facebook/docusaurus/pull/2415) misc: improve stylelint rule ([@ayshiff](https://github.com/ayshiff))\\n\\n## Committers: 24\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Favour Kelvin ([@fakela](https://github.com/fakela))\\n- Jefferson Licet ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n- Kohhee Peace ([@KohheePeace](https://github.com/KohheePeace))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Luke Collier ([@lukecollier](https://github.com/lukecollier))\\n- Nisar Hassan Naqvi ([@nisarhassan12](https://github.com/nisarhassan12))\\n- Paul Armstrong ([@paularmstrong](https://github.com/paularmstrong))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@38elements](https://github.com/38elements)\\n- [@GermaVinsmoke](https://github.com/GermaVinsmoke)\\n- [@ZachJW34](https://github.com/ZachJW34)\\n- [@bravo-kernel](https://github.com/bravo-kernel)\\n- [@iamkun](https://github.com/iamkun)\\n- [@mohrash92](https://github.com/mohrash92)"},{"id":"/2.0.0-alpha.48","metadata":{"permalink":"/changelog/2.0.0-alpha.48","source":"@site/changelog/source/2.0.0-alpha.48.md","title":"2.0.0-alpha.48","description":"HOTFIX for 2.0.0-alpha.44.","date":"2020-03-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"nextItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.44**.\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#2383](https://github.com/facebook/docusaurus/pull/2383) fix(v2): specify proper version for stylelint-copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2382](https://github.com/facebook/docusaurus/pull/2382) fix(v2): add missing preset-typescript dependency ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2386](https://github.com/facebook/docusaurus/pull/2386) fix(v2): add missing prismjs dependency and Noop component ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.44","metadata":{"permalink":"/changelog/2.0.0-alpha.44","source":"@site/changelog/source/2.0.0-alpha.44.md","title":"2.0.0-alpha.44","description":"New Feature","date":"2020-03-08T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Amila Welihinda","alias":"amilajack","url":"https://github.com/amilajack","imageURL":"https://github.com/amilajack.png","key":"amilajack","page":null},{"name":"Paulus Schoutsen","alias":"balloob","url":"https://github.com/balloob","imageURL":"https://github.com/balloob.png","key":"balloob","page":null},{"name":"Robert","alias":"deniaz","url":"https://github.com/deniaz","imageURL":"https://github.com/deniaz.png","key":"deniaz","page":null},{"name":"Hassan Farid","alias":"hassanfarid","url":"https://github.com/hassanfarid","imageURL":"https://github.com/hassanfarid.png","key":"hassanfarid","page":null},{"name":"jartuso","alias":"jartuso","url":"https://github.com/jartuso","imageURL":"https://github.com/jartuso.png","key":"jartuso","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Mohamed Abdel Nasser","alias":"mohamedsgap","url":"https://github.com/mohamedsgap","imageURL":"https://github.com/mohamedsgap.png","key":"mohamedsgap","page":null},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Scott Lee","alias":"scottilee","url":"https://github.com/scottilee","imageURL":"https://github.com/scottilee.png","key":"scottilee","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Zhenchao Cai","alias":"Zhencha0Cai","url":"https://github.com/Zhencha0Cai","imageURL":"https://github.com/Zhencha0Cai.png","key":"Zhencha0Cai","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T19:00","authors":["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"nextItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2250](https://github.com/facebook/docusaurus/pull/2250) feat(v2): add support specify new languages for Prism ([@lex111](https://github.com/lex111))\\n - [#2344](https://github.com/facebook/docusaurus/pull/2344) feat(v2): allow specifying custom target for logo link ([@lex111](https://github.com/lex111))\\n - [#2327](https://github.com/facebook/docusaurus/pull/2327) feat(v2): add ability to use HTML in footer copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2335](https://github.com/facebook/docusaurus/pull/2335) feat(v2): add draft feature to blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#2303](https://github.com/facebook/docusaurus/pull/2303) docs(v2): Nav links activeBasePath ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus`\\n - [#2296](https://github.com/facebook/docusaurus/pull/2296) feat(v2): add ExecutionEnvironment API ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2345](https://github.com/facebook/docusaurus/pull/2345) fix(v2): force terminate building if client bundle failed ([@lex111](https://github.com/lex111))\\n - [#2310](https://github.com/facebook/docusaurus/pull/2310) fix(v2): add @babel/preset-typescript to babel-loader ([@deniaz](https://github.com/deniaz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2371](https://github.com/facebook/docusaurus/pull/2371) fix(v2): remove line break from end of code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2326](https://github.com/facebook/docusaurus/pull/2326) fix(v2): linkify blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2324](https://github.com/facebook/docusaurus/pull/2324) fix(v2): properly set dark mode logo on build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2325](https://github.com/facebook/docusaurus/pull/2325) fix(v2): switch a toggle when system theme changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#2334](https://github.com/facebook/docusaurus/pull/2334) fix(v2): make proper path to pages in TS ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2316](https://github.com/facebook/docusaurus/pull/2316) fix(v2): properly scale logo on IE 11 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2376](https://github.com/facebook/docusaurus/pull/2376) refactor(v2): clean up and improve Algolia styles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2372](https://github.com/facebook/docusaurus/pull/2372) chore(v2): upgrade Infima and remark-admonitions ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2367](https://github.com/facebook/docusaurus/pull/2367) refactor(v2): increase CSS specificity on application container ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `stylelint-copyright`\\n - [#2363](https://github.com/facebook/docusaurus/pull/2363) fix(v2): improve stylelint copyright header rule ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-types`, `docusaurus`\\n - [#2342](https://github.com/facebook/docusaurus/pull/2342) chore(v2): mark tagline field as optional ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2378](https://github.com/facebook/docusaurus/pull/2378) docs(v2): add section for docs-only mode ([@phoqe](https://github.com/phoqe))\\n- [#2357](https://github.com/facebook/docusaurus/pull/2357) docs(v2): fix getPathsToWatch() example syntax in lifecycle APIs ([@rlamana](https://github.com/rlamana))\\n- [#2351](https://github.com/facebook/docusaurus/pull/2351) docs(v2): add examples to plugin usage doc ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2343](https://github.com/facebook/docusaurus/pull/2343) docs(v2): fix typo in remark-admonitions example ([@hassanfarid](https://github.com/hassanfarid))\\n- [#2340](https://github.com/facebook/docusaurus/pull/2340) docs(v2): mention about disabling Jekyll when using GitHub pages ([@amilajack](https://github.com/amilajack))\\n- [#2338](https://github.com/facebook/docusaurus/pull/2338) docs(v2): guide on upgrading Docusaurus within a project ([@TheodoreChu](https://github.com/TheodoreChu))\\n- [#2313](https://github.com/facebook/docusaurus/pull/2313) docs(v2): move the quotes to remark admonitions ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [#2307](https://github.com/facebook/docusaurus/pull/2307) docs(v1): fix Windows instructions for GitHub Pages publishing ([@jartuso](https://github.com/jartuso))\\n- [#2300](https://github.com/facebook/docusaurus/pull/2300) docs(v2): make blog plugin config example valid ([@balloob](https://github.com/balloob))\\n- [#2289](https://github.com/facebook/docusaurus/pull/2289) docs(v2): add instructions on Travis CI deployment ([@mohamedsgap](https://github.com/mohamedsgap))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2369](https://github.com/facebook/docusaurus/pull/2369) misc: mention about v2 in README file ([@lex111](https://github.com/lex111))\\n - [#2368](https://github.com/facebook/docusaurus/pull/2368) misc: add note about edits in versioned docs ([@lex111](https://github.com/lex111))\\n - [#2333](https://github.com/facebook/docusaurus/pull/2333) docs: update use of npm/yarn in contributing.md ([@jsjoeio](https://github.com/jsjoeio))\\n - [#2328](https://github.com/facebook/docusaurus/pull/2328) docs(v2): remove unwanted black line from DocSearch showcase image ([@s-pace](https://github.com/s-pace))\\n - [#2319](https://github.com/facebook/docusaurus/pull/2319) docs(v2): showcase user Algolia ([@scottilee](https://github.com/scottilee))\\n- `docusaurus-init`\\n - [#2322](https://github.com/facebook/docusaurus/pull/2322) docs(v2): fix misc styling ([@lex111](https://github.com/lex111))\\n\\n## Committers: 16\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amila Welihinda ([@amilajack](https://github.com/amilajack))\\n- Hassan Farid ([@hassanfarid](https://github.com/hassanfarid))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Mohamed Abdel Nasser ([@mohamedsgap](https://github.com/mohamedsgap))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Paulus Schoutsen ([@balloob](https://github.com/balloob))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- Robert ([@deniaz](https://github.com/deniaz))\\n- Scott Lee ([@scottilee](https://github.com/scottilee))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zhenchao Cai ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [@jartuso](https://github.com/jartuso)"},{"id":"/2.0.0-alpha.43","metadata":{"permalink":"/changelog/2.0.0-alpha.43","source":"@site/changelog/source/2.0.0-alpha.43.md","title":"2.0.0-alpha.43","description":"HOTFIX for 2.0.0-alpha.41.","date":"2020-02-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-18T20:00","authors":["lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"nextItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.41**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2292](https://github.com/facebook/docusaurus/pull/2292) chore(v2): update Infima to 0.2.0-alpha.4 ([@yangshun](https://github.com/yangshun))\\n - [#2291](https://github.com/facebook/docusaurus/pull/2291) fix(v2): fix build and deps install ([@lex111](https://github.com/lex111))\\n\\n## Committers: 2\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.41","metadata":{"permalink":"/changelog/2.0.0-alpha.41","source":"@site/changelog/source/2.0.0-alpha.41.md","title":"2.0.0-alpha.41","description":"New Feature","date":"2020-02-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"awalias","alias":"awalias","url":"https://github.com/awalias","imageURL":"https://github.com/awalias.png","key":"awalias","page":null},{"name":"Elie Dutheil","alias":"edwandr","url":"https://github.com/edwandr","imageURL":"https://github.com/edwandr.png","key":"edwandr","page":null},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},{"name":"Evan Rubinton","alias":"erubi","url":"https://github.com/erubi","imageURL":"https://github.com/erubi.png","key":"erubi","page":null},{"name":"Gal Havivi","alias":"galhavivi","url":"https://github.com/galhavivi","imageURL":"https://github.com/galhavivi.png","key":"galhavivi","page":null},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},{"name":"Ashley Jeffs","alias":"Jeffail","url":"https://github.com/Jeffail","imageURL":"https://github.com/Jeffail.png","key":"Jeffail","page":null},{"name":"Joshua Williams","alias":"jjwill","url":"https://github.com/jjwill","imageURL":"https://github.com/jjwill.png","key":"jjwill","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Jonathan Delgado","alias":"jonathanrdelgado","url":"https://github.com/jonathanrdelgado","imageURL":"https://github.com/jonathanrdelgado.png","key":"jonathanrdelgado","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Mark Terrel","alias":"mterrel","url":"https://github.com/mterrel","imageURL":"https://github.com/mterrel.png","key":"mterrel","page":null},{"name":"Ond\u0159ej Nepo\u017eitek","alias":"OndrejNepozitek","url":"https://github.com/OndrejNepozitek","imageURL":"https://github.com/OndrejNepozitek.png","key":"OndrejNepozitek","page":null},{"name":"Scott Dowding","alias":"sdowding","url":"https://github.com/sdowding","imageURL":"https://github.com/sdowding.png","key":"sdowding","page":null},{"name":"Hanseung Yoo","alias":"trustyoo86","url":"https://github.com/trustyoo86","imageURL":"https://github.com/trustyoo86.png","key":"trustyoo86","page":null},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-16T20:00","authors":["awalias","edwandr","elviswolcott","erubi","galhavivi","hbulens","Jeffail","jjwill","JoelMarcey","jonathanrdelgado","jsjoeio","KohheePeace","lex111","mterrel","OndrejNepozitek","sdowding","trustyoo86","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"nextItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2224](https://github.com/facebook/docusaurus/pull/2224) feat(v2): add remark-admonitions to @docusaurus/preset-classic ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2263](https://github.com/facebook/docusaurus/pull/2263) feat(v2): pluralize posts on tag\'s page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2261](https://github.com/facebook/docusaurus/pull/2261) feat(v2): allow to specify different logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2253](https://github.com/facebook/docusaurus/pull/2253) feat(v2): allow specify custom link for logo ([@lex111](https://github.com/lex111))\\n - [#2255](https://github.com/facebook/docusaurus/pull/2255) feat(v2): add site title to meta title ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#2221](https://github.com/facebook/docusaurus/pull/2221) feat(v2): allow for TypeScript pages and components ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2285](https://github.com/facebook/docusaurus/pull/2285) fix(v2): fix codeblock copy button not including blank lines ([@KohheePeace](https://github.com/KohheePeace))\\n - [#2241](https://github.com/facebook/docusaurus/pull/2241) fix(v2): make code blocks scrollable ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2259](https://github.com/facebook/docusaurus/pull/2259) fix(v2): use site title if enabled blog-only mode ([@lex111](https://github.com/lex111))\\n - [#2248](https://github.com/facebook/docusaurus/pull/2248) fix(v2): adjust correct behavior of navbar when active anchor ([@lex111](https://github.com/lex111))\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n - [#2162](https://github.com/facebook/docusaurus/pull/2162) fix(v2): unify anchor behavior ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2262](https://github.com/facebook/docusaurus/pull/2262) fix(v2): remove focus on search input when hovering over it ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2240](https://github.com/facebook/docusaurus/pull/2240) fix(v2): hide read more button on non-truncated posts ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2237](https://github.com/facebook/docusaurus/pull/2237) fix(v2): include base url in 404 route ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#2236](https://github.com/facebook/docusaurus/pull/2236) fix(v2): escape link text in TOC ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2227](https://github.com/facebook/docusaurus/pull/2227) fix(v2): render correct theme for live code blocks on SSR ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2254](https://github.com/facebook/docusaurus/pull/2254) refactor(v2): avoid to use raw theme values ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2281](https://github.com/facebook/docusaurus/pull/2281) docs: update windows deploy command ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- [#2257](https://github.com/facebook/docusaurus/pull/2257) docs(v2): require using JSX flavored style objects in mdx ([@wgao19](https://github.com/wgao19))\\n- [#2251](https://github.com/facebook/docusaurus/pull/2251) docs(v2): collapsible categories in sidebar ([@lex111](https://github.com/lex111))\\n- [#2218](https://github.com/facebook/docusaurus/pull/2218) docs(v2): update link to available prism themes ([@jsjoeio](https://github.com/jsjoeio))\\n- [#2216](https://github.com/facebook/docusaurus/pull/2216) docs(v2): fix plugin-content-docs config comment typo ([@sdowding](https://github.com/sdowding))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2256](https://github.com/facebook/docusaurus/pull/2256) fix(v2): add title for Feedback page ([@lex111](https://github.com/lex111))\\n - [#2246](https://github.com/facebook/docusaurus/pull/2246) docs(v2): add Benthos to showcase ([@Jeffail](https://github.com/Jeffail))\\n - [#2242](https://github.com/facebook/docusaurus/pull/2242) docs(v1): showcase user Jafar ([@galhavivi](https://github.com/galhavivi))\\n - [#2238](https://github.com/facebook/docusaurus/pull/2238) docs(v1): showcase Dime ([@hbulens](https://github.com/hbulens))\\n - [#2233](https://github.com/facebook/docusaurus/pull/2233) docs(v2): showcase user supabase ([@awalias](https://github.com/awalias))\\n - [#2226](https://github.com/facebook/docusaurus/pull/2226) docs(v1): showcase user Adapt.js ([@mterrel](https://github.com/mterrel))\\n - [#2225](https://github.com/facebook/docusaurus/pull/2225) docs(v1): add The Diff Podcast to users ([@JoelMarcey](https://github.com/JoelMarcey))\\n - [#2219](https://github.com/facebook/docusaurus/pull/2219) chore(v1): Updated users list, removing sites not using docusaurus ([@jjwill](https://github.com/jjwill))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2239](https://github.com/facebook/docusaurus/pull/2239) chore(eslint): require curly brackets on all blocks ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ashley Jeffs ([@Jeffail](https://github.com/Jeffail))\\n- Elie Dutheil ([@edwandr](https://github.com/edwandr))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Evan Rubinton ([@erubi](https://github.com/erubi))\\n- Gal Havivi ([@galhavivi](https://github.com/galhavivi))\\n- Hanseung Yoo ([@trustyoo86](https://github.com/trustyoo86))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- JavaScript Joe ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jonathan Delgado ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n- Joshua Williams ([@jjwill](https://github.com/jjwill))\\n- KohheePeace ([@KohheePeace](https://github.com/KohheePeace))\\n- Mark Terrel ([@mterrel](https://github.com/mterrel))\\n- Ond\u0159ej Nepo\u017eitek ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- Scott Dowding ([@sdowding](https://github.com/sdowding))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))\\n- [@awalias](https://github.com/awalias)"},{"id":"/2.0.0-alpha.40","metadata":{"permalink":"/changelog/2.0.0-alpha.40","source":"@site/changelog/source/2.0.0-alpha.40.md","title":"2.0.0-alpha.40","description":"New Feature","date":"2019-12-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Janko Marohni\u0107","alias":"janko","url":"https://github.com/janko","imageURL":"https://github.com/janko.png","key":"janko","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nick McCurdy","alias":"nickmccurdy","url":"https://github.com/nickmccurdy","imageURL":"https://github.com/nickmccurdy.png","key":"nickmccurdy","page":null},{"name":"t11s","alias":"TransmissionsDev","url":"https://github.com/TransmissionsDev","imageURL":"https://github.com/TransmissionsDev.png","key":"TransmissionsDev","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-25T20:00","authors":["endiliey","janko","lex111","nickmccurdy","TransmissionsDev","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"nextItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2117](https://github.com/facebook/docusaurus/pull/2117) feat(v2): auto switch theme depending on the system theme ([@lex111](https://github.com/lex111))\\n - [#2055](https://github.com/facebook/docusaurus/pull/2055) feat(v2): hide navbar on scroll ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2145](https://github.com/facebook/docusaurus/pull/2145) fix(v2): remove style-loader, use minicssextract in both dev & prod ([@endiliey](https://github.com/endiliey))\\n - [#2122](https://github.com/facebook/docusaurus/pull/2122) fix(v2): dont collapse whitespace in minified html ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2105](https://github.com/facebook/docusaurus/pull/2105) fix(v2): move metadata export after compiling MDX to avoid weird MDX parsing error. ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2113](https://github.com/facebook/docusaurus/pull/2113) fix(v2): set stored theme only if it exists ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2129](https://github.com/facebook/docusaurus/pull/2129) fix(v2): disable scroll while mobile menu open ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2127](https://github.com/facebook/docusaurus/pull/2127) refactor(v2): toggle data-theme with vanilla js instead of react helmet ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2125](https://github.com/facebook/docusaurus/pull/2125) feat(v2): lazy load algolia css so its not render blocking ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2135](https://github.com/facebook/docusaurus/pull/2135) docs(v1): add space between \\"out\\" and \\"Docusaurus\\" ([@TransmissionsDev](https://github.com/TransmissionsDev))\\n - [#2128](https://github.com/facebook/docusaurus/pull/2128) docs(v1): showcase user Shrine ([@janko](https://github.com/janko))\\n - [#2110](https://github.com/facebook/docusaurus/pull/2110) docs(v2): fix pages routing inaccurate info ([@endiliey](https://github.com/endiliey))\\n - [#2106](https://github.com/facebook/docusaurus/pull/2106) fix(v2): add missing hyphen in color generator ([@lex111](https://github.com/lex111))\\n - [#2104](https://github.com/facebook/docusaurus/pull/2104) feat(v2): add color generator for primary colors ([@yangshun](https://github.com/yangshun))\\n - [#2103](https://github.com/facebook/docusaurus/pull/2103) docs: mention about moving docs directory into website ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2114](https://github.com/facebook/docusaurus/pull/2114) fix(v2): add syntax highlight to generated colors ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2126](https://github.com/facebook/docusaurus/pull/2126) docs: promote Docusaurus 2 usage ([@yangshun](https://github.com/yangshun))\\n - [#2119](https://github.com/facebook/docusaurus/pull/2119) fix(v2): align GH button in vertical center ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2124](https://github.com/facebook/docusaurus/pull/2124) feat(v2): add Facebook Docusaurus 2 template ([@yangshun](https://github.com/yangshun))\\n- `docusaurus`\\n - [#2111](https://github.com/facebook/docusaurus/pull/2111) feat(v2): explicit babel/runtime version ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2102](https://github.com/facebook/docusaurus/pull/2102) misc: add command to run prettier on docs ([@yangshun](https://github.com/yangshun))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2118](https://github.com/facebook/docusaurus/pull/2118) perf(v2): reduce HTML payload by eliminating chunk-map ([@endiliey](https://github.com/endiliey))\\n - [#2116](https://github.com/facebook/docusaurus/pull/2116) feat(v2): minify html ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Janko Marohni\u0107 ([@janko](https://github.com/janko))\\n- Nick McCurdy ([@nickmccurdy](https://github.com/nickmccurdy))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- t11s ([@TransmissionsDev](https://github.com/TransmissionsDev))"},{"id":"/2.0.0-alpha.39","metadata":{"permalink":"/changelog/2.0.0-alpha.39","source":"@site/changelog/source/2.0.0-alpha.39.md","title":"2.0.0-alpha.39","description":"Bug Fix","date":"2019-12-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-07T20:00","authors":["endiliey"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"nextItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2099](https://github.com/facebook/docusaurus/pull/2099) fix(v2): escape import path on windows ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2095](https://github.com/facebook/docusaurus/pull/2095) fix(v2): metadata error if markdown does not have ending line ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2100](https://github.com/facebook/docusaurus/pull/2100) chore(CI): docusaurus build on Windows with GitHub actions ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2096](https://github.com/facebook/docusaurus/pull/2096) feat(v2): better & nice looking error overlay ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 1\\n\\n- Endi ([@endiliey](https://github.com/endiliey))"},{"id":"/2.0.0-alpha.38","metadata":{"permalink":"/changelog/2.0.0-alpha.38","source":"@site/changelog/source/2.0.0-alpha.38.md","title":"2.0.0-alpha.38","description":"Breaking Change","date":"2019-12-06T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"KYY","alias":"FeynmanDNA","url":"https://github.com/FeynmanDNA","imageURL":"https://github.com/FeynmanDNA.png","key":"FeynmanDNA","page":null},{"name":"kaichu","alias":"qshiwu","url":"https://github.com/qshiwu","imageURL":"https://github.com/qshiwu.png","key":"qshiwu","page":null},{"name":"Shivangna Kaistha","alias":"shivangna","url":"https://github.com/shivangna","imageURL":"https://github.com/shivangna.png","key":"shivangna","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-06T20:00","authors":["endiliey","FeynmanDNA","qshiwu","shivangna"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"nextItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2088](https://github.com/facebook/docusaurus/pull/2088) perf(v2): smaller bundlesize by embedding metadata to content ([@endiliey](https://github.com/endiliey))\\n\\nIf you have swizzled any Docs/Blog component that depends on metadata, you\'ll have to update. If you haven\'t, no action is needed.\\n\\nFor example, if you\'ve swizzled `@theme/DocItem`. You\'ll have to update\\n\\n```diff\\n- const {metadata, content: DocContent} = props;\\n+ const {content: DocContent} = props;\\n+ const {metadata} = DocContent;\\n```\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2086](https://github.com/facebook/docusaurus/pull/2086) fix(v2): windows compatibility regression ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-ideal-image`\\n - [#2074](https://github.com/facebook/docusaurus/pull/2074) fix(v2): fix plugin-ideal-image breaking website (exports not defined) ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`\\n - [#2085](https://github.com/facebook/docusaurus/pull/2085) misc(v2): update mdx loader plugin README ([@shivangna](https://github.com/shivangna))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#2087](https://github.com/facebook/docusaurus/pull/2087) fix(v1): add key to versions.map in versions.js ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n - [#2083](https://github.com/facebook/docusaurus/pull/2083) refactor(v1): fix props for ProjectTitle ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- `docusaurus`\\n - [#2081](https://github.com/facebook/docusaurus/pull/2081) refactor(v2): move scripts/stylesheets injection to server side ([@endiliey](https://github.com/endiliey))\\n - [#2080](https://github.com/facebook/docusaurus/pull/2080) refactor(v2): minor code refactoring on component creator ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-utils`\\n - [#2089](https://github.com/facebook/docusaurus/pull/2089) perf(v2): improve dev build time by not overwriting file if possible ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`\\n - [#2079](https://github.com/facebook/docusaurus/pull/2079) perf(v2): algolia search result no longer cause full page refresh ([@endiliey](https://github.com/endiliey))\\n - [#2076](https://github.com/facebook/docusaurus/pull/2076) perf(v2): load algolia JS only when user interacts with search ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 4\\n\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- KYY ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- Shivangna Kaistha ([@shivangna](https://github.com/shivangna))\\n- kaichu ([@qshiwu](https://github.com/qshiwu))"},{"id":"/2.0.0-alpha.37","metadata":{"permalink":"/changelog/2.0.0-alpha.37","source":"@site/changelog/source/2.0.0-alpha.37.md","title":"2.0.0-alpha.37","description":"Breaking Change","date":"2019-12-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Binary Logic","alias":"binarylogic","url":"https://github.com/binarylogic","imageURL":"https://github.com/binarylogic.png","key":"binarylogic","page":null},{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Dongwoo Gim","alias":"gimdongwoo","url":"https://github.com/gimdongwoo","imageURL":"https://github.com/gimdongwoo.png","key":"gimdongwoo","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-01T20:00","authors":["binarylogic","endiliey","gimdongwoo","lex111","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"nextItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#2045](https://github.com/facebook/docusaurus/pull/2045) breaking(v2): minimum required nodejs version 8.9-> 8.10 so we can use es2017 ([@endiliey](https://github.com/endiliey))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`\\n - [#2000](https://github.com/facebook/docusaurus/pull/2000) feat(v2): add meta RSS/Atom feed links to head ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#2057](https://github.com/facebook/docusaurus/pull/2057) feat(v2): injectHtmlTags API to inject head and/or body html tags ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#2032](https://github.com/facebook/docusaurus/pull/2032) feat(v2): allow non sidebar category to be first item of sidebar ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#1983](https://github.com/facebook/docusaurus/pull/1983) feat(v2): docs versioning \u2744\ufe0f\ud83d\udd25 ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`\\n - [#2067](https://github.com/facebook/docusaurus/pull/2067) fix(v2): toc should not be broken for heading with html inline code ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2064](https://github.com/facebook/docusaurus/pull/2064) fix(v2): markdown reference to file should not be page not found ([@endiliey](https://github.com/endiliey))\\n - [#2061](https://github.com/facebook/docusaurus/pull/2061) fix(v2): fix docs sidebar highlighting if link is partially matched ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2042](https://github.com/facebook/docusaurus/pull/2042) fix(v2): remove css order warning if css imports are not sorted ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2066](https://github.com/facebook/docusaurus/pull/2066) refactor(v2): add title attribute to anchor link ([@lex111](https://github.com/lex111))\\n - [#1990](https://github.com/facebook/docusaurus/pull/1990) refactor(v2): make better a11y for tabs ([@lex111](https://github.com/lex111))\\n - [#2034](https://github.com/facebook/docusaurus/pull/2034) feat(v2): style sidebar on overflow ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2068](https://github.com/facebook/docusaurus/pull/2068) docs(v2): quick proofread docs ([@endiliey](https://github.com/endiliey))\\n - [#2047](https://github.com/facebook/docusaurus/pull/2047) docs(v2): add manual migration guide for versioning ([@endiliey](https://github.com/endiliey))\\n - [#2036](https://github.com/facebook/docusaurus/pull/2036) docs(v2): Reorganize migration guide ([@wgao19](https://github.com/wgao19))\\n - [#2052](https://github.com/facebook/docusaurus/pull/2052) fix(v2): make proper spelling of Yarn in tabs ([@lex111](https://github.com/lex111))\\n - [#2040](https://github.com/facebook/docusaurus/pull/2040) docs(v2): showcase user vector.dev :) ([@binarylogic](https://github.com/binarylogic))\\n - [#2038](https://github.com/facebook/docusaurus/pull/2038) docs(v2): add documentation on versioning ([@endiliey](https://github.com/endiliey))\\n - [#2037](https://github.com/facebook/docusaurus/pull/2037) docs(v2): display yarn and npm command on website ([@endiliey](https://github.com/endiliey))\\n - [#2051](https://github.com/facebook/docusaurus/pull/2051) docs(v2): more examples on lifecycle apis, cleanup ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`\\n - [#2072](https://github.com/facebook/docusaurus/pull/2072) refactor(v2): stronger typing for blog plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2060](https://github.com/facebook/docusaurus/pull/2060) fix(v2): clean generated manifest from previous build so we dont use the wrong one ([@endiliey](https://github.com/endiliey))\\n - [#2033](https://github.com/facebook/docusaurus/pull/2033) refactor(v2): move unused generated files out from build folder ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-types`, `docusaurus`\\n - [#2043](https://github.com/facebook/docusaurus/pull/2043) refactor(v2): stronger typing for route gen ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2044](https://github.com/facebook/docusaurus/pull/2044) chore(v2): bump deps ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2029](https://github.com/facebook/docusaurus/pull/2029) chore(v2): bump deps and remove unused deps ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#2070](https://github.com/facebook/docusaurus/pull/2070) perf(v2): more performant gtag and analytics plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2046](https://github.com/facebook/docusaurus/pull/2046) perf(v2): use webpack future version of asset emitting logic to free memory ([@endiliey](https://github.com/endiliey))\\n - [#2039](https://github.com/facebook/docusaurus/pull/2039) perf(v2): replace unnecessary json stringify(string) with inline string ([@endiliey](https://github.com/endiliey))\\n - [#2035](https://github.com/facebook/docusaurus/pull/2035) perf(v2): use @babel/runtime plugin to reduce codesize ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`\\n - [#2054](https://github.com/facebook/docusaurus/pull/2054) perf(v2): unblock metadata processing when possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Binary Logic ([@binarylogic](https://github.com/binarylogic))\\n- Dongwoo Gim ([@gimdongwoo](https://github.com/gimdongwoo))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))"},{"id":"/2.0.0-alpha.36","metadata":{"permalink":"/changelog/2.0.0-alpha.36","source":"@site/changelog/source/2.0.0-alpha.36.md","title":"2.0.0-alpha.36","description":"Breaking Change","date":"2019-11-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-22T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"nextItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#1989](https://github.com/facebook/docusaurus/pull/1989) misc(v2): change blog front matter to snake_case ([@yangshun](https://github.com/yangshun))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2012](https://github.com/facebook/docusaurus/pull/2012) feat(v2): allow hiding docs table of contents ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2007](https://github.com/facebook/docusaurus/pull/2007) feat(v2): only create one css file to avoid code-split css loading problem ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2005](https://github.com/facebook/docusaurus/pull/2005) fix(v2): adjust first-level heading offset ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2013](https://github.com/facebook/docusaurus/pull/2013) refactor(v2): split out dark mode toggle so it is easily swizzle-able ([@endiliey](https://github.com/endiliey))\\n - [#2017](https://github.com/facebook/docusaurus/pull/2017) feat(v2): style right sidebar scrollbar when overflow ([@endiliey](https://github.com/endiliey))\\n - [#2003](https://github.com/facebook/docusaurus/pull/2003) refactor(v2): improve semantic markup of blog ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2024](https://github.com/facebook/docusaurus/pull/2024) test(v2): babel exclude transpilation logic to prevent regression ([@endiliey](https://github.com/endiliey))\\n - [#2014](https://github.com/facebook/docusaurus/pull/2014) feat(v2): add meta generator docusaurus ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`\\n - [#2015](https://github.com/facebook/docusaurus/pull/2015) chore(v2): bump & remove unused deps ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#2009](https://github.com/facebook/docusaurus/pull/2009) misc(v2): branding update ([@yangshun](https://github.com/yangshun))\\n\\n## :memo: Documentation\\n\\n- [#2010](https://github.com/facebook/docusaurus/pull/2010) docs(v2): misc updates ([@yangshun](https://github.com/yangshun))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.35","metadata":{"permalink":"/changelog/2.0.0-alpha.35","source":"@site/changelog/source/2.0.0-alpha.35.md","title":"2.0.0-alpha.35","description":"New Feature","date":"2019-11-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Eric Carboni","alias":"ericcarboni","url":"https://github.com/ericcarboni","imageURL":"https://github.com/ericcarboni.png","key":"ericcarboni","page":null},{"name":"Jamie Davenport","alias":"jamiedavenport","url":"https://github.com/jamiedavenport","imageURL":"https://github.com/jamiedavenport.png","key":"jamiedavenport","page":null},{"name":"Nick McCormick","alias":"kenning","url":"https://github.com/kenning","imageURL":"https://github.com/kenning.png","key":"kenning","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Vincent van der Walt","alias":"vinnytheviking","url":"https://github.com/vinnytheviking","imageURL":"https://github.com/vinnytheviking.png","key":"vinnytheviking","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-17T20:00","authors":["endiliey","ericcarboni","jamiedavenport","kenning","lex111","vinnytheviking"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"nextItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1965](https://github.com/facebook/docusaurus/pull/1965) feat(v2): add ability specify link in footer logo ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#1992](https://github.com/facebook/docusaurus/pull/1992) fix(v2): static phrasing content should be rendered correctly in TOC ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#1999](https://github.com/facebook/docusaurus/pull/1999) fix(v2): remove hashbang when click on category ([@lex111](https://github.com/lex111))\\n - [#1962](https://github.com/facebook/docusaurus/pull/1962) fix(v2): make not clickable post title on post item page ([@lex111](https://github.com/lex111))\\n - [#1980](https://github.com/facebook/docusaurus/pull/1980) fix(v2): remove invalid label attribute of footer links ([@lex111](https://github.com/lex111))\\n - [#1978](https://github.com/facebook/docusaurus/pull/1978) fix(v2): use regular div instead of main tag for wrapper layout page ([@lex111](https://github.com/lex111))\\n - [#1975](https://github.com/facebook/docusaurus/pull/1975) fix(v2): move header inside article tag in doc page ([@lex111](https://github.com/lex111))\\n - [#1974](https://github.com/facebook/docusaurus/pull/1974) fix(v2): remove invalid attributes of nav links ([@lex111](https://github.com/lex111))\\n - [#1963](https://github.com/facebook/docusaurus/pull/1963) fix(v2): remove empty containers when no data in blog pages ([@lex111](https://github.com/lex111))\\n - [#1966](https://github.com/facebook/docusaurus/pull/1966) fix(v2): remove duplicate meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2001](https://github.com/facebook/docusaurus/pull/2001) fix(v2): improve UI of search ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#1991](https://github.com/facebook/docusaurus/pull/1991) fix(v2): remove accessible anchors via keyboard ([@lex111](https://github.com/lex111))\\n - [#1987](https://github.com/facebook/docusaurus/pull/1987) refactor(v2): replace h1 tag with h2 in blog list pages ([@lex111](https://github.com/lex111))\\n - [#1981](https://github.com/facebook/docusaurus/pull/1981) fix(v2): use tag time for showing last update of doc item ([@lex111](https://github.com/lex111))\\n - [#1977](https://github.com/facebook/docusaurus/pull/1977) feat(v2): add aria-label to read more links for a11y ([@lex111](https://github.com/lex111))\\n - [#1964](https://github.com/facebook/docusaurus/pull/1964) fix(v2): use tag time for showing post item date ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#1968](https://github.com/facebook/docusaurus/pull/1968) refactor(v2): simplify blog truncate function ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#1988](https://github.com/facebook/docusaurus/pull/1988) docs(v2): fix syntax highlighting for YML code blocks ([@lex111](https://github.com/lex111))\\n - [#1976](https://github.com/facebook/docusaurus/pull/1976) docs(v2): Add section to blog document about feed location ([@vinnytheviking](https://github.com/vinnytheviking))\\n - [#1970](https://github.com/facebook/docusaurus/pull/1970) docs(v2): update configureWebpack utility functions ([@jamiedavenport](https://github.com/jamiedavenport))\\n- `docusaurus-1.x`\\n - [#1961](https://github.com/facebook/docusaurus/pull/1961) docs(v1): remove exclusive language ([@ericcarboni](https://github.com/ericcarboni))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2002](https://github.com/facebook/docusaurus/pull/2002) fix(v2): fix browser window menu icon on smaller screen ([@lex111](https://github.com/lex111))\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#1985](https://github.com/facebook/docusaurus/pull/1985) chore(v2): update dependencies ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#1979](https://github.com/facebook/docusaurus/pull/1979) perf(v2): reduce main bundle size by using es5 if possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Eric Carboni ([@ericcarboni](https://github.com/ericcarboni))\\n- Jamie Davenport ([@jamiedavenport](https://github.com/jamiedavenport))\\n- Nick McCormick ([@kenning](https://github.com/kenning))\\n- Vincent van der Walt ([@vinnytheviking](https://github.com/vinnytheviking))"},{"id":"/2.0.0-alpha.34","metadata":{"permalink":"/changelog/2.0.0-alpha.34","source":"@site/changelog/source/2.0.0-alpha.34.md","title":"2.0.0-alpha.34","description":"New Feature","date":"2019-11-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-11T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"nextItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1956](https://github.com/facebook/docusaurus/pull/1956) feat(v2): add ability hide dark mode toggle ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#1958](https://github.com/facebook/docusaurus/pull/1958) breaking(v2): editUrl should point to website instead of docsDir ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#1959](https://github.com/facebook/docusaurus/pull/1959) fix(v2): useTOC hooks should not be called in each nested children ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#1957](https://github.com/facebook/docusaurus/pull/1957) refactor(v2): avoid synchronous/ blocking operation when possible ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- [#1953](https://github.com/facebook/docusaurus/pull/1953) fix(v2): update Infima website URL ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#1955](https://github.com/facebook/docusaurus/pull/1955) chore: bump dev dependencies ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1952](https://github.com/facebook/docusaurus/pull/1952) chore(v2): add lerna-changelog ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#1951](https://github.com/facebook/docusaurus/pull/1951) perf(v2): skip runtime fileHash cache in prod & get timestamp asynchronously ([@endiliey](https://github.com/endiliey))\\n - [#1950](https://github.com/facebook/docusaurus/pull/1950) perf(v2): more efficient hot reload & consistent filegen ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.33","metadata":{"permalink":"/changelog/2.0.0-alpha.33","source":"@site/changelog/source/2.0.0-alpha.33.md","title":"2.0.0-alpha.33","description":"Features","date":"2019-11-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-08T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"nextItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Table of contents is now highlighted depending on current active headings. (thanks to awesome @SantiagoGdaR) [#1896](https://github.com/facebook/docusaurus/pull/1896)\\n- Official blog plugin can now generate feed for blog posts. (thanks to awesome @moozzyk) [#1916](https://github.com/facebook/docusaurus/pull/1916)\\n- **BREAKING** `prismTheme` is renamed to `theme` as part new `prism` object in `themeConfig` field in your `docusaurus.config.js`. Eg:\\n ```diff\\n themeConfig: {\\n - prismTheme: require(\'prism-react-renderer/themes/dracula\'),\\n + prism: {\\n + theme: require(\'prism-react-renderer/themes/dracula\'),\\n + },\\n },\\n ```\\n- Added new `prism` option `defaultLanguage` that is used if the language is not specified in code blocks. [#1910](https://github.com/facebook/docusaurus/pull/1910)\\n\\n## Fixes\\n\\n- Fix babel/env not picking the correct browserslist configuration during development. When running `docusaurus start`, `process.env.NODE_ENV` is now consistently set to `development`.\\n- Ensure routes config generation to be more consistent in ordering. Nested routes should be placed last in routes.js. This will allow user to create `src/pages/docs.js` to create custom docs page for `/docs` or even `src/pages/docs/super.js` to create page for `/docs/super/`;\\n- Fix watcher does not trigger reload on windows.\\n- Fix build compilation error if exists only one code tab.\\n- Add minor padding to docs container so that hash-link won\'t be cut off.\\n\\n## Others\\n\\n- Misc dependency upgrades.\\n- Stability improvement (more tests) & refactoring on docs plugin to prevent regression."},{"id":"/2.0.0-alpha.32","metadata":{"permalink":"/changelog/2.0.0-alpha.32","source":"@site/changelog/source/2.0.0-alpha.32.md","title":"2.0.0-alpha.32","description":"Features","date":"2019-11-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-04T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"nextItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Add `<Redirect>` component for client side redirect. Example Usage:\\n\\n```js\\nimport React from \'react\';\\nimport {Redirect} from \'@docusaurus/router\';\\n\\nfunction Home() {\\n return <Redirect to=\\"/docs/test\\" />;\\n}\\n```\\n\\n- Allow user to add custom HTML to footer items. [#1905](https://github.com/facebook/docusaurus/pull/1905)\\n- Added code block line highlighting feature (thanks @lex111)! If you have previously swizzled the `CodeBlock` theme component, it is recommended to update your source code to have this feature. ([#1860](https://github.com/facebook/Docusaurus/issues/1860))\\n\\n## Bug Fixes\\n\\n- Fix `@theme/Tabs` component to be able to create tabs with only one item.\\n- Fix MDX `@theme/Heading` component. If there is no id, it should not create anchor link.\\n- Fixed a bug in which if `themeConfig.algolia` is not defined, the custom searchbar won\'t appear. If you\'ve swizzled Algolia `SearchBar` component before, please update your source code otherwise CSS might break. See [#1909](https://github.com/facebook/docusaurus/pull/1909/files) for reference.\\n\\n```js\\n- <Fragment>\\n+ <div className=\\"navbar__search\\" key=\\"search-box\\">\\n```\\n\\n- Slightly adjust search icon position to be more aligned on small width device. ([#1893](https://github.com/facebook/Docusaurus/issues/1893))\\n- Fix algolia styling bug, previously search suggestion result is sometimes hidden. ([#1915](https://github.com/facebook/Docusaurus/issues/1915))\\n- Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1.\\n- Fix accessing `docs/` or `/docs/xxxx` that does not match any existing doc page should return 404 (Not found) page, not blank page. ([#1903](https://github.com/facebook/Docusaurus/issues/1903))\\n- Prioritize `@docusaurus/core` dependencies/ node_modules over user\'s node_modules. This fix a bug whereby if user has core-js@3 on its own node_modules but docusaurus depends on core-js@2, we previously encounter `Module not found: core-js/modules/xxxx` (because core-js@3 doesn\'t have that).\\n- Fix a bug where docs plugin add `/docs` route even if docs folder is empty. We also improved docs plugin test coverage to 100% for stability before working on docs versioning. ([#1912](https://github.com/facebook/Docusaurus/issues/1912))\\n\\n## Performance Improvement\\n\\n- Reduce memory usage consumption. ([#1900](https://github.com/facebook/Docusaurus/issues/1900))\\n- Significantly reduce main bundle size and initial HTML payload on production build. Generated files from webpack is also shorter in name. ([#1898](https://github.com/facebook/Docusaurus/issues/1898))\\n- Simplify blog metadata. Previously, accessing `/blog/post-xxx` will request for next and prev blog post metadata too aside from target post metadata. We should only request target post metadata. ([#1908](https://github.com/facebook/Docusaurus/issues/1908))\\n\\n## Others\\n\\n- Convert sitemap plugin to TypeScript. ([#1894](https://github.com/facebook/Docusaurus/issues/1894))\\n- Refactor dark mode toggle into a hook. ([#1899](https://github.com/facebook/Docusaurus/issues/1899))"},{"id":"/2.0.0-alpha.31","metadata":{"permalink":"/changelog/2.0.0-alpha.31","source":"@site/changelog/source/2.0.0-alpha.31.md","title":"2.0.0-alpha.31","description":"- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.","date":"2019-10-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-26T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"nextItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.\\n- Footer is now also displayed in docs page for consistency.\\n- Remove empty doc sidebar container if sidebar for a particular doc page does not exist. Otherwise, it will cause an additional empty space.\\n- Default PostCSS loader now only polyfills stage 3+ features (previously it was stage 2) like Create React App. Stage 2 CSS is considered relatively unstable and subject to change while Stage 3 features will likely become a standard.\\n- Fix search bar focus bug. When you put the focus on search input, previously the focus will remain although we have clicked to other area outside of the search input.\\n- New themeConfig option `sidebarCollapsible`. It is on by default. If explicitly set to `false`, all doc items in sidebar is expanded. Otherwise, it will still be a collapsible sidebar.\\n- Disable adding hashes to the generated class names of CSS modules in dev mode. Generating unique identifiers takes some time, which can be saved since including paths to files in class names is enough to avoid collisions.\\n- Fix showing sidebar category with empty items.\\n- Update infima from 0.2.0-alpha.2 to 0.2.0-alpha.3\\n - Fix pagination nav and right sidebar color contrast ratio\\n - Fix sidebar arrow color in dark mode\\n - Fix footer mobile issue\\n - Increase sidebar width\\n - etc"},{"id":"/2.0.0-alpha.30","metadata":{"permalink":"/changelog/2.0.0-alpha.30","source":"@site/changelog/source/2.0.0-alpha.30.md","title":"2.0.0-alpha.30","description":"- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug TypeError: Cannot assign to read only property \'exports\' of object \'#\'.(#1868)","date":"2019-10-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-22T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"nextItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug `TypeError: Cannot assign to read only property \'exports\' of object \'#<Object>\'`.([#1868](https://github.com/facebook/docusaurus/pull/1868))\\n\\nIf you are still encountering the error. Please check whether you use `module.exports` for your `.js` file instead of doing `export` (mixing CJS and ES). See https://github.com/webpack/webpack/issues/4039#issuecomment-477779322 and https://github.com/webpack/webpack/issues/4039#issuecomment-273804003 for more context."},{"id":"/2.0.0-alpha.29","metadata":{"permalink":"/changelog/2.0.0-alpha.29","source":"@site/changelog/source/2.0.0-alpha.29.md","title":"2.0.0-alpha.29","description":"HOTFIX for 2.0.0-alpha.28.","date":"2019-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"nextItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.28**.\\n\\n- Fix missing `core-js` dependencies on `@docusaurus/core`.\\n- Fix wrong `@babel/env` preset configuration that causes build compilation error.\\n- New UI for webpack compilation progress bar."},{"id":"/2.0.0-alpha.28","metadata":{"permalink":"/changelog/2.0.0-alpha.28","source":"@site/changelog/source/2.0.0-alpha.28.md","title":"2.0.0-alpha.28","description":"- Further reduce memory usage to avoid heap memory allocation failure.","date":"2019-10-21T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"nextItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Further reduce memory usage to avoid heap memory allocation failure.\\n- Fix `keywords` frontmatter for SEO not working properly.\\n- Fix `swizzle` command not passing context properly to theme packages.\\n- Add `extendCli` api for plugins. This will allow plugin to further extend Docusaurus CLI.\\n- Fix `swizzle` command not being able to swizzle single js file.\\n- Fix logo URL in footer to be appended with baseUrl automatically.\\n- Add the option `--no-open` for `start` command.\\n- Set `@babel/env` useBuiltins to `usage`. This will automatically use browserlist and import polyfills required.\\n- Modified TerserWebpackPlugin `terserOptions` for better cross-browser compatibility.\\n- **BREAKING** `withBaseUrl` is renamed to `useBaseUrl` because its a React Hooks. Make sure you import/rename it correctly. Eg: `import useBaseUrl from \'@docusaurus/useBaseUrl`;\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine.\\n- Upgrade dependencies."},{"id":"/2.0.0-alpha.27","metadata":{"permalink":"/changelog/2.0.0-alpha.27","source":"@site/changelog/source/2.0.0-alpha.27.md","title":"2.0.0-alpha.27","description":"- Add @theme/Tabs which can be used to implement multi-language code tabs.","date":"2019-10-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"nextItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add `@theme/Tabs` which can be used to implement multi-language code tabs.\\n- Implement `custom_edit_url` and `hide_title` markdown header for docusaurus v1 feature parity.\\n- Reduce memory usage and slightly faster production build.\\n- Misc dependency upgrades."},{"id":"/2.0.0-alpha.26","metadata":{"permalink":"/changelog/2.0.0-alpha.26","source":"@site/changelog/source/2.0.0-alpha.26.md","title":"2.0.0-alpha.26","description":"- Docs, pages plugin is rewritten in TypeScript","date":"2019-10-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-12T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"nextItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Docs, pages plugin is rewritten in TypeScript\\n- Docs improvements and tweaks\\n - Improved metadata which results in smaller bundle size.\\n - Docs sidebar can now be more than one level deep, theoretically up to infinity\\n - Collapsible docs sidebar!\\n - Make doc page title larger\\n - Add `editUrl` option (URL for editing) to docs plugin. If this field is set, there will be an \\"Edit this page\\" link for each doc page. Example: \'https://github.com/facebook/docusaurus/edit/master/docs\'\\n - Add `showLastUpdateTime` and `showLastUpdateAuthor` options to docs plugin to further achieve v1 parity of showing last update data for a particular doc\\n- Slight tweaks to the Blog components - blog title is larger now\\n- Code Blocks\\n - Change default theme from Night Owl to Palenight\\n - Slight tweaks to playground/preview components\\n- Add `scripts` and `stylesheets` field to `docusaurus.config.js`\\n- More documentation..."},{"id":"/2.0.0-alpha.25","metadata":{"permalink":"/changelog/2.0.0-alpha.25","source":"@site/changelog/source/2.0.0-alpha.25.md","title":"2.0.0-alpha.25","description":"- Blog plugin is rewritten in TypeScript and can now support CJK","date":"2019-10-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-01T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"nextItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Blog plugin is rewritten in TypeScript and can now support CJK\\n- Upgrade key direct dependencies such as webpack, mdx and babel to latest\\n- Do not escape html and body attributes\\n- For devices with very small viewport width, the searchbar is replaced with a search icon. On tap of the search icon the searchbar is expanded and the text beside the logo is hidden and remains hidden while the search bar is expanded.\\n- Add `date` frontMatter support for blog plugin\\n- Add `truncateMarker` option to blog plugin, support string or regex.\\n- Webpack `optimization.removeAvailableModules` is now disabled for performance gain. See https://github.com/webpack/webpack/releases/tag/v4.38.0 for more context."},{"id":"/2.0.0-alpha.24","metadata":{"permalink":"/changelog/2.0.0-alpha.24","source":"@site/changelog/source/2.0.0-alpha.24.md","title":"2.0.0-alpha.24","description":"- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.","date":"2019-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-24T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"nextItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.\\n- Upgrade dependencies of css-loader from 2.x to 3.x. CSS modules localIdentName hash now only use the last 4 characters instead of 8.\\n- Fix broken markdown linking replacement for mdx files\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine. Instead of absolute path, we use relative path from site directory. Resulting in shorter webpack chunk naming and smaller bundle size.\\n- Use contenthash instead of chunkhash for better long term caching\\n- Allow user to customize generated heading from MDX. Swizzle `@theme/Heading`"},{"id":"/2.0.0-alpha.23","metadata":{"permalink":"/changelog/2.0.0-alpha.23","source":"@site/changelog/source/2.0.0-alpha.23.md","title":"2.0.0-alpha.23","description":"- Fix docusaurus route config generation for certain edge case","date":"2019-07-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"nextItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix docusaurus route config generation for certain edge case"},{"id":"/2.0.0-alpha.22","metadata":{"permalink":"/changelog/2.0.0-alpha.22","source":"@site/changelog/source/2.0.0-alpha.22.md","title":"2.0.0-alpha.22","description":"- Add missing dependencies on @docusaurus/preset-classic","date":"2019-07-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-20T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"nextItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add missing dependencies on `@docusaurus/preset-classic`\\n- New plugin `@docusaurus/plugin-ideal-image` to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)\\n- Better Twitter/discord image preview. Previously the size is too zoomed\\n- Allow prism syntax highlighting theme customization. Refer to https://docusaurus.io/docs/markdown-features#syntax-highlighting\\n- CSS is now autoprefixed using postcss\\n- Faster, lighter webpack bundle size\\n- `@docusaurus/theme-live-codeblock` is now much smaller in size and no longer only load on viewport\\n- Blog markdown files now support using the id field to specify the path"},{"id":"/2.0.0-alpha.21","metadata":{"permalink":"/changelog/2.0.0-alpha.21","source":"@site/changelog/source/2.0.0-alpha.21.md","title":"2.0.0-alpha.21","description":"- Fix babel-loader not transpiling docusaurus package","date":"2019-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"nextItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel-loader not transpiling docusaurus package"},{"id":"/2.0.0-alpha.20","metadata":{"permalink":"/changelog/2.0.0-alpha.20","source":"@site/changelog/source/2.0.0-alpha.20.md","title":"2.0.0-alpha.20","description":"- Add copy codeblock button","date":"2019-07-14T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"nextItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add copy codeblock button\\n- Add Google analytics and Google gtag plugins.\\n- Move source components to `/src`. Please create a `website/src` directory and move your `/pages` and `/theme` code into it. This is to make it easier to integrate your website with external build/static analysis tooling (you can now just pass in `src/**/*.js` as the path to process).\\n- Adde more documentation thanks to @wgao19.\\n- Deprecate the current docs plugin. The docs plugin as of 2.0.0-alpha.19 is heavily based on V1 specifications and we intend to create a better one that fixes some of the inconsistencies in V1. If you have swizzled any doc components, you will have to update their names. You are highly encourages to not swizzle the legacy doc components until we have completed the new docs plugin.\\n- Separate v2 init command to new package @docusaurus/init\\n- Render 404.html page\\n- Improve SEO\\n- Clicking on the logo in the mobile sliding navigation will now bring you to the homepage.\\n- Performance\\n - Disable webpack output pathinfo. Webpack has the ability to generate path info in the output bundle. However, this puts garbage collection pressure on projects that bundle thousands of modules. Not very useful for our case\\n - Drop cache-loader in CI and test environment because it has an initial overhead. We always start from scratch in vm instance like CI so cache-loader is useless\\n - Better splitchunks and babel default webpack config"},{"id":"/2.0.0-alpha.19","metadata":{"permalink":"/changelog/2.0.0-alpha.19","source":"@site/changelog/source/2.0.0-alpha.19.md","title":"2.0.0-alpha.19","description":"- Add a sensible default for browserslist config.","date":"2019-06-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-06-07T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"nextItem":{"title":"V2 Changelog","permalink":"/changelog/V2 Changelog"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add a sensible default for browserslist config.\\n- UI\\n - Add sun and moon emoji to the dark mode toggle.\\n - Mobile responsive menu.\\n - Right table of contents for docs is now sticky.\\n- Plugins\\n - Change plugin definitions from classes to functions. Refer to the new plugin docs.\\n - Implement Clients module API.\\n - Change format within `docusaurus.config.js` to be like presets.\\n- Deps\\n - Infima CSS is now locked down to specific versions and not relying upon the CDN which reads from trunk.\\n - Update dependencies to latest\\n- Customize/ Override infima CSS variables by passing options into the classic preset.\\n\\n```\\npresets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n theme: {\\n customCss: require.resolve(\'./css/custom.css\'),\\n },\\n ...\\n },\\n ],\\n],\\n```\\n\\n- Allow passing remark and rehype plugins to mdx-loader for docs and blog plugin\\n- Move themes component of docs and blog to be part of theme-classic\\n- Use composition style for prism syntax highlighting instead of doing it via rehype plugin\\n- Pass MDXProvider to docs and blog. To change the provided MDX components, run `docusaurus swizzle @docusaurus/theme-classic MDXComponents`\\n- Add @docusaurus/theme-livecodeblock plugin\\n- Better run-time code generation & webpack splitchunks optimization\\n- Minify css for production build\\n- Fix weird scrolling problem when navigating to a route with a `hash` location"},{"id":"/V2 Changelog","metadata":{"permalink":"/changelog/V2 Changelog","source":"@site/changelog/source/V2 Changelog.md","title":"V2 Changelog","description":"siteConfig.js changes","date":"2019-04-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-04-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n### `siteConfig.js` changes\\n\\n- `siteConfig.js` renamed to `docusaurus.config.js`.\\n- Remove the following config options:\\n - `docsUrl`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `customDocsPath`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `sidebars.json` now has to be explicitly loaded by users and passed into the plugin option on `docusaurus-plugin-content-docs`.\\n - `headerLinks` doc, page, blog is deprecated and has been to moved into `themeConfig` under the name `navbar`. The syntax is now:\\n\\n```js\\nthemeConfig: {\\n navbar: {\\n title: \'Docusaurus\',\\n logo: {\\n alt: \'Docusaurus Logo\',\\n src: \'img/docusaurus.svg\',\\n },\\n links: [\\n {to: \'docs/introduction\', label: \'Docs\', position: \'left\'},\\n {to: \'blog\', label: \'Blog\', position: \'left\'},\\n {to: \'feedback\', label: \'Feedback\', position: \'left\'},\\n {\\n href: \'https://github.com/facebook/docusaurus\',\\n label: \'GitHub\',\\n position: \'right\',\\n },\\n ],\\n },\\n}\\n```\\n\\n### Migration Guide\\n\\n_Work in Progress_\\n\\n### Presets\\n\\n- Add presets for plugins that follow the [Babel preset convention](https://babeljs.io/docs/en/presets)."}],"blogListPaginated":[{"items":["/3.4.0","/3.3.2","/3.3.1","/3.3.0","/3.2.1","/3.2.0","/3.1.1","/3.1.0","/3.0.1","/3.0.0","/2.4.3","/2.4.2","/2.4.1","/2.4.0","/2.3.1","/2.3.0","/2.2.0","/2.1.0","/2.0.1","/2.0.0"],"metadata":{"permalink":"/changelog","page":1,"postsPerPage":20,"totalPages":5,"totalCount":97,"nextPage":"/changelog/page/2","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-rc.1","/2.0.0-beta.22","/2.0.0-beta.21","/2.0.0-beta.20","/2.0.0-beta.19","/2.0.0-beta.18","/2.0.0-beta.17","/2.0.0-beta.16","/2.0.0-beta.15","/2.0.0-beta.14","/2.0.0-beta.13","/2.0.0-beta.12","/2.0.0-beta.11","/2.0.0-beta.10","/2.0.0-beta.9","/2.0.0-beta.8","/2.0.0-beta.7","/2.0.0-beta.6","/2.0.0-beta.5","/2.0.0-beta.4"],"metadata":{"permalink":"/changelog/page/2","page":2,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog","nextPage":"/changelog/page/3","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-beta.3","/2.0.0-beta.2","/2.0.0-beta.1","/2.0.0-beta.0","/2.0.0-alpha.75","/2.0.0-alpha.74","/2.0.0-alpha.73","/2.0.0-alpha.72","/2.0.0-alpha.71","/2.0.0-alpha.70","/2.0.0-alpha.69","/2.0.0-alpha.68","/2.0.0-alpha.67","/2.0.0-alpha.66","/2.0.0-alpha.65","/2.0.0-alpha.64","/2.0.0-alpha.63","/2.0.0-alpha.62","/2.0.0-alpha.61","/2.0.0-alpha.60"],"metadata":{"permalink":"/changelog/page/3","page":3,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/2","nextPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.59","/2.0.0-alpha.58","/2.0.0-alpha.57","/2.0.0-alpha.56","/2.0.0-alpha.55","/2.0.0-alpha.54","/2.0.0-alpha.53","/2.0.0-alpha.51","/2.0.0-alpha.50","/2.0.0-alpha.49","/2.0.0-alpha.48","/2.0.0-alpha.44","/2.0.0-alpha.43","/2.0.0-alpha.41","/2.0.0-alpha.40","/2.0.0-alpha.39","/2.0.0-alpha.38","/2.0.0-alpha.37","/2.0.0-alpha.36","/2.0.0-alpha.35"],"metadata":{"permalink":"/changelog/page/4","page":4,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/3","nextPage":"/changelog/page/5","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.34","/2.0.0-alpha.33","/2.0.0-alpha.32","/2.0.0-alpha.31","/2.0.0-alpha.30","/2.0.0-alpha.29","/2.0.0-alpha.28","/2.0.0-alpha.27","/2.0.0-alpha.26","/2.0.0-alpha.25","/2.0.0-alpha.24","/2.0.0-alpha.23","/2.0.0-alpha.22","/2.0.0-alpha.21","/2.0.0-alpha.20","/2.0.0-alpha.19","/V2 Changelog"],"metadata":{"permalink":"/changelog/page/5","page":5,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}],"blogTags":{},"blogTagsListPath":"/changelog/tags","authorsMap":{"6543":{"name":"6543","alias":"6543","url":"https://github.com/6543","imageURL":"https://github.com/6543.png","key":"6543","page":null},"1084350607":{"name":"\u4e45\u67d3 | JiuRan","alias":"1084350607","url":"https://github.com/1084350607","imageURL":"https://github.com/1084350607.png","key":"1084350607","page":null},"Arsero":{"name":"Azzedine E.","alias":"Arsero","url":"https://github.com/Arsero","imageURL":"https://github.com/Arsero.png","key":"Arsero","page":null},"CodeDoctorDE":{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},"homotechsual":{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},"ilmedova":{"name":"Mahri Ilmedova","alias":"ilmedova","url":"https://github.com/ilmedova","imageURL":"https://github.com/ilmedova.png","key":"ilmedova","page":null},"namnguyenthanhwork":{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},"ncoughlin":{"name":"Nick Coughlin","alias":"ncoughlin","url":"https://github.com/ncoughlin","imageURL":"https://github.com/ncoughlin.png","key":"ncoughlin","page":null},"OzakIOne":{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},"PetarMc1":{"name":"Petar_mc","alias":"PetarMc1","url":"https://github.com/PetarMc1","imageURL":"https://github.com/PetarMc1.png","key":"PetarMc1","page":null},"revi":{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},"slorber":{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},"tats-u":{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null},"Abdullah-03":{"name":"Abdullah Saud","alias":"Abdullah-03","url":"https://github.com/Abdullah-03","imageURL":"https://github.com/Abdullah-03.png","key":"Abdullah-03","page":null},"andrmaz":{"name":"Andrea Mazzucchelli","alias":"andrmaz","url":"https://github.com/andrmaz","imageURL":"https://github.com/andrmaz.png","key":"andrmaz","page":null},"d4nyll":{"name":"Daniel Li","alias":"d4nyll","url":"https://github.com/d4nyll","imageURL":"https://github.com/d4nyll.png","key":"d4nyll","page":null},"eldemcan":{"name":"Can Eldem","alias":"eldemcan","url":"https://github.com/eldemcan","imageURL":"https://github.com/eldemcan.png","key":"eldemcan","page":null},"gagdiez":{"name":"Guille","alias":"gagdiez","url":"https://github.com/gagdiez","imageURL":"https://github.com/gagdiez.png","key":"gagdiez","page":null},"h3nr1ke":{"name":"H3NR1KE","alias":"h3nr1ke","url":"https://github.com/h3nr1ke","imageURL":"https://github.com/h3nr1ke.png","key":"h3nr1ke","page":null},"iAdramelk":{"name":"Alexey Ivanov","alias":"iAdramelk","url":"https://github.com/iAdramelk","imageURL":"https://github.com/iAdramelk.png","key":"iAdramelk","page":null},"johnnyreilly":{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},"kaihoffman":{"name":"Kai Hoffman","alias":"kaihoffman","url":"https://github.com/kaihoffman","imageURL":"https://github.com/kaihoffman.png","key":"kaihoffman","page":null},"lebalz":{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},"pearmini":{"name":"Bairui Su","alias":"pearmini","url":"https://github.com/pearmini","imageURL":"https://github.com/pearmini.png","key":"pearmini","page":null},"SandPod":{"name":"Alexander Sandor","alias":"SandPod","url":"https://github.com/SandPod","imageURL":"https://github.com/SandPod.png","key":"SandPod","page":null},"tomsotte":{"name":"Tommaso Sotte","alias":"tomsotte","url":"https://github.com/tomsotte","imageURL":"https://github.com/tomsotte.png","key":"tomsotte","page":null},"tomy0000000":{"name":"Tomy Hsieh","alias":"tomy0000000","url":"https://github.com/tomy0000000","imageURL":"https://github.com/tomy0000000.png","key":"tomy0000000","page":null},"Virgil993":{"name":"Virgil993","alias":"Virgil993","url":"https://github.com/Virgil993","imageURL":"https://github.com/Virgil993.png","key":"Virgil993","page":null},"volcanofr":{"name":"volcanofr","alias":"volcanofr","url":"https://github.com/volcanofr","imageURL":"https://github.com/volcanofr.png","key":"volcanofr","page":null},"Zwyx":{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null},"4troDev":{"name":"Josue [4tro] A","alias":"4troDev","url":"https://github.com/4troDev","imageURL":"https://github.com/4troDev.png","key":"4troDev","page":null},"anatolykopyl":{"name":"Anatoly Kopyl","alias":"anatolykopyl","url":"https://github.com/anatolykopyl","imageURL":"https://github.com/anatolykopyl.png","key":"anatolykopyl","page":null},"axel7083":{"name":"axel7083","alias":"axel7083","url":"https://github.com/axel7083","imageURL":"https://github.com/axel7083.png","key":"axel7083","page":null},"baradusov":{"name":"\u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432","alias":"baradusov","url":"https://github.com/baradusov","imageURL":"https://github.com/baradusov.png","key":"baradusov","page":null},"chris-bateman":{"name":"Chris Bateman","alias":"chris-bateman","url":"https://github.com/chris-bateman","imageURL":"https://github.com/chris-bateman.png","key":"chris-bateman","page":null},"GingerGeek":{"name":"Zed Spencer-Milnes","alias":"GingerGeek","url":"https://github.com/GingerGeek","imageURL":"https://github.com/GingerGeek.png","key":"GingerGeek","page":null},"Hallinn":{"name":"Hallbj\xf6rn Magn\xfasson","alias":"Hallinn","url":"https://github.com/Hallinn","imageURL":"https://github.com/Hallinn.png","key":"Hallinn","page":null},"ilg-ul":{"name":"Liviu Ionescu","alias":"ilg-ul","url":"https://github.com/ilg-ul","imageURL":"https://github.com/ilg-ul.png","key":"ilg-ul","page":null},"Its-Just-Nans":{"name":"n4n5","alias":"Its-Just-Nans","url":"https://github.com/Its-Just-Nans","imageURL":"https://github.com/Its-Just-Nans.png","key":"Its-Just-Nans","page":null},"Josh-Cena":{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},"kaymomin":{"name":"krinza.eth","alias":"kaymomin","url":"https://github.com/kaymomin","imageURL":"https://github.com/kaymomin.png","key":"kaymomin","page":null},"mxschmitt":{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},"Oreoxmt":{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},"Rafael-Martins":{"name":"Rafael Martins","alias":"Rafael-Martins","url":"https://github.com/Rafael-Martins","imageURL":"https://github.com/Rafael-Martins.png","key":"Rafael-Martins","page":null},"Suenaga-Ryuya":{"name":"suenryu","alias":"Suenaga-Ryuya","url":"https://github.com/Suenaga-Ryuya","imageURL":"https://github.com/Suenaga-Ryuya.png","key":"Suenaga-Ryuya","page":null},"sunkanmii":{"name":"Fafowora Sunkanmi","alias":"sunkanmii","url":"https://github.com/sunkanmii","imageURL":"https://github.com/sunkanmii.png","key":"sunkanmii","page":null},"VahidNaderi":{"name":"Vahid Naderi","alias":"VahidNaderi","url":"https://github.com/VahidNaderi","imageURL":"https://github.com/VahidNaderi.png","key":"VahidNaderi","page":null},"vlad-nestorov":{"name":"Vlad Nestorov","alias":"vlad-nestorov","url":"https://github.com/vlad-nestorov","imageURL":"https://github.com/vlad-nestorov.png","key":"vlad-nestorov","page":null},"yixiaojiu":{"name":"\u7fca\u5c0f\u4e45","alias":"yixiaojiu","url":"https://github.com/yixiaojiu","imageURL":"https://github.com/yixiaojiu.png","key":"yixiaojiu","page":null},"dawei-wang":{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},"eitsupi":{"name":"eitsupi","alias":"eitsupi","url":"https://github.com/eitsupi","imageURL":"https://github.com/eitsupi.png","key":"eitsupi","page":null},"jack-robson":{"name":"Jack Robson","alias":"jack-robson","url":"https://github.com/jack-robson","imageURL":"https://github.com/jack-robson.png","key":"jack-robson","page":null},"sanjaiyan-dev":{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},"axmmisaka":{"name":"axmmisaka","alias":"axmmisaka","url":"https://github.com/axmmisaka","imageURL":"https://github.com/axmmisaka.png","key":"axmmisaka","page":null},"c0h1b4":{"name":"c0h1b4","alias":"c0h1b4","url":"https://github.com/c0h1b4","imageURL":"https://github.com/c0h1b4.png","key":"c0h1b4","page":null},"jgarrow":{"name":"Janessa Garrow","alias":"jgarrow","url":"https://github.com/jgarrow","imageURL":"https://github.com/jgarrow.png","key":"jgarrow","page":null},"SimenB":{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},"harryzcy":{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},"mcrstudio":{"name":"MCR Studio","alias":"mcrstudio","url":"https://github.com/mcrstudio","imageURL":"https://github.com/mcrstudio.png","key":"mcrstudio","page":null},"NickGerleman":{"name":"Nick Gerleman","alias":"NickGerleman","url":"https://github.com/NickGerleman","imageURL":"https://github.com/NickGerleman.png","key":"NickGerleman","page":null},"reece-white":{"name":"reece-white","alias":"reece-white","url":"https://github.com/reece-white","imageURL":"https://github.com/reece-white.png","key":"reece-white","page":null},"Shreesh09":{"name":"Shreesh Nautiyal","alias":"Shreesh09","url":"https://github.com/Shreesh09","imageURL":"https://github.com/Shreesh09.png","key":"Shreesh09","page":null},"0420syj":{"name":"Wan Sim","alias":"0420syj","url":"https://github.com/0420syj","imageURL":"https://github.com/0420syj.png","key":"0420syj","page":null},"abhinandanwadwa":{"name":"Abhinandan Wadhwa","alias":"abhinandanwadwa","url":"https://github.com/abhinandanwadwa","imageURL":"https://github.com/abhinandanwadwa.png","key":"abhinandanwadwa","page":null},"Abinashbunty":{"name":"Abinash Satapathy","alias":"Abinashbunty","url":"https://github.com/Abinashbunty","imageURL":"https://github.com/Abinashbunty.png","key":"Abinashbunty","page":null},"adampatterson":{"name":"Adam Patterson","alias":"adampatterson","url":"https://github.com/adampatterson","imageURL":"https://github.com/adampatterson.png","key":"adampatterson","page":null},"adithyaakrishna":{"name":"Adithya Krishna","alias":"adithyaakrishna","url":"https://github.com/adithyaakrishna","imageURL":"https://github.com/adithyaakrishna.png","key":"adithyaakrishna","page":null},"AFRUITPIE":{"name":"Hayden Hong","alias":"AFRUITPIE","url":"https://github.com/AFRUITPIE","imageURL":"https://github.com/AFRUITPIE.png","key":"AFRUITPIE","page":null},"AgentEnder":{"name":"Craigory Coppola","alias":"AgentEnder","url":"https://github.com/AgentEnder","imageURL":"https://github.com/AgentEnder.png","key":"AgentEnder","page":null},"akshaybhalotia":{"name":"Akshay Bhalotia","alias":"akshaybhalotia","url":"https://github.com/akshaybhalotia","imageURL":"https://github.com/akshaybhalotia.png","key":"akshaybhalotia","page":null},"allyw2002":{"name":"allyw2002","alias":"allyw2002","url":"https://github.com/allyw2002","imageURL":"https://github.com/allyw2002.png","key":"allyw2002","page":null},"amdshrif":{"name":"Ahmad Shrif","alias":"amdshrif","url":"https://github.com/amdshrif","imageURL":"https://github.com/amdshrif.png","key":"amdshrif","page":null},"amm98d":{"name":"Ahmed Mustafa Malik","alias":"amm98d","url":"https://github.com/amm98d","imageURL":"https://github.com/amm98d.png","key":"amm98d","page":null},"anaclumos":{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},"andrewnicols":{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},"antonk52":{"name":"Anton Kastritskii","alias":"antonk52","url":"https://github.com/antonk52","imageURL":"https://github.com/antonk52.png","key":"antonk52","page":null},"antonyoni":{"name":"Antony Onipko","alias":"antonyoni","url":"https://github.com/antonyoni","imageURL":"https://github.com/antonyoni.png","key":"antonyoni","page":null},"aqueeb":{"name":"Aqueeb","alias":"aqueeb","url":"https://github.com/aqueeb","imageURL":"https://github.com/aqueeb.png","key":"aqueeb","page":null},"attitude":{"name":"Martin Adamko","alias":"attitude","url":"https://github.com/attitude","imageURL":"https://github.com/attitude.png","key":"attitude","page":null},"billy1624":{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},"biplavmz":{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},"bitpredator":{"name":"bitpredator","alias":"bitpredator","url":"https://github.com/bitpredator","imageURL":"https://github.com/bitpredator.png","key":"bitpredator","page":null},"BubbaJoe":{"name":"Joe Williams","alias":"BubbaJoe","url":"https://github.com/BubbaJoe","imageURL":"https://github.com/BubbaJoe.png","key":"BubbaJoe","page":null},"chillinPanda":{"name":"Dinh Bao Dang","alias":"chillinPanda","url":"https://github.com/chillinPanda","imageURL":"https://github.com/chillinPanda.png","key":"chillinPanda","page":null},"chubei":{"name":"Bei Chu","alias":"chubei","url":"https://github.com/chubei","imageURL":"https://github.com/chubei.png","key":"chubei","page":null},"chudongvip":{"name":"\u521d\u51ac","alias":"chudongvip","url":"https://github.com/chudongvip","imageURL":"https://github.com/chudongvip.png","key":"chudongvip","page":null},"cm-igarashi-ryosuke":{"name":"Ryosuke Igarashi","alias":"cm-igarashi-ryosuke","url":"https://github.com/cm-igarashi-ryosuke","imageURL":"https://github.com/cm-igarashi-ryosuke.png","key":"cm-igarashi-ryosuke","page":null},"colinhacks":{"name":"Colin McDonnell","alias":"colinhacks","url":"https://github.com/colinhacks","imageURL":"https://github.com/colinhacks.png","key":"colinhacks","page":null},"conlacda":{"name":"conlacda","alias":"conlacda","url":"https://github.com/conlacda","imageURL":"https://github.com/conlacda.png","key":"conlacda","page":null},"dandv":{"name":"Dan Dascalescu","alias":"dandv","url":"https://github.com/dandv","imageURL":"https://github.com/dandv.png","key":"dandv","page":null},"danilowoz":{"name":"Danilo Woznica","alias":"danilowoz","url":"https://github.com/danilowoz","imageURL":"https://github.com/danilowoz.png","key":"danilowoz","page":null},"DanRoscigno":{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},"DavidJFelix":{"name":"David J. Felix","alias":"DavidJFelix","url":"https://github.com/DavidJFelix","imageURL":"https://github.com/DavidJFelix.png","key":"DavidJFelix","page":null},"debs-obrien":{"name":"Debbie O\'Brien","alias":"debs-obrien","url":"https://github.com/debs-obrien","imageURL":"https://github.com/debs-obrien.png","key":"debs-obrien","page":null},"Devansu-Yadav":{"name":"Devansu Yadav","alias":"Devansu-Yadav","url":"https://github.com/Devansu-Yadav","imageURL":"https://github.com/Devansu-Yadav.png","key":"Devansu-Yadav","page":null},"Djunnni":{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},"Dr-Electron":{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},"e-minguez":{"name":"Eduardo M\xednguez","alias":"e-minguez","url":"https://github.com/e-minguez","imageURL":"https://github.com/e-minguez.png","key":"e-minguez","page":null},"edno":{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},"FlorinaPacurar":{"name":"FlorinaPacurar","alias":"FlorinaPacurar","url":"https://github.com/FlorinaPacurar","imageURL":"https://github.com/FlorinaPacurar.png","key":"FlorinaPacurar","page":null},"Foosballfan":{"name":"Charles Killer","alias":"Foosballfan","url":"https://github.com/Foosballfan","imageURL":"https://github.com/Foosballfan.png","key":"Foosballfan","page":null},"forresst":{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},"FrancescoXX":{"name":"Francesco Ciulla","alias":"FrancescoXX","url":"https://github.com/FrancescoXX","imageURL":"https://github.com/FrancescoXX.png","key":"FrancescoXX","page":null},"fredrikstave":{"name":"Fredrik Stave","alias":"fredrikstave","url":"https://github.com/fredrikstave","imageURL":"https://github.com/fredrikstave.png","key":"fredrikstave","page":null},"fxpby":{"name":"Fxpby","alias":"fxpby","url":"https://github.com/fxpby","imageURL":"https://github.com/fxpby.png","key":"fxpby","page":null},"gabrielcsapo":{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},"GalexyN":{"name":"Alexander Nguyen","alias":"GalexyN","url":"https://github.com/GalexyN","imageURL":"https://github.com/GalexyN.png","key":"GalexyN","page":null},"gazab":{"name":"Gustav Ton\xe9r","alias":"gazab","url":"https://github.com/gazab","imageURL":"https://github.com/gazab.png","key":"gazab","page":null},"gracefullight":{"name":"Eunkwang Shin","alias":"gracefullight","url":"https://github.com/gracefullight","imageURL":"https://github.com/gracefullight.png","key":"gracefullight","page":null},"gregberge":{"name":"Greg Berg\xe9","alias":"gregberge","url":"https://github.com/gregberge","imageURL":"https://github.com/gregberge.png","key":"gregberge","page":null},"heysujal":{"name":"Sujal Gupta","alias":"heysujal","url":"https://github.com/heysujal","imageURL":"https://github.com/heysujal.png","key":"heysujal","page":null},"hidde":{"name":"Hidde de Vries","alias":"hidde","url":"https://github.com/hidde","imageURL":"https://github.com/hidde.png","key":"hidde","page":null},"hslee2008":{"name":"Hyunseung","alias":"hslee2008","url":"https://github.com/hslee2008","imageURL":"https://github.com/hslee2008.png","key":"hslee2008","page":null},"HumbleDeer":{"name":"Anna","alias":"HumbleDeer","url":"https://github.com/HumbleDeer","imageURL":"https://github.com/HumbleDeer.png","key":"HumbleDeer","page":null},"HyeokjinKang":{"name":"Coupy","alias":"HyeokjinKang","url":"https://github.com/HyeokjinKang","imageURL":"https://github.com/HyeokjinKang.png","key":"HyeokjinKang","page":null},"jean-humann":{"name":"Jean Humann","alias":"jean-humann","url":"https://github.com/jean-humann","imageURL":"https://github.com/jean-humann.png","key":"jean-humann","page":null},"jeengbe":{"name":"Jesper Engberg","alias":"jeengbe","url":"https://github.com/jeengbe","imageURL":"https://github.com/jeengbe.png","key":"jeengbe","page":null},"jhcao23":{"name":"John Cao","alias":"jhcao23","url":"https://github.com/jhcao23","imageURL":"https://github.com/jhcao23.png","key":"jhcao23","page":null},"jj-style":{"name":"JJ Style","alias":"jj-style","url":"https://github.com/jj-style","imageURL":"https://github.com/jj-style.png","key":"jj-style","page":null},"jodyheavener":{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},"JohnVicke":{"name":"Viktor Malmedal","alias":"JohnVicke","url":"https://github.com/JohnVicke","imageURL":"https://github.com/JohnVicke.png","key":"JohnVicke","page":null},"JorensM":{"name":"Jorens Merenjanu","alias":"JorensM","url":"https://github.com/JorensM","imageURL":"https://github.com/JorensM.png","key":"JorensM","page":null},"juanpicado":{"name":"Juan Picado","alias":"juanpicado","url":"https://github.com/juanpicado","imageURL":"https://github.com/juanpicado.png","key":"juanpicado","page":null},"KarthickSakthi":{"name":"0x24Karthick","alias":"KarthickSakthi","url":"https://github.com/KarthickSakthi","imageURL":"https://github.com/KarthickSakthi.png","key":"KarthickSakthi","page":null},"Kesyau":{"name":"Serenus","alias":"Kesyau","url":"https://github.com/Kesyau","imageURL":"https://github.com/Kesyau.png","key":"Kesyau","page":null},"knownasnaffy":{"name":"Naffy Dharni","alias":"knownasnaffy","url":"https://github.com/knownasnaffy","imageURL":"https://github.com/knownasnaffy.png","key":"knownasnaffy","page":null},"la55u":{"name":"la55u","alias":"la55u","url":"https://github.com/la55u","imageURL":"https://github.com/la55u.png","key":"la55u","page":null},"lanegoolsby":{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},"layershifter":{"name":"Oleksandr Fediashov","alias":"layershifter","url":"https://github.com/layershifter","imageURL":"https://github.com/layershifter.png","key":"layershifter","page":null},"lex111":{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},"lorenzolewis":{"name":"Lorenzo Lewis","alias":"lorenzolewis","url":"https://github.com/lorenzolewis","imageURL":"https://github.com/lorenzolewis.png","key":"lorenzolewis","page":null},"maliMirkec":{"name":"Silvestar Bistrovi\u0107","alias":"maliMirkec","url":"https://github.com/maliMirkec","imageURL":"https://github.com/maliMirkec.png","key":"maliMirkec","page":null},"manuel-rw":{"name":"Manuel","alias":"manuel-rw","url":"https://github.com/manuel-rw","imageURL":"https://github.com/manuel-rw.png","key":"manuel-rw","page":null},"MarkShawn2020":{"name":"Markshawn","alias":"MarkShawn2020","url":"https://github.com/MarkShawn2020","imageURL":"https://github.com/MarkShawn2020.png","key":"MarkShawn2020","page":null},"mcallisto":{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},"mickremedi":{"name":"Michael Remediakis","alias":"mickremedi","url":"https://github.com/mickremedi","imageURL":"https://github.com/mickremedi.png","key":"mickremedi","page":null},"ModupeD":{"name":"ModupeD","alias":"ModupeD","url":"https://github.com/ModupeD","imageURL":"https://github.com/ModupeD.png","key":"ModupeD","page":null},"Mogyuchi":{"name":"Mogyuchi","alias":"Mogyuchi","url":"https://github.com/Mogyuchi","imageURL":"https://github.com/Mogyuchi.png","key":"Mogyuchi","page":null},"moojing":{"name":"Mu-Jing-Tsai","alias":"moojing","url":"https://github.com/moojing","imageURL":"https://github.com/moojing.png","key":"moojing","page":null},"mrazauskas":{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},"mstroppel":{"name":"Marco Stroppel","alias":"mstroppel","url":"https://github.com/mstroppel","imageURL":"https://github.com/mstroppel.png","key":"mstroppel","page":null},"Mysterious-Dev":{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},"NamanGarg2075":{"name":"Naman Garg","alias":"NamanGarg2075","url":"https://github.com/NamanGarg2075","imageURL":"https://github.com/NamanGarg2075.png","key":"NamanGarg2075","page":null},"ntucker":{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},"oluwatobiss":{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},"palmiak":{"name":"Maciek Palmowski","alias":"palmiak","url":"https://github.com/palmiak","imageURL":"https://github.com/palmiak.png","key":"palmiak","page":null},"PaulRBerg":{"name":"Paul Razvan Berg","alias":"PaulRBerg","url":"https://github.com/PaulRBerg","imageURL":"https://github.com/PaulRBerg.png","key":"PaulRBerg","page":null},"pinakipb2":{"name":"Pinaki Bhattacharjee","alias":"pinakipb2","url":"https://github.com/pinakipb2","imageURL":"https://github.com/pinakipb2.png","key":"pinakipb2","page":null},"prateekbytes":{"name":"prateekbytes","alias":"prateekbytes","url":"https://github.com/prateekbytes","imageURL":"https://github.com/prateekbytes.png","key":"prateekbytes","page":null},"qwerzl":{"name":"qwerzl","alias":"qwerzl","url":"https://github.com/qwerzl","imageURL":"https://github.com/qwerzl.png","key":"qwerzl","page":null},"rashidmya":{"name":"Rashid","alias":"rashidmya","url":"https://github.com/rashidmya","imageURL":"https://github.com/rashidmya.png","key":"rashidmya","page":null},"razzeee":{"name":"Kolja","alias":"razzeee","url":"https://github.com/razzeee","imageURL":"https://github.com/razzeee.png","key":"razzeee","page":null},"rbarbazz":{"name":"Rapha\xebl Barbazza","alias":"rbarbazz","url":"https://github.com/rbarbazz","imageURL":"https://github.com/rbarbazz.png","key":"rbarbazz","page":null},"recallwei":{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},"rojakcoder":{"name":"Chua Chee How","alias":"rojakcoder","url":"https://github.com/rojakcoder","imageURL":"https://github.com/rojakcoder.png","key":"rojakcoder","page":null},"rsteele6":{"name":"rsteele6","alias":"rsteele6","url":"https://github.com/rsteele6","imageURL":"https://github.com/rsteele6.png","key":"rsteele6","page":null},"sadikkuzu":{"name":"SADIK KUZU","alias":"sadikkuzu","url":"https://github.com/sadikkuzu","imageURL":"https://github.com/sadikkuzu.png","key":"sadikkuzu","page":null},"Sainan":{"name":"Sainan","alias":"Sainan","url":"https://github.com/Sainan","imageURL":"https://github.com/Sainan.png","key":"Sainan","page":null},"samatt14":{"name":"samatt14","alias":"samatt14","url":"https://github.com/samatt14","imageURL":"https://github.com/samatt14.png","key":"samatt14","page":null},"sashashura":{"name":"Alex","alias":"sashashura","url":"https://github.com/sashashura","imageURL":"https://github.com/sashashura.png","key":"sashashura","page":null},"schneegansm":{"name":"Marie","alias":"schneegansm","url":"https://github.com/schneegansm","imageURL":"https://github.com/schneegansm.png","key":"schneegansm","page":null},"scubamaggo":{"name":"Marco Kuper","alias":"scubamaggo","url":"https://github.com/scubamaggo","imageURL":"https://github.com/scubamaggo.png","key":"scubamaggo","page":null},"ShahriarKh":{"name":"Shahriar","alias":"ShahriarKh","url":"https://github.com/ShahriarKh","imageURL":"https://github.com/ShahriarKh.png","key":"ShahriarKh","page":null},"shawshankkumar":{"name":"Shashank Kumar","alias":"shawshankkumar","url":"https://github.com/shawshankkumar","imageURL":"https://github.com/shawshankkumar.png","key":"shawshankkumar","page":null},"shortcuts":{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},"shwaka":{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},"sixhobbits":{"name":"Gareth Dwyer","alias":"sixhobbits","url":"https://github.com/sixhobbits","imageURL":"https://github.com/sixhobbits.png","key":"sixhobbits","page":null},"suravshrestha":{"name":"Surav Shrestha","alias":"suravshrestha","url":"https://github.com/suravshrestha","imageURL":"https://github.com/suravshrestha.png","key":"suravshrestha","page":null},"sykp241095":{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},"tamalchowdhury":{"name":"Tamal Anwar Chowdhury","alias":"tamalchowdhury","url":"https://github.com/tamalchowdhury","imageURL":"https://github.com/tamalchowdhury.png","key":"tamalchowdhury","page":null},"tarunrajput":{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null},"thadguidry":{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null},"thatrobotdev":{"name":"James Kerrane","alias":"thatrobotdev","url":"https://github.com/thatrobotdev","imageURL":"https://github.com/thatrobotdev.png","key":"thatrobotdev","page":null},"thedevwonder":{"name":"thedevwonder","alias":"thedevwonder","url":"https://github.com/thedevwonder","imageURL":"https://github.com/thedevwonder.png","key":"thedevwonder","page":null},"Villanuevand":{"name":"Andr\xe9s Villanueva","alias":"Villanuevand","url":"https://github.com/Villanuevand","imageURL":"https://github.com/Villanuevand.png","key":"Villanuevand","page":null},"VinceCYLiao":{"name":"VinceCYLiao","alias":"VinceCYLiao","url":"https://github.com/VinceCYLiao","imageURL":"https://github.com/VinceCYLiao.png","key":"VinceCYLiao","page":null},"waldyrious":{"name":"Waldir Pimenta","alias":"waldyrious","url":"https://github.com/waldyrious","imageURL":"https://github.com/waldyrious.png","key":"waldyrious","page":null},"wceolin":{"name":"Will Ceolin","alias":"wceolin","url":"https://github.com/wceolin","imageURL":"https://github.com/wceolin.png","key":"wceolin","page":null},"webbertakken":{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},"werner33":{"name":"Jordan Manley","alias":"werner33","url":"https://github.com/werner33","imageURL":"https://github.com/werner33.png","key":"werner33","page":null},"yangshun":{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},"yosukekato165":{"name":"yosukekato165","alias":"yosukekato165","url":"https://github.com/yosukekato165","imageURL":"https://github.com/yosukekato165.png","key":"yosukekato165","page":null},"ori-shalom":{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},"TheCatLady":{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null},"armano2":{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},"LiberaTeMetuMortis":{"name":"MetuMortis","alias":"LiberaTeMetuMortis","url":"https://github.com/LiberaTeMetuMortis","imageURL":"https://github.com/LiberaTeMetuMortis.png","key":"LiberaTeMetuMortis","page":null},"morsko1":{"name":"Aleksandr Vladykin","alias":"morsko1","url":"https://github.com/morsko1","imageURL":"https://github.com/morsko1.png","key":"morsko1","page":null},"SACHINnANYAKKARA":{"name":"Sachin Nanayakkara","alias":"SACHINnANYAKKARA","url":"https://github.com/SACHINnANYAKKARA","imageURL":"https://github.com/SACHINnANYAKKARA.png","key":"SACHINnANYAKKARA","page":null},"Anasqx":{"name":"Anas","alias":"Anasqx","url":"https://github.com/Anasqx","imageURL":"https://github.com/Anasqx.png","key":"Anasqx","page":null},"dewanshDT":{"name":"Dewansh Thakur","alias":"dewanshDT","url":"https://github.com/dewanshDT","imageURL":"https://github.com/dewanshDT.png","key":"dewanshDT","page":null},"dr0nn1":{"name":"Petter Dr\xf8nnen","alias":"dr0nn1","url":"https://github.com/dr0nn1","imageURL":"https://github.com/dr0nn1.png","key":"dr0nn1","page":null},"kagankan":{"name":"Kagan","alias":"kagankan","url":"https://github.com/kagankan","imageURL":"https://github.com/kagankan.png","key":"kagankan","page":null},"pReya":{"name":"Moritz St\xfcckler","alias":"pReya","url":"https://github.com/pReya","imageURL":"https://github.com/pReya.png","key":"pReya","page":null},"tannerdolby":{"name":"Tanner Dolby","alias":"tannerdolby","url":"https://github.com/tannerdolby","imageURL":"https://github.com/tannerdolby.png","key":"tannerdolby","page":null},"trueqap":{"name":"TrueQAP","alias":"trueqap","url":"https://github.com/trueqap","imageURL":"https://github.com/trueqap.png","key":"trueqap","page":null},"Vishruta-Patil":{"name":"Vishruta Patil","alias":"Vishruta-Patil","url":"https://github.com/Vishruta-Patil","imageURL":"https://github.com/Vishruta-Patil.png","key":"Vishruta-Patil","page":null},"ZarakiKanzaki":{"name":"Davide Donadio","alias":"ZarakiKanzaki","url":"https://github.com/ZarakiKanzaki","imageURL":"https://github.com/ZarakiKanzaki.png","key":"ZarakiKanzaki","page":null},"scastiel":{"name":"S\xe9bastien Castiel","alias":"scastiel","url":"https://github.com/scastiel","imageURL":"https://github.com/scastiel.png","key":"scastiel","page":null},"0916dhkim":{"name":"Danny Kim","alias":"0916dhkim","url":"https://github.com/0916dhkim","imageURL":"https://github.com/0916dhkim.png","key":"0916dhkim","page":null},"3v0k4":{"name":"Riccardo","alias":"3v0k4","url":"https://github.com/3v0k4","imageURL":"https://github.com/3v0k4.png","key":"3v0k4","page":null},"denis-alkhelali":{"name":"Denis Al-Khelali","alias":"denis-alkhelali","url":"https://github.com/denis-alkhelali","imageURL":"https://github.com/denis-alkhelali.png","key":"denis-alkhelali","page":null},"friederbluemle":{"name":"Frieder Bluemle","alias":"friederbluemle","url":"https://github.com/friederbluemle","imageURL":"https://github.com/friederbluemle.png","key":"friederbluemle","page":null},"JoshuaKGoldberg":{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},"lachieh":{"name":"Lachlan Heywood","alias":"lachieh","url":"https://github.com/lachieh","imageURL":"https://github.com/lachieh.png","key":"lachieh","page":null},"MatijaSi":{"name":"Matija Sirk","alias":"MatijaSi","url":"https://github.com/MatijaSi","imageURL":"https://github.com/MatijaSi.png","key":"MatijaSi","page":null},"mhnaeem":{"name":"Muhammad Hammad","alias":"mhnaeem","url":"https://github.com/mhnaeem","imageURL":"https://github.com/mhnaeem.png","key":"mhnaeem","page":null},"mturoci":{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},"SJFCS":{"name":"\u5b8b\u9526\u4e30","alias":"SJFCS","url":"https://github.com/SJFCS","imageURL":"https://github.com/SJFCS.png","key":"SJFCS","page":null},"stnor":{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},"Thomascogez":{"name":"Thomas.CA","alias":"Thomascogez","url":"https://github.com/Thomascogez","imageURL":"https://github.com/Thomascogez.png","key":"Thomascogez","page":null},"adnanhashmi09":{"name":"Adnan Hashmi","alias":"adnanhashmi09","url":"https://github.com/adnanhashmi09","imageURL":"https://github.com/adnanhashmi09.png","key":"adnanhashmi09","page":null},"birjj":{"name":"Johan Fagerberg","alias":"birjj","url":"https://github.com/birjj","imageURL":"https://github.com/birjj.png","key":"birjj","page":null},"e-im":{"name":"evan","alias":"e-im","url":"https://github.com/e-im","imageURL":"https://github.com/e-im.png","key":"e-im","page":null},"forgeRW":{"name":"forgeRW","alias":"forgeRW","url":"https://github.com/forgeRW","imageURL":"https://github.com/forgeRW.png","key":"forgeRW","page":null},"jeferson-sb":{"name":"Jeferson S. Brito","alias":"jeferson-sb","url":"https://github.com/jeferson-sb","imageURL":"https://github.com/jeferson-sb.png","key":"jeferson-sb","page":null},"JPeer264":{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},"LittleboyHarry":{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},"pasora":{"name":"Masahiko Hara","alias":"pasora","url":"https://github.com/pasora","imageURL":"https://github.com/pasora.png","key":"pasora","page":null},"Pranav2612000":{"name":"Pranav Joglekar","alias":"Pranav2612000","url":"https://github.com/Pranav2612000","imageURL":"https://github.com/Pranav2612000.png","key":"Pranav2612000","page":null},"ramazansancar":{"name":"Ramazan SANCAR","alias":"ramazansancar","url":"https://github.com/ramazansancar","imageURL":"https://github.com/ramazansancar.png","key":"ramazansancar","page":null},"shanpriyan":{"name":"Shanmughapriyan S","alias":"shanpriyan","url":"https://github.com/shanpriyan","imageURL":"https://github.com/shanpriyan.png","key":"shanpriyan","page":null},"sjwall":{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},"Xabilahu":{"name":"Xabier Lahuerta Vazquez","alias":"Xabilahu","url":"https://github.com/Xabilahu","imageURL":"https://github.com/Xabilahu.png","key":"Xabilahu","page":null},"adventure-yunfei":{"name":"adventure-yunfei","alias":"adventure-yunfei","url":"https://github.com/adventure-yunfei","imageURL":"https://github.com/adventure-yunfei.png","key":"adventure-yunfei","page":null},"b-ovsepian":{"name":"Bagdasar Ovsepyan","alias":"b-ovsepian","url":"https://github.com/b-ovsepian","imageURL":"https://github.com/b-ovsepian.png","key":"b-ovsepian","page":null},"datlechin":{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},"Kosai106":{"name":"Kevin \xd8sterkilde","alias":"Kosai106","url":"https://github.com/Kosai106","imageURL":"https://github.com/Kosai106.png","key":"Kosai106","page":null},"mdubus":{"name":"Morgane Dubus","alias":"mdubus","url":"https://github.com/mdubus","imageURL":"https://github.com/mdubus.png","key":"mdubus","page":null},"whiteand":{"name":"whiteand","alias":"whiteand","url":"https://github.com/whiteand","imageURL":"https://github.com/whiteand.png","key":"whiteand","page":null},"YoniChechik":{"name":"Yoni Chechik","alias":"YoniChechik","url":"https://github.com/YoniChechik","imageURL":"https://github.com/YoniChechik.png","key":"YoniChechik","page":null},"yzhe819":{"name":"yzhe819","alias":"yzhe819","url":"https://github.com/yzhe819","imageURL":"https://github.com/yzhe819.png","key":"yzhe819","page":null},"DigiPie":{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},"Gary50613":{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},"ghostsquad":{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},"jeffreyaven":{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},"LichLord91":{"name":"LichLord91","alias":"LichLord91","url":"https://github.com/LichLord91","imageURL":"https://github.com/LichLord91.png","key":"LichLord91","page":null},"RoiArthurB":{"name":"Arthur Brugi\xe8re","alias":"RoiArthurB","url":"https://github.com/RoiArthurB","imageURL":"https://github.com/RoiArthurB.png","key":"RoiArthurB","page":null},"treoden":{"name":"The Nguyen","alias":"treoden","url":"https://github.com/treoden","imageURL":"https://github.com/treoden.png","key":"treoden","page":null},"201flaviosilva":{"name":"Fl\xe1vio Silva","alias":"201flaviosilva","url":"https://github.com/201flaviosilva","imageURL":"https://github.com/201flaviosilva.png","key":"201flaviosilva","page":null},"7Wate":{"name":"7Wate","alias":"7Wate","url":"https://github.com/7Wate","imageURL":"https://github.com/7Wate.png","key":"7Wate","page":null},"AkagiYui":{"name":"\u8d64\u57ce\u7ed3\u8863","alias":"AkagiYui","url":"https://github.com/AkagiYui","imageURL":"https://github.com/AkagiYui.png","key":"AkagiYui","page":null},"alewolf":{"name":"alewolf","alias":"alewolf","url":"https://github.com/alewolf","imageURL":"https://github.com/alewolf.png","key":"alewolf","page":null},"alexandernst":{"name":"Alexander Nestorov","alias":"alexandernst","url":"https://github.com/alexandernst","imageURL":"https://github.com/alexandernst.png","key":"alexandernst","page":null},"Altomy":{"name":"Ahmed Altomy","alias":"Altomy","url":"https://github.com/Altomy","imageURL":"https://github.com/Altomy.png","key":"Altomy","page":null},"bcabanes":{"name":"Benjamin Cabanes","alias":"bcabanes","url":"https://github.com/bcabanes","imageURL":"https://github.com/bcabanes.png","key":"bcabanes","page":null},"BenDMyers":{"name":"Ben Myers","alias":"BenDMyers","url":"https://github.com/BenDMyers","imageURL":"https://github.com/BenDMyers.png","key":"BenDMyers","page":null},"Boulet-":{"name":"Boulet","alias":"Boulet-","url":"https://github.com/Boulet-","imageURL":"https://github.com/Boulet-.png","key":"Boulet-","page":null},"cbebe":{"name":"Charles Ancheta","alias":"cbebe","url":"https://github.com/cbebe","imageURL":"https://github.com/cbebe.png","key":"cbebe","page":null},"clemiee":{"name":"Clemie McCartney","alias":"clemiee","url":"https://github.com/clemiee","imageURL":"https://github.com/clemiee.png","key":"clemiee","page":null},"DharsanB":{"name":"Dharsan B","alias":"DharsanB","url":"https://github.com/DharsanB","imageURL":"https://github.com/DharsanB.png","key":"DharsanB","page":null},"dht":{"name":"dht","alias":"dht","url":"https://github.com/dht","imageURL":"https://github.com/dht.png","key":"dht","page":null},"difranca":{"name":"Diego Fran\xe7a","alias":"difranca","url":"https://github.com/difranca","imageURL":"https://github.com/difranca.png","key":"difranca","page":null},"dpang314":{"name":"dpang314","alias":"dpang314","url":"https://github.com/dpang314","imageURL":"https://github.com/dpang314.png","key":"dpang314","page":null},"emattia":{"name":"emattia","alias":"emattia","url":"https://github.com/emattia","imageURL":"https://github.com/emattia.png","key":"emattia","page":null},"HyunseungLee-Travis":{"name":"Hyunseung Lee","alias":"HyunseungLee-Travis","url":"https://github.com/HyunseungLee-Travis","imageURL":"https://github.com/HyunseungLee-Travis.png","key":"HyunseungLee-Travis","page":null},"JeremyDolle":{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},"johnie":{"name":"Johnie Hjelm","alias":"johnie","url":"https://github.com/johnie","imageURL":"https://github.com/johnie.png","key":"johnie","page":null},"jpdriver":{"name":"JP","alias":"jpdriver","url":"https://github.com/jpdriver","imageURL":"https://github.com/jpdriver.png","key":"jpdriver","page":null},"jqshuv":{"name":"Joshua Schmitt","alias":"jqshuv","url":"https://github.com/jqshuv","imageURL":"https://github.com/jqshuv.png","key":"jqshuv","page":null},"kursatsmsek":{"name":"K\xfcr\u015fat \u015eim\u015fek","alias":"kursatsmsek","url":"https://github.com/kursatsmsek","imageURL":"https://github.com/kursatsmsek.png","key":"kursatsmsek","page":null},"matkoch":{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},"metal-young":{"name":"\u674e\u5c0f\u96e8","alias":"metal-young","url":"https://github.com/metal-young","imageURL":"https://github.com/metal-young.png","key":"metal-young","page":null},"pincman":{"name":"pincman","alias":"pincman","url":"https://github.com/pincman","imageURL":"https://github.com/pincman.png","key":"pincman","page":null},"redcamel":{"name":"Redcamel","alias":"redcamel","url":"https://github.com/redcamel","imageURL":"https://github.com/redcamel.png","key":"redcamel","page":null},"reinvanhaaren":{"name":"Rein van Haaren","alias":"reinvanhaaren","url":"https://github.com/reinvanhaaren","imageURL":"https://github.com/reinvanhaaren.png","key":"reinvanhaaren","page":null},"RudraSen2":{"name":"Rudra Sen","alias":"RudraSen2","url":"https://github.com/RudraSen2","imageURL":"https://github.com/RudraSen2.png","key":"RudraSen2","page":null},"sado0823":{"name":"sado","alias":"sado0823","url":"https://github.com/sado0823","imageURL":"https://github.com/sado0823.png","key":"sado0823","page":null},"saosangmo":{"name":"Dzung Do","alias":"saosangmo","url":"https://github.com/saosangmo","imageURL":"https://github.com/saosangmo.png","key":"saosangmo","page":null},"scopsy":{"name":"Dima Grossman","alias":"scopsy","url":"https://github.com/scopsy","imageURL":"https://github.com/scopsy.png","key":"scopsy","page":null},"SheetJSDev":{"name":"SheetJSDev","alias":"SheetJSDev","url":"https://github.com/SheetJSDev","imageURL":"https://github.com/SheetJSDev.png","key":"SheetJSDev","page":null},"sigwinch28":{"name":"Joe Harrison","alias":"sigwinch28","url":"https://github.com/sigwinch28","imageURL":"https://github.com/sigwinch28.png","key":"sigwinch28","page":null},"Smilefounder":{"name":"Huy Nguyen","alias":"Smilefounder","url":"https://github.com/Smilefounder","imageURL":"https://github.com/Smilefounder.png","key":"Smilefounder","page":null},"sserrata":{"name":"Steven Serrata","alias":"sserrata","url":"https://github.com/sserrata","imageURL":"https://github.com/sserrata.png","key":"sserrata","page":null},"szilarddoro":{"name":"Szil\xe1rd D\xf3r\xf3","alias":"szilarddoro","url":"https://github.com/szilarddoro","imageURL":"https://github.com/szilarddoro.png","key":"szilarddoro","page":null},"vannyle":{"name":"Le Thi Van","alias":"vannyle","url":"https://github.com/vannyle","imageURL":"https://github.com/vannyle.png","key":"vannyle","page":null},"zpao":{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null},"BenDz":{"name":"Benjamin Diolez","alias":"BenDz","url":"https://github.com/BenDz","imageURL":"https://github.com/BenDz.png","key":"BenDz","page":null},"charleskorn":{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},"Designatory":{"name":"Designatory","alias":"Designatory","url":"https://github.com/Designatory","imageURL":"https://github.com/Designatory.png","key":"Designatory","page":null},"ggicci":{"name":"Ggicci","alias":"ggicci","url":"https://github.com/ggicci","imageURL":"https://github.com/ggicci.png","key":"ggicci","page":null},"jrmyw92":{"name":"Jeremy","alias":"jrmyw92","url":"https://github.com/jrmyw92","imageURL":"https://github.com/jrmyw92.png","key":"jrmyw92","page":null},"junjieweb":{"name":"Junjie","alias":"junjieweb","url":"https://github.com/junjieweb","imageURL":"https://github.com/junjieweb.png","key":"junjieweb","page":null},"massoudmaboudi":{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},"Messiahhh":{"name":"Akara","alias":"Messiahhh","url":"https://github.com/Messiahhh","imageURL":"https://github.com/Messiahhh.png","key":"Messiahhh","page":null},"mhughes2k":{"name":"Michael Hughes","alias":"mhughes2k","url":"https://github.com/mhughes2k","imageURL":"https://github.com/mhughes2k.png","key":"mhughes2k","page":null},"nitya":{"name":"Nitya Narasimhan","alias":"nitya","url":"https://github.com/nitya","imageURL":"https://github.com/nitya.png","key":"nitya","page":null},"pranabdas":{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},"RuiAAPeres":{"name":"Rui Peres","alias":"RuiAAPeres","url":"https://github.com/RuiAAPeres","imageURL":"https://github.com/RuiAAPeres.png","key":"RuiAAPeres","page":null},"Zamiell":{"name":"James","alias":"Zamiell","url":"https://github.com/Zamiell","imageURL":"https://github.com/Zamiell.png","key":"Zamiell","page":null},"pepopowitz":{"name":"Steven Hicks","alias":"pepopowitz","url":"https://github.com/pepopowitz","imageURL":"https://github.com/pepopowitz.png","key":"pepopowitz","page":null},"RDIL":{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},"sgromkov":{"name":"Sergey Gromkov","alias":"sgromkov","url":"https://github.com/sgromkov","imageURL":"https://github.com/sgromkov.png","key":"sgromkov","page":null},"aerovulpe":{"name":"Aaron Nwabuoku","alias":"aerovulpe","url":"https://github.com/aerovulpe","imageURL":"https://github.com/aerovulpe.png","key":"aerovulpe","page":null},"AkiraVoid":{"name":"AkiraVoid","alias":"AkiraVoid","url":"https://github.com/AkiraVoid","imageURL":"https://github.com/AkiraVoid.png","key":"AkiraVoid","page":null},"AntonPalmqvist":{"name":"apq","alias":"AntonPalmqvist","url":"https://github.com/AntonPalmqvist","imageURL":"https://github.com/AntonPalmqvist.png","key":"AntonPalmqvist","page":null},"ApsarasX":{"name":"ApsarasX","alias":"ApsarasX","url":"https://github.com/ApsarasX","imageURL":"https://github.com/ApsarasX.png","key":"ApsarasX","page":null},"chelproc":{"name":"chelproc","alias":"chelproc","url":"https://github.com/chelproc","imageURL":"https://github.com/chelproc.png","key":"chelproc","page":null},"chernodub":{"name":"Viktor Chernodub","alias":"chernodub","url":"https://github.com/chernodub","imageURL":"https://github.com/chernodub.png","key":"chernodub","page":null},"CuratorCat":{"name":"curatorcat.pcc.eth","alias":"CuratorCat","url":"https://github.com/CuratorCat","imageURL":"https://github.com/CuratorCat.png","key":"CuratorCat","page":null},"cwen0":{"name":"Cwen Yin","alias":"cwen0","url":"https://github.com/cwen0","imageURL":"https://github.com/cwen0.png","key":"cwen0","page":null},"cxOrz":{"name":"Fusang\u2740","alias":"cxOrz","url":"https://github.com/cxOrz","imageURL":"https://github.com/cxOrz.png","key":"cxOrz","page":null},"deiucanta":{"name":"Andrei Canta","alias":"deiucanta","url":"https://github.com/deiucanta","imageURL":"https://github.com/deiucanta.png","key":"deiucanta","page":null},"deployn":{"name":"deployn","alias":"deployn","url":"https://github.com/deployn","imageURL":"https://github.com/deployn.png","key":"deployn","page":null},"dr-ngubo":{"name":"Chinazaekpere Ngubo","alias":"dr-ngubo","url":"https://github.com/dr-ngubo","imageURL":"https://github.com/dr-ngubo.png","key":"dr-ngubo","page":null},"duanwilliam":{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},"elias-pap":{"name":"Elias Papavasileiou","alias":"elias-pap","url":"https://github.com/elias-pap","imageURL":"https://github.com/elias-pap.png","key":"elias-pap","page":null},"imsingh":{"name":"Indermohan Singh","alias":"imsingh","url":"https://github.com/imsingh","imageURL":"https://github.com/imsingh.png","key":"imsingh","page":null},"JohnnyMcWeed":{"name":"JMW","alias":"JohnnyMcWeed","url":"https://github.com/JohnnyMcWeed","imageURL":"https://github.com/JohnnyMcWeed.png","key":"JohnnyMcWeed","page":null},"kaycebasques":{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},"kgolubic":{"name":"kgolubic","alias":"kgolubic","url":"https://github.com/kgolubic","imageURL":"https://github.com/kgolubic.png","key":"kgolubic","page":null},"layerzzzio":{"name":"loic","alias":"layerzzzio","url":"https://github.com/layerzzzio","imageURL":"https://github.com/layerzzzio.png","key":"layerzzzio","page":null},"leedom92":{"name":"Leedom","alias":"leedom92","url":"https://github.com/leedom92","imageURL":"https://github.com/leedom92.png","key":"leedom92","page":null},"LeviticusMB":{"name":"Martin Blom","alias":"LeviticusMB","url":"https://github.com/LeviticusMB","imageURL":"https://github.com/LeviticusMB.png","key":"LeviticusMB","page":null},"lukasbach":{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},"mjau-mjau":{"name":"Karl Ward","alias":"mjau-mjau","url":"https://github.com/mjau-mjau","imageURL":"https://github.com/mjau-mjau.png","key":"mjau-mjau","page":null},"mxhdx":{"name":"mehdim","alias":"mxhdx","url":"https://github.com/mxhdx","imageURL":"https://github.com/mxhdx.png","key":"mxhdx","page":null},"nartc":{"name":"Chau Tran","alias":"nartc","url":"https://github.com/nartc","imageURL":"https://github.com/nartc.png","key":"nartc","page":null},"naveensrinivasan":{"name":"Naveen","alias":"naveensrinivasan","url":"https://github.com/naveensrinivasan","imageURL":"https://github.com/naveensrinivasan.png","key":"naveensrinivasan","page":null},"pcordon":{"name":"Pablo Cordon","alias":"pcordon","url":"https://github.com/pcordon","imageURL":"https://github.com/pcordon.png","key":"pcordon","page":null},"phryneas":{"name":"Lenz Weber-Tronic","alias":"phryneas","url":"https://github.com/phryneas","imageURL":"https://github.com/phryneas.png","key":"phryneas","page":null},"Pierre-Gilles":{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},"redhat123456":{"name":"redhat123456","alias":"redhat123456","url":"https://github.com/redhat123456","imageURL":"https://github.com/redhat123456.png","key":"redhat123456","page":null},"rev4324":{"name":"rev","alias":"rev4324","url":"https://github.com/rev4324","imageURL":"https://github.com/rev4324.png","key":"rev4324","page":null},"sandypockets":{"name":"Zac A","alias":"sandypockets","url":"https://github.com/sandypockets","imageURL":"https://github.com/sandypockets.png","key":"sandypockets","page":null},"shczhen":{"name":"czhen","alias":"shczhen","url":"https://github.com/shczhen","imageURL":"https://github.com/shczhen.png","key":"shczhen","page":null},"sulu5890":{"name":"Evan","alias":"sulu5890","url":"https://github.com/sulu5890","imageURL":"https://github.com/sulu5890.png","key":"sulu5890","page":null},"surendran82":{"name":"surendran82","alias":"surendran82","url":"https://github.com/surendran82","imageURL":"https://github.com/surendran82.png","key":"surendran82","page":null},"svix-ken":{"name":"svix-ken","alias":"svix-ken","url":"https://github.com/svix-ken","imageURL":"https://github.com/svix-ken.png","key":"svix-ken","page":null},"zzzhangqi":{"name":"Qi Zhang","alias":"zzzhangqi","url":"https://github.com/zzzhangqi","imageURL":"https://github.com/zzzhangqi.png","key":"zzzhangqi","page":null},"afonsojramos":{"name":"Afonso Jorge Ramos","alias":"afonsojramos","url":"https://github.com/afonsojramos","imageURL":"https://github.com/afonsojramos.png","key":"afonsojramos","page":null},"alefesta":{"name":"Alessandro Festa","alias":"alefesta","url":"https://github.com/alefesta","imageURL":"https://github.com/alefesta.png","key":"alefesta","page":null},"aloisklink":{"name":"Alois Klink","alias":"aloisklink","url":"https://github.com/aloisklink","imageURL":"https://github.com/aloisklink.png","key":"aloisklink","page":null},"arifszn":{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},"dragomano":{"name":"Bugo","alias":"dragomano","url":"https://github.com/dragomano","imageURL":"https://github.com/dragomano.png","key":"dragomano","page":null},"felipecrs":{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},"hand-dot":{"name":"Kyohei Fukuda","alias":"hand-dot","url":"https://github.com/hand-dot","imageURL":"https://github.com/hand-dot.png","key":"hand-dot","page":null},"heowc":{"name":"WonChul Heo","alias":"heowc","url":"https://github.com/heowc","imageURL":"https://github.com/heowc.png","key":"heowc","page":null},"jadonn":{"name":"Jadon N","alias":"jadonn","url":"https://github.com/jadonn","imageURL":"https://github.com/jadonn.png","key":"jadonn","page":null},"jrvidal":{"name":"Roberto Vidal","alias":"jrvidal","url":"https://github.com/jrvidal","imageURL":"https://github.com/jrvidal.png","key":"jrvidal","page":null},"moonrailgun":{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},"nathan-contino-mongo":{"name":"nate contino","alias":"nathan-contino-mongo","url":"https://github.com/nathan-contino-mongo","imageURL":"https://github.com/nathan-contino-mongo.png","key":"nathan-contino-mongo","page":null},"odarpi":{"name":"Odarpi","alias":"odarpi","url":"https://github.com/odarpi","imageURL":"https://github.com/odarpi.png","key":"odarpi","page":null},"PatelN123":{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},"pkowaluk":{"name":"Pawel Kowaluk","alias":"pkowaluk","url":"https://github.com/pkowaluk","imageURL":"https://github.com/pkowaluk.png","key":"pkowaluk","page":null},"rccttwd":{"name":"Tsz W. TAM","alias":"rccttwd","url":"https://github.com/rccttwd","imageURL":"https://github.com/rccttwd.png","key":"rccttwd","page":null},"samgutentag":{"name":"Sam Gutentag","alias":"samgutentag","url":"https://github.com/samgutentag","imageURL":"https://github.com/samgutentag.png","key":"samgutentag","page":null},"seladb":{"name":"seladb","alias":"seladb","url":"https://github.com/seladb","imageURL":"https://github.com/seladb.png","key":"seladb","page":null},"taejs":{"name":"tae","alias":"taejs","url":"https://github.com/taejs","imageURL":"https://github.com/taejs.png","key":"taejs","page":null},"vedantmgoyal2009":{"name":"Begula","alias":"vedantmgoyal2009","url":"https://github.com/vedantmgoyal2009","imageURL":"https://github.com/vedantmgoyal2009.png","key":"vedantmgoyal2009","page":null},"yorkie":{"name":"Yorkie Liu","alias":"yorkie","url":"https://github.com/yorkie","imageURL":"https://github.com/yorkie.png","key":"yorkie","page":null},"anicholls":{"name":"Alex Nicholls","alias":"anicholls","url":"https://github.com/anicholls","imageURL":"https://github.com/anicholls.png","key":"anicholls","page":null},"dmitryvinn":{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},"dstotijn":{"name":"David Stotijn","alias":"dstotijn","url":"https://github.com/dstotijn","imageURL":"https://github.com/dstotijn.png","key":"dstotijn","page":null},"vaibhavshn":{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null},"apidev234":{"name":"Gaurish","alias":"apidev234","url":"https://github.com/apidev234","imageURL":"https://github.com/apidev234.png","key":"apidev234","page":null},"artemkovalyov":{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},"BigDataWriter":{"name":"BigDataWriter","alias":"BigDataWriter","url":"https://github.com/BigDataWriter","imageURL":"https://github.com/BigDataWriter.png","key":"BigDataWriter","page":null},"cdemonchy-pro":{"name":"Clement Demonchy","alias":"cdemonchy-pro","url":"https://github.com/cdemonchy-pro","imageURL":"https://github.com/cdemonchy-pro.png","key":"cdemonchy-pro","page":null},"CookieJarApps":{"name":"CookieJarApps","alias":"CookieJarApps","url":"https://github.com/CookieJarApps","imageURL":"https://github.com/CookieJarApps.png","key":"CookieJarApps","page":null},"dmitryvinn-fb":{"name":"Dmitry Vinnik | Meta","alias":"dmitryvinn-fb","url":"https://github.com/dmitryvinn-fb","imageURL":"https://github.com/dmitryvinn-fb.png","key":"dmitryvinn-fb","page":null},"ebarojas":{"name":"Everardo J. Barojas M.","alias":"ebarojas","url":"https://github.com/ebarojas","imageURL":"https://github.com/ebarojas.png","key":"ebarojas","page":null},"erickzhao":{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},"kalevski":{"name":"Daniel Kalevski","alias":"kalevski","url":"https://github.com/kalevski","imageURL":"https://github.com/kalevski.png","key":"kalevski","page":null},"kgajera":{"name":"Kishan Gajera","alias":"kgajera","url":"https://github.com/kgajera","imageURL":"https://github.com/kgajera.png","key":"kgajera","page":null},"koistya":{"name":"Konstantin Tarkus","alias":"koistya","url":"https://github.com/koistya","imageURL":"https://github.com/koistya.png","key":"koistya","page":null},"milesj":{"name":"Miles Johnson","alias":"milesj","url":"https://github.com/milesj","imageURL":"https://github.com/milesj.png","key":"milesj","page":null},"mrbrunelli":{"name":"Matheus Ricardo Brunelli","alias":"mrbrunelli","url":"https://github.com/mrbrunelli","imageURL":"https://github.com/mrbrunelli.png","key":"mrbrunelli","page":null},"NaseelNiyas":{"name":"Naseel Niyas","alias":"NaseelNiyas","url":"https://github.com/NaseelNiyas","imageURL":"https://github.com/NaseelNiyas.png","key":"NaseelNiyas","page":null},"nick-verida":{"name":"nick-verida","alias":"nick-verida","url":"https://github.com/nick-verida","imageURL":"https://github.com/nick-verida.png","key":"nick-verida","page":null},"nschonni":{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},"redhoyasa":{"name":"Muhammad Redho Ayassa","alias":"redhoyasa","url":"https://github.com/redhoyasa","imageURL":"https://github.com/redhoyasa.png","key":"redhoyasa","page":null},"Ruben-Arushanyan":{"name":"Ruben Arushanyan","alias":"Ruben-Arushanyan","url":"https://github.com/Ruben-Arushanyan","imageURL":"https://github.com/Ruben-Arushanyan.png","key":"Ruben-Arushanyan","page":null},"seyoon20087":{"name":"seyoon20087","alias":"seyoon20087","url":"https://github.com/seyoon20087","imageURL":"https://github.com/seyoon20087.png","key":"seyoon20087","page":null},"tamalweb":{"name":"Tamal Web","alias":"tamalweb","url":"https://github.com/tamalweb","imageURL":"https://github.com/tamalweb.png","key":"tamalweb","page":null},"thedanielhanke":{"name":"Daniel Hanke","alias":"thedanielhanke","url":"https://github.com/thedanielhanke","imageURL":"https://github.com/thedanielhanke.png","key":"thedanielhanke","page":null},"toto6038":{"name":"toto6038","alias":"toto6038","url":"https://github.com/toto6038","imageURL":"https://github.com/toto6038.png","key":"toto6038","page":null},"vidarc":{"name":"Matthew Ailes","alias":"vidarc","url":"https://github.com/vidarc","imageURL":"https://github.com/vidarc.png","key":"vidarc","page":null},"winterlood":{"name":"\uc774\uc815\ud658","alias":"winterlood","url":"https://github.com/winterlood","imageURL":"https://github.com/winterlood.png","key":"winterlood","page":null},"abahmed":{"name":"Abdelrahman Ahmed","alias":"abahmed","url":"https://github.com/abahmed","imageURL":"https://github.com/abahmed.png","key":"abahmed","page":null},"ajrice6713":{"name":"AJ Rice","alias":"ajrice6713","url":"https://github.com/ajrice6713","imageURL":"https://github.com/ajrice6713.png","key":"ajrice6713","page":null},"alexgrigoras":{"name":"Alexandru Grigoras","alias":"alexgrigoras","url":"https://github.com/alexgrigoras","imageURL":"https://github.com/alexgrigoras.png","key":"alexgrigoras","page":null},"alias-mac":{"name":"Filipe Guerra","alias":"alias-mac","url":"https://github.com/alias-mac","imageURL":"https://github.com/alias-mac.png","key":"alias-mac","page":null},"amir2mi":{"name":"Amir M. Mohamadi","alias":"amir2mi","url":"https://github.com/amir2mi","imageURL":"https://github.com/amir2mi.png","key":"amir2mi","page":null},"antmcc49":{"name":"Anthony McCaigue","alias":"antmcc49","url":"https://github.com/antmcc49","imageURL":"https://github.com/antmcc49.png","key":"antmcc49","page":null},"brendannee":{"name":"Brendan Nee","alias":"brendannee","url":"https://github.com/brendannee","imageURL":"https://github.com/brendannee.png","key":"brendannee","page":null},"cerkiewny":{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},"davidebianchi":{"name":"Davide Bianchi","alias":"davidebianchi","url":"https://github.com/davidebianchi","imageURL":"https://github.com/davidebianchi.png","key":"davidebianchi","page":null},"edouardb":{"name":"Edouard Bonlieu","alias":"edouardb","url":"https://github.com/edouardb","imageURL":"https://github.com/edouardb.png","key":"edouardb","page":null},"FeodorFitsner":{"name":"Feodor Fitsner","alias":"FeodorFitsner","url":"https://github.com/FeodorFitsner","imageURL":"https://github.com/FeodorFitsner.png","key":"FeodorFitsner","page":null},"HiChen404":{"name":"Chen","alias":"HiChen404","url":"https://github.com/HiChen404","imageURL":"https://github.com/HiChen404.png","key":"HiChen404","page":null},"josephriosIO":{"name":"Joseph","alias":"josephriosIO","url":"https://github.com/josephriosIO","imageURL":"https://github.com/josephriosIO.png","key":"josephriosIO","page":null},"jwitz":{"name":"Jake Witz","alias":"jwitz","url":"https://github.com/jwitz","imageURL":"https://github.com/jwitz.png","key":"jwitz","page":null},"kaustubhk24":{"name":"Kaustubh Kulkarni","alias":"kaustubhk24","url":"https://github.com/kaustubhk24","imageURL":"https://github.com/kaustubhk24.png","key":"kaustubhk24","page":null},"kuizuo":{"name":"kuizuo","alias":"kuizuo","url":"https://github.com/kuizuo","imageURL":"https://github.com/kuizuo.png","key":"kuizuo","page":null},"lmpham1":{"name":"Minh Pham","alias":"lmpham1","url":"https://github.com/lmpham1","imageURL":"https://github.com/lmpham1.png","key":"lmpham1","page":null},"ltm":{"name":"Lars Mikkelsen","alias":"ltm","url":"https://github.com/ltm","imageURL":"https://github.com/ltm.png","key":"ltm","page":null},"megasanjay":{"name":"Sanjay Soundarajan","alias":"megasanjay","url":"https://github.com/megasanjay","imageURL":"https://github.com/megasanjay.png","key":"megasanjay","page":null},"MorookaKotaro":{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},"noomorph":{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},"omeraplak":{"name":"\xd6mer Faruk APLAK","alias":"omeraplak","url":"https://github.com/omeraplak","imageURL":"https://github.com/omeraplak.png","key":"omeraplak","page":null},"rishi-raj-jain":{"name":"Rishi Raj Jain","alias":"rishi-raj-jain","url":"https://github.com/rishi-raj-jain","imageURL":"https://github.com/rishi-raj-jain.png","key":"rishi-raj-jain","page":null},"roydukkey":{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},"ruanqizhen":{"name":"ruanqizhen","alias":"ruanqizhen","url":"https://github.com/ruanqizhen","imageURL":"https://github.com/ruanqizhen.png","key":"ruanqizhen","page":null},"sgenoud":{"name":"sgenoud","alias":"sgenoud","url":"https://github.com/sgenoud","imageURL":"https://github.com/sgenoud.png","key":"sgenoud","page":null},"tapanchudasama":{"name":"Tapan Chudasama","alias":"tapanchudasama","url":"https://github.com/tapanchudasama","imageURL":"https://github.com/tapanchudasama.png","key":"tapanchudasama","page":null},"vandreleal":{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},"wood3n":{"name":"wood3n","alias":"wood3n","url":"https://github.com/wood3n","imageURL":"https://github.com/wood3n.png","key":"wood3n","page":null},"christopherklint97":{"name":"Christopher Klint","alias":"christopherklint97","url":"https://github.com/christopherklint97","imageURL":"https://github.com/christopherklint97.png","key":"christopherklint97","page":null},"cmpadden":{"name":"colton","alias":"cmpadden","url":"https://github.com/cmpadden","imageURL":"https://github.com/cmpadden.png","key":"cmpadden","page":null},"Drylozu":{"name":"Drylozu","alias":"Drylozu","url":"https://github.com/Drylozu","imageURL":"https://github.com/Drylozu.png","key":"Drylozu","page":null},"favna":{"name":"Jeroen Claassens","alias":"favna","url":"https://github.com/favna","imageURL":"https://github.com/favna.png","key":"favna","page":null},"HarshCasper":{"name":"Harsh Mishra","alias":"HarshCasper","url":"https://github.com/HarshCasper","imageURL":"https://github.com/HarshCasper.png","key":"HarshCasper","page":null},"himanshu007-creator":{"name":"Himanshu","alias":"himanshu007-creator","url":"https://github.com/himanshu007-creator","imageURL":"https://github.com/himanshu007-creator.png","key":"himanshu007-creator","page":null},"merceyz":{"name":"Kristoffer K.","alias":"merceyz","url":"https://github.com/merceyz","imageURL":"https://github.com/merceyz.png","key":"merceyz","page":null},"notzheng":{"name":"\u4e0d\u90d1","alias":"notzheng","url":"https://github.com/notzheng","imageURL":"https://github.com/notzheng.png","key":"notzheng","page":null},"wewoor":{"name":"Ziv","alias":"wewoor","url":"https://github.com/wewoor","imageURL":"https://github.com/wewoor.png","key":"wewoor","page":null},"withshubh":{"name":"Shubhendra Singh Chauhan","alias":"withshubh","url":"https://github.com/withshubh","imageURL":"https://github.com/withshubh.png","key":"withshubh","page":null},"wowtvds":{"name":"Wout Vandesompele","alias":"wowtvds","url":"https://github.com/wowtvds","imageURL":"https://github.com/wowtvds.png","key":"wowtvds","page":null},"afshinm":{"name":"Afshin Mehrabani","alias":"afshinm","url":"https://github.com/afshinm","imageURL":"https://github.com/afshinm.png","key":"afshinm","page":null},"agrawal-rohit":{"name":"Rohit Agrawal","alias":"agrawal-rohit","url":"https://github.com/agrawal-rohit","imageURL":"https://github.com/agrawal-rohit.png","key":"agrawal-rohit","page":null},"cchaudier":{"name":"Christophe Chaudier","alias":"cchaudier","url":"https://github.com/cchaudier","imageURL":"https://github.com/cchaudier.png","key":"cchaudier","page":null},"chimailo":{"name":"chima ilo","alias":"chimailo","url":"https://github.com/chimailo","imageURL":"https://github.com/chimailo.png","key":"chimailo","page":null},"dexbiobot":{"name":"Shoaib Sajid","alias":"dexbiobot","url":"https://github.com/dexbiobot","imageURL":"https://github.com/dexbiobot.png","key":"dexbiobot","page":null},"dsmmcken":{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},"fishmandev":{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},"fsmaia":{"name":"Fernando Maia","alias":"fsmaia","url":"https://github.com/fsmaia","imageURL":"https://github.com/fsmaia.png","key":"fsmaia","page":null},"hbulens":{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},"HemantSachdeva":{"name":"Hemant Sachdeva","alias":"HemantSachdeva","url":"https://github.com/HemantSachdeva","imageURL":"https://github.com/HemantSachdeva.png","key":"HemantSachdeva","page":null},"JararvisQ":{"name":"Jarar","alias":"JararvisQ","url":"https://github.com/JararvisQ","imageURL":"https://github.com/JararvisQ.png","key":"JararvisQ","page":null},"jeffski":{"name":"Jeff Shillitto","alias":"jeffski","url":"https://github.com/jeffski","imageURL":"https://github.com/jeffski.png","key":"jeffski","page":null},"juffalow":{"name":"Matej Jellus","alias":"juffalow","url":"https://github.com/juffalow","imageURL":"https://github.com/juffalow.png","key":"juffalow","page":null},"juzhiyuan":{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},"KonstHardy":{"name":"Konstantin Popov","alias":"KonstHardy","url":"https://github.com/KonstHardy","imageURL":"https://github.com/KonstHardy.png","key":"KonstHardy","page":null},"ludofischer":{"name":"Ludovico Fischer","alias":"ludofischer","url":"https://github.com/ludofischer","imageURL":"https://github.com/ludofischer.png","key":"ludofischer","page":null},"Martinsos":{"name":"Martin \u0160o\u0161i\u0107","alias":"Martinsos","url":"https://github.com/Martinsos","imageURL":"https://github.com/Martinsos.png","key":"Martinsos","page":null},"matthijsgroen":{"name":"Matthijs Groen","alias":"matthijsgroen","url":"https://github.com/matthijsgroen","imageURL":"https://github.com/matthijsgroen.png","key":"matthijsgroen","page":null},"MisterFISHUP":{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},"molly":{"name":"Molly White","alias":"molly","url":"https://github.com/molly","imageURL":"https://github.com/molly.png","key":"molly","page":null},"oriooctopus":{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},"pal-sig":{"name":"pal-sig","alias":"pal-sig","url":"https://github.com/pal-sig","imageURL":"https://github.com/pal-sig.png","key":"pal-sig","page":null},"Patitotective":{"name":"Patitotective","alias":"Patitotective","url":"https://github.com/Patitotective","imageURL":"https://github.com/Patitotective.png","key":"Patitotective","page":null},"patrikmasiar":{"name":"Patrik M\xe4siar","alias":"patrikmasiar","url":"https://github.com/patrikmasiar","imageURL":"https://github.com/patrikmasiar.png","key":"patrikmasiar","page":null},"pbiggar":{"name":"Paul Biggar","alias":"pbiggar","url":"https://github.com/pbiggar","imageURL":"https://github.com/pbiggar.png","key":"pbiggar","page":null},"polarathene":{"name":"Brennan Kinney","alias":"polarathene","url":"https://github.com/polarathene","imageURL":"https://github.com/polarathene.png","key":"polarathene","page":null},"robinmetral":{"name":"Robin M\xe9tral","alias":"robinmetral","url":"https://github.com/robinmetral","imageURL":"https://github.com/robinmetral.png","key":"robinmetral","page":null},"ronnyroeller":{"name":"Ronny Roeller","alias":"ronnyroeller","url":"https://github.com/ronnyroeller","imageURL":"https://github.com/ronnyroeller.png","key":"ronnyroeller","page":null},"rootwork":{"name":"Ivan Boothe","alias":"rootwork","url":"https://github.com/rootwork","imageURL":"https://github.com/rootwork.png","key":"rootwork","page":null},"rsapkf":{"name":"Rey","alias":"rsapkf","url":"https://github.com/rsapkf","imageURL":"https://github.com/rsapkf.png","key":"rsapkf","page":null},"semoal":{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},"shafy":{"name":"Can Olcer","alias":"shafy","url":"https://github.com/shafy","imageURL":"https://github.com/shafy.png","key":"shafy","page":null},"sivapalan":{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},"skoech":{"name":"Sharon Koech","alias":"skoech","url":"https://github.com/skoech","imageURL":"https://github.com/skoech.png","key":"skoech","page":null},"sohamsshah":{"name":"Soham Shah","alias":"sohamsshah","url":"https://github.com/sohamsshah","imageURL":"https://github.com/sohamsshah.png","key":"sohamsshah","page":null},"spyke01":{"name":"Paden Clayton","alias":"spyke01","url":"https://github.com/spyke01","imageURL":"https://github.com/spyke01.png","key":"spyke01","page":null},"StanKocken":{"name":"Stan Kocken","alias":"StanKocken","url":"https://github.com/StanKocken","imageURL":"https://github.com/StanKocken.png","key":"StanKocken","page":null},"swalahamani":{"name":"Swalah Amani","alias":"swalahamani","url":"https://github.com/swalahamani","imageURL":"https://github.com/swalahamani.png","key":"swalahamani","page":null},"swapnilmmane":{"name":"Swapnil M Mane","alias":"swapnilmmane","url":"https://github.com/swapnilmmane","imageURL":"https://github.com/swapnilmmane.png","key":"swapnilmmane","page":null},"wpyoga":{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null},"AviVahl":{"name":"Avi Vahl","alias":"AviVahl","url":"https://github.com/AviVahl","imageURL":"https://github.com/AviVahl.png","key":"AviVahl","page":null},"dominikmeyersap":{"name":"Dominik Meyer","alias":"dominikmeyersap","url":"https://github.com/dominikmeyersap","imageURL":"https://github.com/dominikmeyersap.png","key":"dominikmeyersap","page":null},"gabrielfalcao":{"name":"Gabriel Falc\xe3o","alias":"gabrielfalcao","url":"https://github.com/gabrielfalcao","imageURL":"https://github.com/gabrielfalcao.png","key":"gabrielfalcao","page":null},"oscard0m":{"name":"Oscar Dominguez","alias":"oscard0m","url":"https://github.com/oscard0m","imageURL":"https://github.com/oscard0m.png","key":"oscard0m","page":null},"robbieaverill":{"name":"Robbie Averill","alias":"robbieaverill","url":"https://github.com/robbieaverill","imageURL":"https://github.com/robbieaverill.png","key":"robbieaverill","page":null},"utajum":{"name":"Vladimir Tasic","alias":"utajum","url":"https://github.com/utajum","imageURL":"https://github.com/utajum.png","key":"utajum","page":null},"wingclover":{"name":"Ying Wang","alias":"wingclover","url":"https://github.com/wingclover","imageURL":"https://github.com/wingclover.png","key":"wingclover","page":null},"ataft":{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},"canercanbaz":{"name":"Caner Canbaz","alias":"canercanbaz","url":"https://github.com/canercanbaz","imageURL":"https://github.com/canercanbaz.png","key":"canercanbaz","page":null},"DimiMikadze":{"name":"Dimi Mikadze","alias":"DimiMikadze","url":"https://github.com/DimiMikadze","imageURL":"https://github.com/DimiMikadze.png","key":"DimiMikadze","page":null},"ipavlic":{"name":"Ilija Pavlic","alias":"ipavlic","url":"https://github.com/ipavlic","imageURL":"https://github.com/ipavlic.png","key":"ipavlic","page":null},"nlfurniss":{"name":"Nathaniel Furniss","alias":"nlfurniss","url":"https://github.com/nlfurniss","imageURL":"https://github.com/nlfurniss.png","key":"nlfurniss","page":null},"philipp985":{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},"thanasis00":{"name":"Thanasis Katsadas","alias":"thanasis00","url":"https://github.com/thanasis00","imageURL":"https://github.com/thanasis00.png","key":"thanasis00","page":null},"zxuqian":{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null},"akajla09":{"name":"Aditya Kajla","alias":"akajla09","url":"https://github.com/akajla09","imageURL":"https://github.com/akajla09.png","key":"akajla09","page":null},"Andrewnt219":{"name":"Andrew Nguyen","alias":"Andrewnt219","url":"https://github.com/Andrewnt219","imageURL":"https://github.com/Andrewnt219.png","key":"Andrewnt219","page":null},"BattleOfPlassey":{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},"bmiddha":{"name":"Bharat Middha","alias":"bmiddha","url":"https://github.com/bmiddha","imageURL":"https://github.com/bmiddha.png","key":"bmiddha","page":null},"caleeli":{"name":"David Callizaya","alias":"caleeli","url":"https://github.com/caleeli","imageURL":"https://github.com/caleeli.png","key":"caleeli","page":null},"ChrisChinchilla":{"name":"Chris Chinchilla","alias":"ChrisChinchilla","url":"https://github.com/ChrisChinchilla","imageURL":"https://github.com/ChrisChinchilla.png","key":"ChrisChinchilla","page":null},"djamaile":{"name":"djamaile","alias":"djamaile","url":"https://github.com/djamaile","imageURL":"https://github.com/djamaile.png","key":"djamaile","page":null},"dr5hn":{"name":"Darshan Gada","alias":"dr5hn","url":"https://github.com/dr5hn","imageURL":"https://github.com/dr5hn.png","key":"dr5hn","page":null},"EkaterinaMozheiko":{"name":"Ekaterina Mozheiko","alias":"EkaterinaMozheiko","url":"https://github.com/EkaterinaMozheiko","imageURL":"https://github.com/EkaterinaMozheiko.png","key":"EkaterinaMozheiko","page":null},"gtnardy":{"name":"Gabriel T. Nardy","alias":"gtnardy","url":"https://github.com/gtnardy","imageURL":"https://github.com/gtnardy.png","key":"gtnardy","page":null},"headline-design":{"name":"headline-design","alias":"headline-design","url":"https://github.com/headline-design","imageURL":"https://github.com/headline-design.png","key":"headline-design","page":null},"hughlilly":{"name":"Hugh Lilly","alias":"hughlilly","url":"https://github.com/hughlilly","imageURL":"https://github.com/hughlilly.png","key":"hughlilly","page":null},"ivarconr":{"name":"Ivar Conradi \xd8sthus","alias":"ivarconr","url":"https://github.com/ivarconr","imageURL":"https://github.com/ivarconr.png","key":"ivarconr","page":null},"jasonbosco":{"name":"Jason Bosco","alias":"jasonbosco","url":"https://github.com/jasonbosco","imageURL":"https://github.com/jasonbosco.png","key":"jasonbosco","page":null},"jkhaui":{"name":"Jordan Lee","alias":"jkhaui","url":"https://github.com/jkhaui","imageURL":"https://github.com/jkhaui.png","key":"jkhaui","page":null},"kingo55":{"name":"Robert Kingston","alias":"kingo55","url":"https://github.com/kingo55","imageURL":"https://github.com/kingo55.png","key":"kingo55","page":null},"KyrietS":{"name":"Kyriet","alias":"KyrietS","url":"https://github.com/KyrietS","imageURL":"https://github.com/KyrietS.png","key":"KyrietS","page":null},"MrTechHunter":{"name":"Mahdi Hamldar","alias":"MrTechHunter","url":"https://github.com/MrTechHunter","imageURL":"https://github.com/MrTechHunter.png","key":"MrTechHunter","page":null},"ohkimur":{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},"printf-ana":{"name":"Ana Carolina","alias":"printf-ana","url":"https://github.com/printf-ana","imageURL":"https://github.com/printf-ana.png","key":"printf-ana","page":null},"Shrugsy":{"name":"Shrugsy","alias":"Shrugsy","url":"https://github.com/Shrugsy","imageURL":"https://github.com/Shrugsy.png","key":"Shrugsy","page":null},"sw-yx":{"name":"swyx","alias":"sw-yx","url":"https://github.com/sw-yx","imageURL":"https://github.com/sw-yx.png","key":"sw-yx","page":null},"vinckr":{"name":"Vincent","alias":"vinckr","url":"https://github.com/vinckr","imageURL":"https://github.com/vinckr.png","key":"vinckr","page":null},"Whirl21":{"name":"Whirl","alias":"Whirl21","url":"https://github.com/Whirl21","imageURL":"https://github.com/Whirl21.png","key":"Whirl21","page":null},"3alisaki":{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},"antonym":{"name":"Antony Messerli","alias":"antonym","url":"https://github.com/antonym","imageURL":"https://github.com/antonym.png","key":"antonym","page":null},"farshidinanloo":{"name":"farshid","alias":"farshidinanloo","url":"https://github.com/farshidinanloo","imageURL":"https://github.com/farshidinanloo.png","key":"farshidinanloo","page":null},"oscarlorentzon":{"name":"Oscar Lorentzon","alias":"oscarlorentzon","url":"https://github.com/oscarlorentzon","imageURL":"https://github.com/oscarlorentzon.png","key":"oscarlorentzon","page":null},"rohit-gohri":{"name":"Rohit Gohri","alias":"rohit-gohri","url":"https://github.com/rohit-gohri","imageURL":"https://github.com/rohit-gohri.png","key":"rohit-gohri","page":null},"dbseal":{"name":"David Seal","alias":"dbseal","url":"https://github.com/dbseal","imageURL":"https://github.com/dbseal.png","key":"dbseal","page":null},"deepakprabhakara":{"name":"Deepak Prabhakara","alias":"deepakprabhakara","url":"https://github.com/deepakprabhakara","imageURL":"https://github.com/deepakprabhakara.png","key":"deepakprabhakara","page":null},"faloi":{"name":"Federico Aloi","alias":"faloi","url":"https://github.com/faloi","imageURL":"https://github.com/faloi.png","key":"faloi","page":null},"fouad":{"name":"Fouad Matin","alias":"fouad","url":"https://github.com/fouad","imageURL":"https://github.com/fouad.png","key":"fouad","page":null},"gulien":{"name":"Julien Neuhart","alias":"gulien","url":"https://github.com/gulien","imageURL":"https://github.com/gulien.png","key":"gulien","page":null},"hamzahamidi":{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},"HaochenQ":{"name":"HaochenQ","alias":"HaochenQ","url":"https://github.com/HaochenQ","imageURL":"https://github.com/HaochenQ.png","key":"HaochenQ","page":null},"incendial":{"name":"Dmitry Zhifarsky","alias":"incendial","url":"https://github.com/incendial","imageURL":"https://github.com/incendial.png","key":"incendial","page":null},"isaac-philip":{"name":"Isaac Philip","alias":"isaac-philip","url":"https://github.com/isaac-philip","imageURL":"https://github.com/isaac-philip.png","key":"isaac-philip","page":null},"jansivans":{"name":"Yan Ivan Evdokimov","alias":"jansivans","url":"https://github.com/jansivans","imageURL":"https://github.com/jansivans.png","key":"jansivans","page":null},"JonnyBurger":{"name":"Jonny Burger","alias":"JonnyBurger","url":"https://github.com/JonnyBurger","imageURL":"https://github.com/JonnyBurger.png","key":"JonnyBurger","page":null},"metmarkosaric":{"name":"Marko Saric","alias":"metmarkosaric","url":"https://github.com/metmarkosaric","imageURL":"https://github.com/metmarkosaric.png","key":"metmarkosaric","page":null},"michalsanger":{"name":"Michal S\xe4nger","alias":"michalsanger","url":"https://github.com/michalsanger","imageURL":"https://github.com/michalsanger.png","key":"michalsanger","page":null},"neaped":{"name":"Garry","alias":"neaped","url":"https://github.com/neaped","imageURL":"https://github.com/neaped.png","key":"neaped","page":null},"sparanoid":{"name":"Tunghsiao Liu","alias":"sparanoid","url":"https://github.com/sparanoid","imageURL":"https://github.com/sparanoid.png","key":"sparanoid","page":null},"wan-nyan-wan":{"name":"wan-nyan-wan","alias":"wan-nyan-wan","url":"https://github.com/wan-nyan-wan","imageURL":"https://github.com/wan-nyan-wan.png","key":"wan-nyan-wan","page":null},"antonvasilev52":{"name":"antonvasilev52","alias":"antonvasilev52","url":"https://github.com/antonvasilev52","imageURL":"https://github.com/antonvasilev52.png","key":"antonvasilev52","page":null},"arnaudjnn":{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},"cmfcmf":{"name":"Christian Flach","alias":"cmfcmf","url":"https://github.com/cmfcmf","imageURL":"https://github.com/cmfcmf.png","key":"cmfcmf","page":null},"covalentbond":{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},"davidzhao":{"name":"David Zhao","alias":"davidzhao","url":"https://github.com/davidzhao","imageURL":"https://github.com/davidzhao.png","key":"davidzhao","page":null},"dbrrt":{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},"dgeb":{"name":"Dan Gebhardt","alias":"dgeb","url":"https://github.com/dgeb","imageURL":"https://github.com/dgeb.png","key":"dgeb","page":null},"fmassot":{"name":"Fran\xe7ois Massot","alias":"fmassot","url":"https://github.com/fmassot","imageURL":"https://github.com/fmassot.png","key":"fmassot","page":null},"lennartkoopmann":{"name":"Lennart Koopmann","alias":"lennartkoopmann","url":"https://github.com/lennartkoopmann","imageURL":"https://github.com/lennartkoopmann.png","key":"lennartkoopmann","page":null},"marssaljr":{"name":"Mar\xe7al Junior","alias":"marssaljr","url":"https://github.com/marssaljr","imageURL":"https://github.com/marssaljr.png","key":"marssaljr","page":null},"mweststrate":{"name":"Michel Weststrate","alias":"mweststrate","url":"https://github.com/mweststrate","imageURL":"https://github.com/mweststrate.png","key":"mweststrate","page":null},"NazarStreletskyi":{"name":"Nazar","alias":"NazarStreletskyi","url":"https://github.com/NazarStreletskyi","imageURL":"https://github.com/NazarStreletskyi.png","key":"NazarStreletskyi","page":null},"nirtamir2":{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},"pcho":{"name":"Przemys\u0142aw Chojecki","alias":"pcho","url":"https://github.com/pcho","imageURL":"https://github.com/pcho.png","key":"pcho","page":null},"pmuens":{"name":"Philipp Muens","alias":"pmuens","url":"https://github.com/pmuens","imageURL":"https://github.com/pmuens.png","key":"pmuens","page":null},"rluvaton":{"name":"Raz Luvaton","alias":"rluvaton","url":"https://github.com/rluvaton","imageURL":"https://github.com/rluvaton.png","key":"rluvaton","page":null},"taylorreece":{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},"tohidnateghi":{"name":"tohid nateghi","alias":"tohidnateghi","url":"https://github.com/tohidnateghi","imageURL":"https://github.com/tohidnateghi.png","key":"tohidnateghi","page":null},"wenerme":{"name":"\u9648\u6768\u6587","alias":"wenerme","url":"https://github.com/wenerme","imageURL":"https://github.com/wenerme.png","key":"wenerme","page":null},"AuHau":{"name":"Adam Uhl\xed\u0159","alias":"AuHau","url":"https://github.com/AuHau","imageURL":"https://github.com/AuHau.png","key":"AuHau","page":null},"bperlmutter":{"name":"bperlmutter","alias":"bperlmutter","url":"https://github.com/bperlmutter","imageURL":"https://github.com/bperlmutter.png","key":"bperlmutter","page":null},"dirslashls":{"name":"dirslashls","alias":"dirslashls","url":"https://github.com/dirslashls","imageURL":"https://github.com/dirslashls.png","key":"dirslashls","page":null},"iamayushdas":{"name":"Ayush das","alias":"iamayushdas","url":"https://github.com/iamayushdas","imageURL":"https://github.com/iamayushdas.png","key":"iamayushdas","page":null},"jsamr":{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},"kdrag0n":{"name":"Danny Lin","alias":"kdrag0n","url":"https://github.com/kdrag0n","imageURL":"https://github.com/kdrag0n.png","key":"kdrag0n","page":null},"ramiy":{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},"eshantri":{"name":"Eshan Tripathi","alias":"eshantri","url":"https://github.com/eshantri","imageURL":"https://github.com/eshantri.png","key":"eshantri","page":null},"loozhengyuan":{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},"manuelmeurer":{"name":"Manuel Meurer","alias":"manuelmeurer","url":"https://github.com/manuelmeurer","imageURL":"https://github.com/manuelmeurer.png","key":"manuelmeurer","page":null},"teikjun":{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},"tomekpapiernik":{"name":"Tomasz Papiernik","alias":"tomekpapiernik","url":"https://github.com/tomekpapiernik","imageURL":"https://github.com/tomekpapiernik.png","key":"tomekpapiernik","page":null},"antonygibbs":{"name":"antonygibbs","alias":"antonygibbs","url":"https://github.com/antonygibbs","imageURL":"https://github.com/antonygibbs.png","key":"antonygibbs","page":null},"ArtFlag":{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},"besemuna":{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},"Christopher-Hsieh":{"name":"Christopher Hsieh","alias":"Christopher-Hsieh","url":"https://github.com/Christopher-Hsieh","imageURL":"https://github.com/Christopher-Hsieh.png","key":"Christopher-Hsieh","page":null},"dabeeeenster":{"name":"Ben Rometsch","alias":"dabeeeenster","url":"https://github.com/dabeeeenster","imageURL":"https://github.com/dabeeeenster.png","key":"dabeeeenster","page":null},"e271828-":{"name":"e271828-","alias":"e271828-","url":"https://github.com/e271828-","imageURL":"https://github.com/e271828-.png","key":"e271828-","page":null},"fgatti675":{"name":"fgatti675","alias":"fgatti675","url":"https://github.com/fgatti675","imageURL":"https://github.com/fgatti675.png","key":"fgatti675","page":null},"HunteRoi":{"name":"Tina\xebl Devresse","alias":"HunteRoi","url":"https://github.com/HunteRoi","imageURL":"https://github.com/HunteRoi.png","key":"HunteRoi","page":null},"jmazin":{"name":"Jonathan Mazin","alias":"jmazin","url":"https://github.com/jmazin","imageURL":"https://github.com/jmazin.png","key":"jmazin","page":null},"Joelpo":{"name":"Joel","alias":"Joelpo","url":"https://github.com/Joelpo","imageURL":"https://github.com/Joelpo.png","key":"Joelpo","page":null},"jonbarker68":{"name":"Jon Barker","alias":"jonbarker68","url":"https://github.com/jonbarker68","imageURL":"https://github.com/jonbarker68.png","key":"jonbarker68","page":null},"l0u1sg":{"name":"Louis Gallet","alias":"l0u1sg","url":"https://github.com/l0u1sg","imageURL":"https://github.com/l0u1sg.png","key":"l0u1sg","page":null},"limkinZero":{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},"liorheber":{"name":"Lior Heber","alias":"liorheber","url":"https://github.com/liorheber","imageURL":"https://github.com/liorheber.png","key":"liorheber","page":null},"louistiti":{"name":"Louis Grenard","alias":"louistiti","url":"https://github.com/louistiti","imageURL":"https://github.com/louistiti.png","key":"louistiti","page":null},"Massibian":{"name":"Massibian","alias":"Massibian","url":"https://github.com/Massibian","imageURL":"https://github.com/Massibian.png","key":"Massibian","page":null},"nam-hle":{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},"Neilblaze":{"name":"Pratyay Banerjee","alias":"Neilblaze","url":"https://github.com/Neilblaze","imageURL":"https://github.com/Neilblaze.png","key":"Neilblaze","page":null},"phwt":{"name":"phwt.smwt","alias":"phwt","url":"https://github.com/phwt","imageURL":"https://github.com/phwt.png","key":"phwt","page":null},"pmqueiroz":{"name":"Pedro Queiroz","alias":"pmqueiroz","url":"https://github.com/pmqueiroz","imageURL":"https://github.com/pmqueiroz.png","key":"pmqueiroz","page":null},"PsychTechApS":{"name":"PsychTech","alias":"PsychTechApS","url":"https://github.com/PsychTechApS","imageURL":"https://github.com/PsychTechApS.png","key":"PsychTechApS","page":null},"SamChou19815":{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},"silva-nick":{"name":"silva-nick","alias":"silva-nick","url":"https://github.com/silva-nick","imageURL":"https://github.com/silva-nick.png","key":"silva-nick","page":null},"tiny-dancer":{"name":"mg","alias":"tiny-dancer","url":"https://github.com/tiny-dancer","imageURL":"https://github.com/tiny-dancer.png","key":"tiny-dancer","page":null},"tsirlucas":{"name":"Lucas Correia","alias":"tsirlucas","url":"https://github.com/tsirlucas","imageURL":"https://github.com/tsirlucas.png","key":"tsirlucas","page":null},"wise-introvert":{"name":"Fardeen Panjwani","alias":"wise-introvert","url":"https://github.com/wise-introvert","imageURL":"https://github.com/wise-introvert.png","key":"wise-introvert","page":null},"ChrisOwen101":{"name":"Chris Owen","alias":"ChrisOwen101","url":"https://github.com/ChrisOwen101","imageURL":"https://github.com/ChrisOwen101.png","key":"ChrisOwen101","page":null},"gianu":{"name":"Sergio Rafael Gianazza","alias":"gianu","url":"https://github.com/gianu","imageURL":"https://github.com/gianu.png","key":"gianu","page":null},"joelhans":{"name":"Joel Hans","alias":"joelhans","url":"https://github.com/joelhans","imageURL":"https://github.com/joelhans.png","key":"joelhans","page":null},"KostyaTretyak":{"name":"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a","alias":"KostyaTretyak","url":"https://github.com/KostyaTretyak","imageURL":"https://github.com/KostyaTretyak.png","key":"KostyaTretyak","page":null},"rodmoreno":{"name":"Rodrigo Moreno","alias":"rodmoreno","url":"https://github.com/rodmoreno","imageURL":"https://github.com/rodmoreno.png","key":"rodmoreno","page":null},"yiliansource":{"name":"Ian Hornik","alias":"yiliansource","url":"https://github.com/yiliansource","imageURL":"https://github.com/yiliansource.png","key":"yiliansource","page":null},"gempain":{"name":"Geoffroy Empain","alias":"gempain","url":"https://github.com/gempain","imageURL":"https://github.com/gempain.png","key":"gempain","page":null},"tommy351":{"name":"Tommy Chen","alias":"tommy351","url":"https://github.com/tommy351","imageURL":"https://github.com/tommy351.png","key":"tommy351","page":null},"alena-ko":{"name":"alena-ko","alias":"alena-ko","url":"https://github.com/alena-ko","imageURL":"https://github.com/alena-ko.png","key":"alena-ko","page":null},"kazk":{"name":"kazk","alias":"kazk","url":"https://github.com/kazk","imageURL":"https://github.com/kazk.png","key":"kazk","page":null},"lisa761":{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},"luism3861":{"name":"Luis Medina Huerta","alias":"luism3861","url":"https://github.com/luism3861","imageURL":"https://github.com/luism3861.png","key":"luism3861","page":null},"react-learner":{"name":"Tommy","alias":"react-learner","url":"https://github.com/react-learner","imageURL":"https://github.com/react-learner.png","key":"react-learner","page":null},"aehrea":{"name":"aehrea","alias":"aehrea","url":"https://github.com/aehrea","imageURL":"https://github.com/aehrea.png","key":"aehrea","page":null},"ajeetraina":{"name":"Ajeet Singh Raina, Docker Captain, RedisLabs","alias":"ajeetraina","url":"https://github.com/ajeetraina","imageURL":"https://github.com/ajeetraina.png","key":"ajeetraina","page":null},"akepecs":{"name":"akepecs","alias":"akepecs","url":"https://github.com/akepecs","imageURL":"https://github.com/akepecs.png","key":"akepecs","page":null},"AnthonyBobsin":{"name":"Anthony Bobsin","alias":"AnthonyBobsin","url":"https://github.com/AnthonyBobsin","imageURL":"https://github.com/AnthonyBobsin.png","key":"AnthonyBobsin","page":null},"arturcarvalho":{"name":"Artur Carvalho","alias":"arturcarvalho","url":"https://github.com/arturcarvalho","imageURL":"https://github.com/arturcarvalho.png","key":"arturcarvalho","page":null},"atomicpages":{"name":"Dennis Thompson","alias":"atomicpages","url":"https://github.com/atomicpages","imageURL":"https://github.com/atomicpages.png","key":"atomicpages","page":null},"clarus":{"name":"Guillaume Claret","alias":"clarus","url":"https://github.com/clarus","imageURL":"https://github.com/clarus.png","key":"clarus","page":null},"dickwyn":{"name":"Dick Wyn Yong","alias":"dickwyn","url":"https://github.com/dickwyn","imageURL":"https://github.com/dickwyn.png","key":"dickwyn","page":null},"Foxeye-Rinx":{"name":"Foxeye-Rinx","alias":"Foxeye-Rinx","url":"https://github.com/Foxeye-Rinx","imageURL":"https://github.com/Foxeye-Rinx.png","key":"Foxeye-Rinx","page":null},"gitbrent":{"name":"Brent Ely","alias":"gitbrent","url":"https://github.com/gitbrent","imageURL":"https://github.com/gitbrent.png","key":"gitbrent","page":null},"gumacahin":{"name":"Marco Enrico","alias":"gumacahin","url":"https://github.com/gumacahin","imageURL":"https://github.com/gumacahin.png","key":"gumacahin","page":null},"jknoxville":{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},"kaytwo":{"name":"Chris Kanich","alias":"kaytwo","url":"https://github.com/kaytwo","imageURL":"https://github.com/kaytwo.png","key":"kaytwo","page":null},"lucalves":{"name":"Lucas Alves","alias":"lucalves","url":"https://github.com/lucalves","imageURL":"https://github.com/lucalves.png","key":"lucalves","page":null},"miku86":{"name":"miku86","alias":"miku86","url":"https://github.com/miku86","imageURL":"https://github.com/miku86.png","key":"miku86","page":null},"pepibumur":{"name":"Pedro Pi\xf1era Buend\xeda","alias":"pepibumur","url":"https://github.com/pepibumur","imageURL":"https://github.com/pepibumur.png","key":"pepibumur","page":null},"serut":{"name":"serut","alias":"serut","url":"https://github.com/serut","imageURL":"https://github.com/serut.png","key":"serut","page":null},"ShinteiMai":{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},"steveworley":{"name":"Steve","alias":"steveworley","url":"https://github.com/steveworley","imageURL":"https://github.com/steveworley.png","key":"steveworley","page":null},"sunny0826":{"name":"guoxudong","alias":"sunny0826","url":"https://github.com/sunny0826","imageURL":"https://github.com/sunny0826.png","key":"sunny0826","page":null},"talesporto":{"name":"Tales Porto","alias":"talesporto","url":"https://github.com/talesporto","imageURL":"https://github.com/talesporto.png","key":"talesporto","page":null},"thiagog3":{"name":"Thiago Sciotta","alias":"thiagog3","url":"https://github.com/thiagog3","imageURL":"https://github.com/thiagog3.png","key":"thiagog3","page":null},"tiago-rr":{"name":"Tiago Ribeiro","alias":"tiago-rr","url":"https://github.com/tiago-rr","imageURL":"https://github.com/tiago-rr.png","key":"tiago-rr","page":null},"tomrav":{"name":"Tom Raviv","alias":"tomrav","url":"https://github.com/tomrav","imageURL":"https://github.com/tomrav.png","key":"tomrav","page":null},"tony":{"name":"Tony Narlock","alias":"tony","url":"https://github.com/tony","imageURL":"https://github.com/tony.png","key":"tony","page":null},"Harvtronix":{"name":"Harvtronix","alias":"Harvtronix","url":"https://github.com/Harvtronix","imageURL":"https://github.com/Harvtronix.png","key":"Harvtronix","page":null},"koko8829":{"name":"Joon-Ha Lee","alias":"koko8829","url":"https://github.com/koko8829","imageURL":"https://github.com/koko8829.png","key":"koko8829","page":null},"leandrooriente":{"name":"Leandro Oriente","alias":"leandrooriente","url":"https://github.com/leandrooriente","imageURL":"https://github.com/leandrooriente.png","key":"leandrooriente","page":null},"longlho":{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},"lowenhere":{"name":"Lowen","alias":"lowenhere","url":"https://github.com/lowenhere","imageURL":"https://github.com/lowenhere.png","key":"lowenhere","page":null},"quanengineering":{"name":"Quan","alias":"quanengineering","url":"https://github.com/quanengineering","imageURL":"https://github.com/quanengineering.png","key":"quanengineering","page":null},"Rhodanthe1116":{"name":"Rhodanthe1116","alias":"Rhodanthe1116","url":"https://github.com/Rhodanthe1116","imageURL":"https://github.com/Rhodanthe1116.png","key":"Rhodanthe1116","page":null},"zkochan":{"name":"Zoltan Kochan","alias":"zkochan","url":"https://github.com/zkochan","imageURL":"https://github.com/zkochan.png","key":"zkochan","page":null},"9oelM":{"name":"Joel M","alias":"9oelM","url":"https://github.com/9oelM","imageURL":"https://github.com/9oelM.png","key":"9oelM","page":null},"apurvaojas":{"name":"Apurva Ojas","alias":"apurvaojas","url":"https://github.com/apurvaojas","imageURL":"https://github.com/apurvaojas.png","key":"apurvaojas","page":null},"asystentka-jolka":{"name":"Jola","alias":"asystentka-jolka","url":"https://github.com/asystentka-jolka","imageURL":"https://github.com/asystentka-jolka.png","key":"asystentka-jolka","page":null},"aukokyong":{"name":"aukokyong","alias":"aukokyong","url":"https://github.com/aukokyong","imageURL":"https://github.com/aukokyong.png","key":"aukokyong","page":null},"ayonious":{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},"B4nan":{"name":"Martin Ad\xe1mek","alias":"B4nan","url":"https://github.com/B4nan","imageURL":"https://github.com/B4nan.png","key":"B4nan","page":null},"ben-qnimble":{"name":"Ben","alias":"ben-qnimble","url":"https://github.com/ben-qnimble","imageURL":"https://github.com/ben-qnimble.png","key":"ben-qnimble","page":null},"bennodev19":{"name":"BennoDev","alias":"bennodev19","url":"https://github.com/bennodev19","imageURL":"https://github.com/bennodev19.png","key":"bennodev19","page":null},"caglarturali":{"name":"\xc7a\u011flar Tural\u0131","alias":"caglarturali","url":"https://github.com/caglarturali","imageURL":"https://github.com/caglarturali.png","key":"caglarturali","page":null},"christian-bromann":{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},"edulazaro":{"name":"Eduardo L\xe1zaro","alias":"edulazaro","url":"https://github.com/edulazaro","imageURL":"https://github.com/edulazaro.png","key":"edulazaro","page":null},"eric-hc":{"name":"Eric Carboni","alias":"eric-hc","url":"https://github.com/eric-hc","imageURL":"https://github.com/eric-hc.png","key":"eric-hc","page":null},"iamshadmirza":{"name":"Mohd Shad Mirza","alias":"iamshadmirza","url":"https://github.com/iamshadmirza","imageURL":"https://github.com/iamshadmirza.png","key":"iamshadmirza","page":null},"imbhargav5":{"name":"Bhargav Ponnapalli","alias":"imbhargav5","url":"https://github.com/imbhargav5","imageURL":"https://github.com/imbhargav5.png","key":"imbhargav5","page":null},"iruzevic":{"name":"Ivan Ru\u017eevi\u0107","alias":"iruzevic","url":"https://github.com/iruzevic","imageURL":"https://github.com/iruzevic.png","key":"iruzevic","page":null},"jlin27":{"name":"Jessica Lin","alias":"jlin27","url":"https://github.com/jlin27","imageURL":"https://github.com/jlin27.png","key":"jlin27","page":null},"JoelMarcey":{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},"juancarlosjr97":{"name":"Juan Carlos Blanco Delgado","alias":"juancarlosjr97","url":"https://github.com/juancarlosjr97","imageURL":"https://github.com/juancarlosjr97.png","key":"juancarlosjr97","page":null},"kumaraditya303":{"name":"Kumar Aditya","alias":"kumaraditya303","url":"https://github.com/kumaraditya303","imageURL":"https://github.com/kumaraditya303.png","key":"kumaraditya303","page":null},"linyuxuanlin":{"name":"Power Lin","alias":"linyuxuanlin","url":"https://github.com/linyuxuanlin","imageURL":"https://github.com/linyuxuanlin.png","key":"linyuxuanlin","page":null},"manzinello":{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},"MatanBobi":{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},"miroiu":{"name":"Miroiu Emanuel","alias":"miroiu","url":"https://github.com/miroiu","imageURL":"https://github.com/miroiu.png","key":"miroiu","page":null},"natac13":{"name":"Sean Campbell","alias":"natac13","url":"https://github.com/natac13","imageURL":"https://github.com/natac13.png","key":"natac13","page":null},"nicojs":{"name":"Nico Jansen","alias":"nicojs","url":"https://github.com/nicojs","imageURL":"https://github.com/nicojs.png","key":"nicojs","page":null},"NikolayS":{"name":"Nikolay Samokhvalov","alias":"NikolayS","url":"https://github.com/NikolayS","imageURL":"https://github.com/NikolayS.png","key":"NikolayS","page":null},"ntbosscher":{"name":"Nathan Bosscher","alias":"ntbosscher","url":"https://github.com/ntbosscher","imageURL":"https://github.com/ntbosscher.png","key":"ntbosscher","page":null},"oze4":{"name":"Matt Oestreich","alias":"oze4","url":"https://github.com/oze4","imageURL":"https://github.com/oze4.png","key":"oze4","page":null},"saihaj":{"name":"Saihajpreet Singh","alias":"saihaj","url":"https://github.com/saihaj","imageURL":"https://github.com/saihaj.png","key":"saihaj","page":null},"samhrncir":{"name":"Sam Hrncir","alias":"samhrncir","url":"https://github.com/samhrncir","imageURL":"https://github.com/samhrncir.png","key":"samhrncir","page":null},"sammychinedu2ky":{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},"saydo17":{"name":"saydo17","alias":"saydo17","url":"https://github.com/saydo17","imageURL":"https://github.com/saydo17.png","key":"saydo17","page":null},"Siemienik":{"name":"Siemienik Pawel","alias":"Siemienik","url":"https://github.com/Siemienik","imageURL":"https://github.com/Siemienik.png","key":"Siemienik","page":null},"Simek":{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},"sksamuel":{"name":"Sam Sam","alias":"sksamuel","url":"https://github.com/sksamuel","imageURL":"https://github.com/sksamuel.png","key":"sksamuel","page":null},"theankurkedia":{"name":"Ankur Kedia","alias":"theankurkedia","url":"https://github.com/theankurkedia","imageURL":"https://github.com/theankurkedia.png","key":"theankurkedia","page":null},"TheodoreChu":{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},"tienvx":{"name":"Tien Vo Xuan","alias":"tienvx","url":"https://github.com/tienvx","imageURL":"https://github.com/tienvx.png","key":"tienvx","page":null},"tokarchyn":{"name":"tokarchyn","alias":"tokarchyn","url":"https://github.com/tokarchyn","imageURL":"https://github.com/tokarchyn.png","key":"tokarchyn","page":null},"tomsfernandez":{"name":"Tomas Fernandez","alias":"tomsfernandez","url":"https://github.com/tomsfernandez","imageURL":"https://github.com/tomsfernandez.png","key":"tomsfernandez","page":null},"vamsi3":{"name":"Vamsi Krishna Reddy Satti","alias":"vamsi3","url":"https://github.com/vamsi3","imageURL":"https://github.com/vamsi3.png","key":"vamsi3","page":null},"viglucci":{"name":"Kevin Viglucci","alias":"viglucci","url":"https://github.com/viglucci","imageURL":"https://github.com/viglucci.png","key":"viglucci","page":null},"wellyshen":{"name":"Welly","alias":"wellyshen","url":"https://github.com/wellyshen","imageURL":"https://github.com/wellyshen.png","key":"wellyshen","page":null},"wolf20482":{"name":"wolf20482","alias":"wolf20482","url":"https://github.com/wolf20482","imageURL":"https://github.com/wolf20482.png","key":"wolf20482","page":null},"YashTotale":{"name":"Yash Totale","alias":"YashTotale","url":"https://github.com/YashTotale","imageURL":"https://github.com/YashTotale.png","key":"YashTotale","page":null},"ykzts":{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null},"ysulyma":{"name":"Yuri Sulyma","alias":"ysulyma","url":"https://github.com/ysulyma","imageURL":"https://github.com/ysulyma.png","key":"ysulyma","page":null},"yuval-hazaz":{"name":"Yuval Hazaz","alias":"yuval-hazaz","url":"https://github.com/yuval-hazaz","imageURL":"https://github.com/yuval-hazaz.png","key":"yuval-hazaz","page":null},"aarongarciah":{"name":"Aar\xf3n Garc\xeda Herv\xe1s","alias":"aarongarciah","url":"https://github.com/aarongarciah","imageURL":"https://github.com/aarongarciah.png","key":"aarongarciah","page":null},"aeneasr":{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},"Alex1304":{"name":"Alex1304","alias":"Alex1304","url":"https://github.com/Alex1304","imageURL":"https://github.com/Alex1304.png","key":"Alex1304","page":null},"borool":{"name":"borool","alias":"borool","url":"https://github.com/borool","imageURL":"https://github.com/borool.png","key":"borool","page":null},"cindygu4":{"name":"Cindy Gu","alias":"cindygu4","url":"https://github.com/cindygu4","imageURL":"https://github.com/cindygu4.png","key":"cindygu4","page":null},"davidmauskop":{"name":"davidmauskop","alias":"davidmauskop","url":"https://github.com/davidmauskop","imageURL":"https://github.com/davidmauskop.png","key":"davidmauskop","page":null},"dgilling":{"name":"Derric Gilling","alias":"dgilling","url":"https://github.com/dgilling","imageURL":"https://github.com/dgilling.png","key":"dgilling","page":null},"francoischalifour":{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},"hmil":{"name":"Hadrien Milano","alias":"hmil","url":"https://github.com/hmil","imageURL":"https://github.com/hmil.png","key":"hmil","page":null},"LoicPoullain":{"name":"Lo\xefc Poullain","alias":"LoicPoullain","url":"https://github.com/LoicPoullain","imageURL":"https://github.com/LoicPoullain.png","key":"LoicPoullain","page":null},"matijaSos":{"name":"Matija Sosic","alias":"matijaSos","url":"https://github.com/matijaSos","imageURL":"https://github.com/matijaSos.png","key":"matijaSos","page":null},"mpsq":{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},"Romstar":{"name":"Rami","alias":"Romstar","url":"https://github.com/Romstar","imageURL":"https://github.com/Romstar.png","key":"Romstar","page":null},"sarthakkundra":{"name":"Sarthak kundra","alias":"sarthakkundra","url":"https://github.com/sarthakkundra","imageURL":"https://github.com/sarthakkundra.png","key":"sarthakkundra","page":null},"sivaraam":{"name":"Kaartic Sivaraam","alias":"sivaraam","url":"https://github.com/sivaraam","imageURL":"https://github.com/sivaraam.png","key":"sivaraam","page":null},"Varshit07":{"name":"Varshit Shah","alias":"Varshit07","url":"https://github.com/Varshit07","imageURL":"https://github.com/Varshit07.png","key":"Varshit07","page":null},"woodrufs":{"name":"Stephen Woodruff","alias":"woodrufs","url":"https://github.com/woodrufs","imageURL":"https://github.com/woodrufs.png","key":"woodrufs","page":null},"arcanis":{"name":"Ma\xebl Nison","alias":"arcanis","url":"https://github.com/arcanis","imageURL":"https://github.com/arcanis.png","key":"arcanis","page":null},"camiluc":{"name":"camiluc","alias":"camiluc","url":"https://github.com/camiluc","imageURL":"https://github.com/camiluc.png","key":"camiluc","page":null},"AmyrAhmady":{"name":"iAmir","alias":"AmyrAhmady","url":"https://github.com/AmyrAhmady","imageURL":"https://github.com/AmyrAhmady.png","key":"AmyrAhmady","page":null},"belemaire":{"name":"Beno\xeet Lemaire","alias":"belemaire","url":"https://github.com/belemaire","imageURL":"https://github.com/belemaire.png","key":"belemaire","page":null},"davidjgoss":{"name":"David Goss","alias":"davidjgoss","url":"https://github.com/davidjgoss","imageURL":"https://github.com/davidjgoss.png","key":"davidjgoss","page":null},"egbobright":{"name":"Bright Egbo","alias":"egbobright","url":"https://github.com/egbobright","imageURL":"https://github.com/egbobright.png","key":"egbobright","page":null},"haivp3010":{"name":"Hai","alias":"haivp3010","url":"https://github.com/haivp3010","imageURL":"https://github.com/haivp3010.png","key":"haivp3010","page":null},"hong4rc":{"name":"Anh Hong","alias":"hong4rc","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":"hong4rc","page":null},"jcs98":{"name":"Jainam Chirag Shah","alias":"jcs98","url":"https://github.com/jcs98","imageURL":"https://github.com/jcs98.png","key":"jcs98","page":null},"ka1bi4":{"name":"Roman Bug","alias":"ka1bi4","url":"https://github.com/ka1bi4","imageURL":"https://github.com/ka1bi4.png","key":"ka1bi4","page":null},"kenve":{"name":"kenve","alias":"kenve","url":"https://github.com/kenve","imageURL":"https://github.com/kenve.png","key":"kenve","page":null},"nategiraudeau":{"name":"Nate Giraudeau","alias":"nategiraudeau","url":"https://github.com/nategiraudeau","imageURL":"https://github.com/nategiraudeau.png","key":"nategiraudeau","page":null},"ndom91":{"name":"Nico Domino","alias":"ndom91","url":"https://github.com/ndom91","imageURL":"https://github.com/ndom91.png","key":"ndom91","page":null},"rarkins":{"name":"Rhys Arkins","alias":"rarkins","url":"https://github.com/rarkins","imageURL":"https://github.com/rarkins.png","key":"rarkins","page":null},"sigewuzhere":{"name":"Gergely Sinka","alias":"sigewuzhere","url":"https://github.com/sigewuzhere","imageURL":"https://github.com/sigewuzhere.png","key":"sigewuzhere","page":null},"smcelhinney":{"name":"Stephen McElhinney","alias":"smcelhinney","url":"https://github.com/smcelhinney","imageURL":"https://github.com/smcelhinney.png","key":"smcelhinney","page":null},"ThakurKarthik":{"name":"Thakur Karthik","alias":"ThakurKarthik","url":"https://github.com/ThakurKarthik","imageURL":"https://github.com/ThakurKarthik.png","key":"ThakurKarthik","page":null},"vanbasten17":{"name":"Marc Rabat Pla","alias":"vanbasten17","url":"https://github.com/vanbasten17","imageURL":"https://github.com/vanbasten17.png","key":"vanbasten17","page":null},"weareoutman":{"name":"Shenwei Wang","alias":"weareoutman","url":"https://github.com/weareoutman","imageURL":"https://github.com/weareoutman.png","key":"weareoutman","page":null},"ylemkimon":{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null},"aakhtar3":{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},"abhishektiwari":{"name":"Abhishek Tiwari","alias":"abhishektiwari","url":"https://github.com/abhishektiwari","imageURL":"https://github.com/abhishektiwari.png","key":"abhishektiwari","page":null},"fanny":{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},"honlyHuang":{"name":"honlyHuang","alias":"honlyHuang","url":"https://github.com/honlyHuang","imageURL":"https://github.com/honlyHuang.png","key":"honlyHuang","page":null},"imskr":{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},"jagracey":{"name":"John Gracey","alias":"jagracey","url":"https://github.com/jagracey","imageURL":"https://github.com/jagracey.png","key":"jagracey","page":null},"russtaylor":{"name":"Russ Taylor","alias":"russtaylor","url":"https://github.com/russtaylor","imageURL":"https://github.com/russtaylor.png","key":"russtaylor","page":null},"saintmalik":{"name":"SaintMalik","alias":"saintmalik","url":"https://github.com/saintmalik","imageURL":"https://github.com/saintmalik.png","key":"saintmalik","page":null},"shubhamzanwar":{"name":"Shubham Zanwar","alias":"shubhamzanwar","url":"https://github.com/shubhamzanwar","imageURL":"https://github.com/shubhamzanwar.png","key":"shubhamzanwar","page":null},"UmairKamran":{"name":"Umair Kamran","alias":"UmairKamran","url":"https://github.com/UmairKamran","imageURL":"https://github.com/UmairKamran.png","key":"UmairKamran","page":null},"utkarsh867":{"name":"Utkarsh Goel","alias":"utkarsh867","url":"https://github.com/utkarsh867","imageURL":"https://github.com/utkarsh867.png","key":"utkarsh867","page":null},"abadon7":{"name":"Henry V\xe9lez","alias":"abadon7","url":"https://github.com/abadon7","imageURL":"https://github.com/abadon7.png","key":"abadon7","page":null},"anru":{"name":"Andrey Rublev","alias":"anru","url":"https://github.com/anru","imageURL":"https://github.com/anru.png","key":"anru","page":null},"ayshiff":{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},"jeremyhager":{"name":"Jeremy Hager","alias":"jeremyhager","url":"https://github.com/jeremyhager","imageURL":"https://github.com/jeremyhager.png","key":"jeremyhager","page":null},"muskanvk":{"name":"Muskan Kumar","alias":"muskanvk","url":"https://github.com/muskanvk","imageURL":"https://github.com/muskanvk.png","key":"muskanvk","page":null},"timgates42":{"name":"Tim Gates","alias":"timgates42","url":"https://github.com/timgates42","imageURL":"https://github.com/timgates42.png","key":"timgates42","page":null},"ashscodes":{"name":"Ash","alias":"ashscodes","url":"https://github.com/ashscodes","imageURL":"https://github.com/ashscodes.png","key":"ashscodes","page":null},"josephMG":{"name":"josephMG","alias":"josephMG","url":"https://github.com/josephMG","imageURL":"https://github.com/josephMG.png","key":"josephMG","page":null},"rutikwankhade":{"name":"Rutik Wankhade","alias":"rutikwankhade","url":"https://github.com/rutikwankhade","imageURL":"https://github.com/rutikwankhade.png","key":"rutikwankhade","page":null},"samsisle":{"name":"Sam Ko","alias":"samsisle","url":"https://github.com/samsisle","imageURL":"https://github.com/samsisle.png","key":"samsisle","page":null},"adinaja":{"name":"adinaja","alias":"adinaja","url":"https://github.com/adinaja","imageURL":"https://github.com/adinaja.png","key":"adinaja","page":null},"ajifrank75":{"name":"Franklyn Chisom","alias":"ajifrank75","url":"https://github.com/ajifrank75","imageURL":"https://github.com/ajifrank75.png","key":"ajifrank75","page":null},"Ako92":{"name":"Ali Hosseini","alias":"Ako92","url":"https://github.com/Ako92","imageURL":"https://github.com/Ako92.png","key":"Ako92","page":null},"amy-lei":{"name":"Amy Lei","alias":"amy-lei","url":"https://github.com/amy-lei","imageURL":"https://github.com/amy-lei.png","key":"amy-lei","page":null},"anshulrgoyal":{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},"arcvats":{"name":"Archit","alias":"arcvats","url":"https://github.com/arcvats","imageURL":"https://github.com/arcvats.png","key":"arcvats","page":null},"arthur-flam":{"name":"Arthur Flam","alias":"arthur-flam","url":"https://github.com/arthur-flam","imageURL":"https://github.com/arthur-flam.png","key":"arthur-flam","page":null},"BogdanDor":{"name":"Bogdan Doroschenko","alias":"BogdanDor","url":"https://github.com/BogdanDor","imageURL":"https://github.com/BogdanDor.png","key":"BogdanDor","page":null},"boosh511":{"name":"alex busnelli","alias":"boosh511","url":"https://github.com/boosh511","imageURL":"https://github.com/boosh511.png","key":"boosh511","page":null},"Danon":{"name":"Daniel Wilkowski","alias":"Danon","url":"https://github.com/Danon","imageURL":"https://github.com/Danon.png","key":"Danon","page":null},"Drewbi":{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},"dschaller":{"name":"Derek","alias":"dschaller","url":"https://github.com/dschaller","imageURL":"https://github.com/dschaller.png","key":"dschaller","page":null},"FocalChord":{"name":"Nisarag","alias":"FocalChord","url":"https://github.com/FocalChord","imageURL":"https://github.com/FocalChord.png","key":"FocalChord","page":null},"govardhan-srinivas":{"name":"Govardhan Srinivas","alias":"govardhan-srinivas","url":"https://github.com/govardhan-srinivas","imageURL":"https://github.com/govardhan-srinivas.png","key":"govardhan-srinivas","page":null},"hsluoyz":{"name":"Yang Luo","alias":"hsluoyz","url":"https://github.com/hsluoyz","imageURL":"https://github.com/hsluoyz.png","key":"hsluoyz","page":null},"JeanMarcSaad":{"name":"Jean-Marc Saad","alias":"JeanMarcSaad","url":"https://github.com/JeanMarcSaad","imageURL":"https://github.com/JeanMarcSaad.png","key":"JeanMarcSaad","page":null},"JohnnyCrazy":{"name":"Jonas Dellinger","alias":"JohnnyCrazy","url":"https://github.com/JohnnyCrazy","imageURL":"https://github.com/JohnnyCrazy.png","key":"JohnnyCrazy","page":null},"Jonathannsegal":{"name":"Jonathan","alias":"Jonathannsegal","url":"https://github.com/Jonathannsegal","imageURL":"https://github.com/Jonathannsegal.png","key":"Jonathannsegal","page":null},"lebogangolifant":{"name":"lebogang Olifant","alias":"lebogangolifant","url":"https://github.com/lebogangolifant","imageURL":"https://github.com/lebogangolifant.png","key":"lebogangolifant","page":null},"leoigel":{"name":"leoigel","alias":"leoigel","url":"https://github.com/leoigel","imageURL":"https://github.com/leoigel.png","key":"leoigel","page":null},"mecm1993":{"name":"Manuel Cepeda","alias":"mecm1993","url":"https://github.com/mecm1993","imageURL":"https://github.com/mecm1993.png","key":"mecm1993","page":null},"MirzayevFarid":{"name":"Mirzayev Farid","alias":"MirzayevFarid","url":"https://github.com/MirzayevFarid","imageURL":"https://github.com/MirzayevFarid.png","key":"MirzayevFarid","page":null},"nebrelbug":{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},"olawanlejoel":{"name":"Olawanle Joel","alias":"olawanlejoel","url":"https://github.com/olawanlejoel","imageURL":"https://github.com/olawanlejoel.png","key":"olawanlejoel","page":null},"orta":{"name":"Orta Therox","alias":"orta","url":"https://github.com/orta","imageURL":"https://github.com/orta.png","key":"orta","page":null},"shalinikumari50":{"name":"shalinikumari50","alias":"shalinikumari50","url":"https://github.com/shalinikumari50","imageURL":"https://github.com/shalinikumari50.png","key":"shalinikumari50","page":null},"Souravdey777":{"name":"Sourav Dey","alias":"Souravdey777","url":"https://github.com/Souravdey777","imageURL":"https://github.com/Souravdey777.png","key":"Souravdey777","page":null},"thehanimo":{"name":"Hani Mohammed","alias":"thehanimo","url":"https://github.com/thehanimo","imageURL":"https://github.com/thehanimo.png","key":"thehanimo","page":null},"tolunayakbulut":{"name":"Tolunay Akbulut","alias":"tolunayakbulut","url":"https://github.com/tolunayakbulut","imageURL":"https://github.com/tolunayakbulut.png","key":"tolunayakbulut","page":null},"Vinnl":{"name":"Vincent","alias":"Vinnl","url":"https://github.com/Vinnl","imageURL":"https://github.com/Vinnl.png","key":"Vinnl","page":null},"BuckyMaler":{"name":"Bucky Maler","alias":"BuckyMaler","url":"https://github.com/BuckyMaler","imageURL":"https://github.com/BuckyMaler.png","key":"BuckyMaler","page":null},"mdfaizan7":{"name":"Faizan","alias":"mdfaizan7","url":"https://github.com/mdfaizan7","imageURL":"https://github.com/mdfaizan7.png","key":"mdfaizan7","page":null},"hobadams":{"name":"Hob Adams","alias":"hobadams","url":"https://github.com/hobadams","imageURL":"https://github.com/hobadams.png","key":"hobadams","page":null},"aladin002dz":{"name":"Mahfoudh Arous","alias":"aladin002dz","url":"https://github.com/aladin002dz","imageURL":"https://github.com/aladin002dz.png","key":"aladin002dz","page":null},"aldeed":{"name":"Eric Dobbertin","alias":"aldeed","url":"https://github.com/aldeed","imageURL":"https://github.com/aldeed.png","key":"aldeed","page":null},"amirulahmad":{"name":"Amirul Ahmad","alias":"amirulahmad","url":"https://github.com/amirulahmad","imageURL":"https://github.com/amirulahmad.png","key":"amirulahmad","page":null},"ayan-b":{"name":"Ayan Banerjee","alias":"ayan-b","url":"https://github.com/ayan-b","imageURL":"https://github.com/ayan-b.png","key":"ayan-b","page":null},"codemonkey800":{"name":"Jeremy Asuncion","alias":"codemonkey800","url":"https://github.com/codemonkey800","imageURL":"https://github.com/codemonkey800.png","key":"codemonkey800","page":null},"danielhochman":{"name":"Daniel Hochman","alias":"danielhochman","url":"https://github.com/danielhochman","imageURL":"https://github.com/danielhochman.png","key":"danielhochman","page":null},"dpkg":{"name":"Deepak Giri","alias":"dpkg","url":"https://github.com/dpkg","imageURL":"https://github.com/dpkg.png","key":"dpkg","page":null},"ehsanjso":{"name":"ehsan jso","alias":"ehsanjso","url":"https://github.com/ehsanjso","imageURL":"https://github.com/ehsanjso.png","key":"ehsanjso","page":null},"eKhattak":{"name":"Arsalan Khattak","alias":"eKhattak","url":"https://github.com/eKhattak","imageURL":"https://github.com/eKhattak.png","key":"eKhattak","page":null},"hi-matbub":{"name":"matbub","alias":"hi-matbub","url":"https://github.com/hi-matbub","imageURL":"https://github.com/hi-matbub.png","key":"hi-matbub","page":null},"jordanliu":{"name":"Jordan Liu","alias":"jordanliu","url":"https://github.com/jordanliu","imageURL":"https://github.com/jordanliu.png","key":"jordanliu","page":null},"pcowgill":{"name":"Paul Cowgill","alias":"pcowgill","url":"https://github.com/pcowgill","imageURL":"https://github.com/pcowgill.png","key":"pcowgill","page":null},"svtfrida":{"name":"Frida Hjelm","alias":"svtfrida","url":"https://github.com/svtfrida","imageURL":"https://github.com/svtfrida.png","key":"svtfrida","page":null},"taylorallen0913":{"name":"Taylor Allen","alias":"taylorallen0913","url":"https://github.com/taylorallen0913","imageURL":"https://github.com/taylorallen0913.png","key":"taylorallen0913","page":null},"xtellurian":{"name":"Rian Finnegan","alias":"xtellurian","url":"https://github.com/xtellurian","imageURL":"https://github.com/xtellurian.png","key":"xtellurian","page":null},"belokonm":{"name":"belokonm","alias":"belokonm","url":"https://github.com/belokonm","imageURL":"https://github.com/belokonm.png","key":"belokonm","page":null},"guillaumejacquart":{"name":"Guillaume Jacquart","alias":"guillaumejacquart","url":"https://github.com/guillaumejacquart","imageURL":"https://github.com/guillaumejacquart.png","key":"guillaumejacquart","page":null},"jsjoeio":{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},"Nishikoh":{"name":"Koki Nishihara","alias":"Nishikoh","url":"https://github.com/Nishikoh","imageURL":"https://github.com/Nishikoh.png","key":"Nishikoh","page":null},"pglezen":{"name":"Paul Glezen","alias":"pglezen","url":"https://github.com/pglezen","imageURL":"https://github.com/pglezen.png","key":"pglezen","page":null},"tetunori":{"name":"tetunori","alias":"tetunori","url":"https://github.com/tetunori","imageURL":"https://github.com/tetunori.png","key":"tetunori","page":null},"TomBrien":{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},"jmcshane":{"name":"James McShane","alias":"jmcshane","url":"https://github.com/jmcshane","imageURL":"https://github.com/jmcshane.png","key":"jmcshane","page":null},"kasperp":{"name":"Kasper B\xf8gebjerg Pedersen","alias":"kasperp","url":"https://github.com/kasperp","imageURL":"https://github.com/kasperp.png","key":"kasperp","page":null},"mrmuhammadali":{"name":"Muhammad Ali","alias":"mrmuhammadali","url":"https://github.com/mrmuhammadali","imageURL":"https://github.com/mrmuhammadali.png","key":"mrmuhammadali","page":null},"piotros":{"name":"Piotr Baran","alias":"piotros","url":"https://github.com/piotros","imageURL":"https://github.com/piotros.png","key":"piotros","page":null},"s-pace":{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},"iamrajiv":{"name":"Rajiv Singh","alias":"iamrajiv","url":"https://github.com/iamrajiv","imageURL":"https://github.com/iamrajiv.png","key":"iamrajiv","page":null},"jcomack":{"name":"Jimmy","alias":"jcomack","url":"https://github.com/jcomack","imageURL":"https://github.com/jcomack.png","key":"jcomack","page":null},"jdeniau":{"name":"Julien Deniau","alias":"jdeniau","url":"https://github.com/jdeniau","imageURL":"https://github.com/jdeniau.png","key":"jdeniau","page":null},"jonnynabors":{"name":"Jonny Nabors","alias":"jonnynabors","url":"https://github.com/jonnynabors","imageURL":"https://github.com/jonnynabors.png","key":"jonnynabors","page":null},"marcosvega91":{"name":"Marco Moretti","alias":"marcosvega91","url":"https://github.com/marcosvega91","imageURL":"https://github.com/marcosvega91.png","key":"marcosvega91","page":null},"AnayoOleru":{"name":"Anayo Oleru","alias":"AnayoOleru","url":"https://github.com/AnayoOleru","imageURL":"https://github.com/AnayoOleru.png","key":"AnayoOleru","page":null},"jaylees14":{"name":"Jay Lees","alias":"jaylees14","url":"https://github.com/jaylees14","imageURL":"https://github.com/jaylees14.png","key":"jaylees14","page":null},"JoseRenan":{"name":"Jos\xe9 Renan","alias":"JoseRenan","url":"https://github.com/JoseRenan","imageURL":"https://github.com/JoseRenan.png","key":"JoseRenan","page":null},"kamilkisiela":{"name":"Kamil Kisiela","alias":"kamilkisiela","url":"https://github.com/kamilkisiela","imageURL":"https://github.com/kamilkisiela.png","key":"kamilkisiela","page":null},"kripod":{"name":"Krist\xf3f Poduszl\xf3","alias":"kripod","url":"https://github.com/kripod","imageURL":"https://github.com/kripod.png","key":"kripod","page":null},"Noah-Silvera":{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},"watzon":{"name":"Chris Watson","alias":"watzon","url":"https://github.com/watzon","imageURL":"https://github.com/watzon.png","key":"watzon","page":null},"yatki":{"name":"Mehmet Yatk\u0131","alias":"yatki","url":"https://github.com/yatki","imageURL":"https://github.com/yatki.png","key":"yatki","page":null},"cangencer":{"name":"Can Gencer","alias":"cangencer","url":"https://github.com/cangencer","imageURL":"https://github.com/cangencer.png","key":"cangencer","page":null},"iWun":{"name":"Richard Chan","alias":"iWun","url":"https://github.com/iWun","imageURL":"https://github.com/iWun.png","key":"iWun","page":null},"38elements":{"name":"38elements","alias":"38elements","url":"https://github.com/38elements","imageURL":"https://github.com/38elements.png","key":"38elements","page":null},"bravo-kernel":{"name":"bravo-kernel","alias":"bravo-kernel","url":"https://github.com/bravo-kernel","imageURL":"https://github.com/bravo-kernel.png","key":"bravo-kernel","page":null},"elviswolcott":{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},"fakela":{"name":"Favour Kelvin","alias":"fakela","url":"https://github.com/fakela","imageURL":"https://github.com/fakela.png","key":"fakela","page":null},"GermaVinsmoke":{"name":"GermaVinsmoke","alias":"GermaVinsmoke","url":"https://github.com/GermaVinsmoke","imageURL":"https://github.com/GermaVinsmoke.png","key":"GermaVinsmoke","page":null},"iamkun":{"name":"iamkun","alias":"iamkun","url":"https://github.com/iamkun","imageURL":"https://github.com/iamkun.png","key":"iamkun","page":null},"jeffersonlicet":{"name":"Jefferson Licet","alias":"jeffersonlicet","url":"https://github.com/jeffersonlicet","imageURL":"https://github.com/jeffersonlicet.png","key":"jeffersonlicet","page":null},"KohheePeace":{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},"lukecollier":{"name":"Luke Collier","alias":"lukecollier","url":"https://github.com/lukecollier","imageURL":"https://github.com/lukecollier.png","key":"lukecollier","page":null},"mohrash92":{"name":"mohrash92","alias":"mohrash92","url":"https://github.com/mohrash92","imageURL":"https://github.com/mohrash92.png","key":"mohrash92","page":null},"nisarhassan12":{"name":"Nisar Hassan Naqvi","alias":"nisarhassan12","url":"https://github.com/nisarhassan12","imageURL":"https://github.com/nisarhassan12.png","key":"nisarhassan12","page":null},"paularmstrong":{"name":"Paul Armstrong","alias":"paularmstrong","url":"https://github.com/paularmstrong","imageURL":"https://github.com/paularmstrong.png","key":"paularmstrong","page":null},"phoqe":{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},"rlamana":{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},"ZachJW34":{"name":"ZachJW34","alias":"ZachJW34","url":"https://github.com/ZachJW34","imageURL":"https://github.com/ZachJW34.png","key":"ZachJW34","page":null},"amilajack":{"name":"Amila Welihinda","alias":"amilajack","url":"https://github.com/amilajack","imageURL":"https://github.com/amilajack.png","key":"amilajack","page":null},"balloob":{"name":"Paulus Schoutsen","alias":"balloob","url":"https://github.com/balloob","imageURL":"https://github.com/balloob.png","key":"balloob","page":null},"deniaz":{"name":"Robert","alias":"deniaz","url":"https://github.com/deniaz","imageURL":"https://github.com/deniaz.png","key":"deniaz","page":null},"hassanfarid":{"name":"Hassan Farid","alias":"hassanfarid","url":"https://github.com/hassanfarid","imageURL":"https://github.com/hassanfarid.png","key":"hassanfarid","page":null},"jartuso":{"name":"jartuso","alias":"jartuso","url":"https://github.com/jartuso","imageURL":"https://github.com/jartuso.png","key":"jartuso","page":null},"mohamedsgap":{"name":"Mohamed Abdel Nasser","alias":"mohamedsgap","url":"https://github.com/mohamedsgap","imageURL":"https://github.com/mohamedsgap.png","key":"mohamedsgap","page":null},"scottilee":{"name":"Scott Lee","alias":"scottilee","url":"https://github.com/scottilee","imageURL":"https://github.com/scottilee.png","key":"scottilee","page":null},"Zhencha0Cai":{"name":"Zhenchao Cai","alias":"Zhencha0Cai","url":"https://github.com/Zhencha0Cai","imageURL":"https://github.com/Zhencha0Cai.png","key":"Zhencha0Cai","page":null},"awalias":{"name":"awalias","alias":"awalias","url":"https://github.com/awalias","imageURL":"https://github.com/awalias.png","key":"awalias","page":null},"edwandr":{"name":"Elie Dutheil","alias":"edwandr","url":"https://github.com/edwandr","imageURL":"https://github.com/edwandr.png","key":"edwandr","page":null},"erubi":{"name":"Evan Rubinton","alias":"erubi","url":"https://github.com/erubi","imageURL":"https://github.com/erubi.png","key":"erubi","page":null},"galhavivi":{"name":"Gal Havivi","alias":"galhavivi","url":"https://github.com/galhavivi","imageURL":"https://github.com/galhavivi.png","key":"galhavivi","page":null},"Jeffail":{"name":"Ashley Jeffs","alias":"Jeffail","url":"https://github.com/Jeffail","imageURL":"https://github.com/Jeffail.png","key":"Jeffail","page":null},"jjwill":{"name":"Joshua Williams","alias":"jjwill","url":"https://github.com/jjwill","imageURL":"https://github.com/jjwill.png","key":"jjwill","page":null},"jonathanrdelgado":{"name":"Jonathan Delgado","alias":"jonathanrdelgado","url":"https://github.com/jonathanrdelgado","imageURL":"https://github.com/jonathanrdelgado.png","key":"jonathanrdelgado","page":null},"mterrel":{"name":"Mark Terrel","alias":"mterrel","url":"https://github.com/mterrel","imageURL":"https://github.com/mterrel.png","key":"mterrel","page":null},"OndrejNepozitek":{"name":"Ond\u0159ej Nepo\u017eitek","alias":"OndrejNepozitek","url":"https://github.com/OndrejNepozitek","imageURL":"https://github.com/OndrejNepozitek.png","key":"OndrejNepozitek","page":null},"sdowding":{"name":"Scott Dowding","alias":"sdowding","url":"https://github.com/sdowding","imageURL":"https://github.com/sdowding.png","key":"sdowding","page":null},"trustyoo86":{"name":"Hanseung Yoo","alias":"trustyoo86","url":"https://github.com/trustyoo86","imageURL":"https://github.com/trustyoo86.png","key":"trustyoo86","page":null},"wgao19":{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null},"endiliey":{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},"janko":{"name":"Janko Marohni\u0107","alias":"janko","url":"https://github.com/janko","imageURL":"https://github.com/janko.png","key":"janko","page":null},"nickmccurdy":{"name":"Nick McCurdy","alias":"nickmccurdy","url":"https://github.com/nickmccurdy","imageURL":"https://github.com/nickmccurdy.png","key":"nickmccurdy","page":null},"TransmissionsDev":{"name":"t11s","alias":"TransmissionsDev","url":"https://github.com/TransmissionsDev","imageURL":"https://github.com/TransmissionsDev.png","key":"TransmissionsDev","page":null},"FeynmanDNA":{"name":"KYY","alias":"FeynmanDNA","url":"https://github.com/FeynmanDNA","imageURL":"https://github.com/FeynmanDNA.png","key":"FeynmanDNA","page":null},"qshiwu":{"name":"kaichu","alias":"qshiwu","url":"https://github.com/qshiwu","imageURL":"https://github.com/qshiwu.png","key":"qshiwu","page":null},"shivangna":{"name":"Shivangna Kaistha","alias":"shivangna","url":"https://github.com/shivangna","imageURL":"https://github.com/shivangna.png","key":"shivangna","page":null},"binarylogic":{"name":"Binary Logic","alias":"binarylogic","url":"https://github.com/binarylogic","imageURL":"https://github.com/binarylogic.png","key":"binarylogic","page":null},"gimdongwoo":{"name":"Dongwoo Gim","alias":"gimdongwoo","url":"https://github.com/gimdongwoo","imageURL":"https://github.com/gimdongwoo.png","key":"gimdongwoo","page":null},"ericcarboni":{"name":"Eric Carboni","alias":"ericcarboni","url":"https://github.com/ericcarboni","imageURL":"https://github.com/ericcarboni.png","key":"ericcarboni","page":null},"jamiedavenport":{"name":"Jamie Davenport","alias":"jamiedavenport","url":"https://github.com/jamiedavenport","imageURL":"https://github.com/jamiedavenport.png","key":"jamiedavenport","page":null},"kenning":{"name":"Nick McCormick","alias":"kenning","url":"https://github.com/kenning","imageURL":"https://github.com/kenning.png","key":"kenning","page":null},"vinnytheviking":{"name":"Vincent van der Walt","alias":"vinnytheviking","url":"https://github.com/vinnytheviking","imageURL":"https://github.com/vinnytheviking.png","key":"vinnytheviking","page":null}}}},"docusaurus-plugin-ideal-image":{},"docusaurus-theme-mermaid":{},"feature-requests-plugin":{},"client-module-test-plugin":{},"docusaurus-theme-live-codeblock":{},"swizzle-theme-tests":{},"docusaurus-bootstrap-plugin":{},"docusaurus-mdx-fallback-plugin":{}}}')}}]); \ No newline at end of file diff --git a/assets/js/3c0a97de.bc4c0988.js b/assets/js/3c0a97de.bc4c0988.js new file mode 100644 index 000000000000..bdd6bab063bf --- /dev/null +++ b/assets/js/3c0a97de.bc4c0988.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35528],{13950:e=>{e.exports=JSON.parse('{"allContent":{"docusaurus-plugin-content-docs":{"default":{"loadedVersions":[{"versionName":"current","label":"Canary \ud83d\udea7","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/docs","tagsPath":"/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/sidebars.ts","contentPath":"/home/runner/work/docusaurus/docusaurus/website/docs","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs/current","docs":[{"id":"advanced/architecture","title":"Architecture","description":"How Docusaurus works to build your app","source":"@site/docs/advanced/architecture.mdx","sourceDirName":"advanced","slug":"/advanced/architecture","permalink":"/docs/advanced/architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/architecture.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"How Docusaurus works to build your app"},"sidebar":"docs","previous":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"},"next":{"title":"Plugins","permalink":"/docs/advanced/plugins"}},{"id":"advanced/client","title":"Client architecture","description":"How the Docusaurus client is structured","source":"@site/docs/advanced/client.mdx","sourceDirName":"advanced","slug":"/advanced/client","permalink":"/docs/advanced/client","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"How the Docusaurus client is structured"},"sidebar":"docs","previous":{"title":"Static site generation","permalink":"/docs/advanced/ssg"},"next":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"}},{"id":"advanced/index","title":"Advanced Tutorials","description":"This section is not going to be very structured, but we will cover the following topics:","source":"@site/docs/advanced/index.mdx","sourceDirName":"advanced","slug":"/advanced/","permalink":"/docs/advanced/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"docs","previous":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"},"next":{"title":"Architecture","permalink":"/docs/advanced/architecture"}},{"id":"advanced/plugins","title":"Plugins","description":"Plugins are the building blocks of features in a Docusaurus site. Each plugin handles its own individual feature. Plugins may work and be distributed as part of a bundle via presets.","source":"@site/docs/advanced/plugins.mdx","sourceDirName":"advanced","slug":"/advanced/plugins","permalink":"/docs/advanced/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Architecture","permalink":"/docs/advanced/architecture"},"next":{"title":"Routing","permalink":"/docs/advanced/routing"}},{"id":"advanced/routing","title":"Routing","description":"Docusaurus\' routing system follows single-page application conventions: one route, one component.","source":"@site/docs/advanced/routing.mdx","sourceDirName":"advanced","slug":"/advanced/routing","permalink":"/docs/advanced/routing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/routing.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Docusaurus\' routing system follows single-page application conventions: one route, one component."},"sidebar":"docs","previous":{"title":"Plugins","permalink":"/docs/advanced/plugins"},"next":{"title":"Static site generation","permalink":"/docs/advanced/ssg"}},{"id":"advanced/ssg","title":"Static site generation (SSG)","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.","source":"@site/docs/advanced/ssg.mdx","sourceDirName":"advanced","slug":"/advanced/ssg","permalink":"/docs/advanced/ssg","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"sidebar_label":"Static site generation","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},"sidebar":"docs","previous":{"title":"Routing","permalink":"/docs/advanced/routing"},"next":{"title":"Client architecture","permalink":"/docs/advanced/client"}},{"id":"api/docusaurus.config.js","title":"docusaurus.config.js","description":"API reference for Docusaurus configuration file.","source":"@site/docs/api/docusaurus.config.js.mdx","sourceDirName":"api","slug":"/api/docusaurus-config","permalink":"/docs/api/docusaurus-config","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/docusaurus.config.js.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"description":"API reference for Docusaurus configuration file.","slug":"/api/docusaurus-config"},"sidebar":"api","previous":{"title":"Client API","permalink":"/docs/docusaurus-core"},"next":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"}},{"id":"api/misc/create-docusaurus","title":"\ud83d\udce6 create-docusaurus","description":"A scaffolding utility to help you instantly set up a functional Docusaurus app.","source":"@site/docs/api/misc/create-docusaurus.mdx","sourceDirName":"api/misc","slug":"/api/misc/create-docusaurus","permalink":"/docs/api/misc/create-docusaurus","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"slug":"/api/misc/create-docusaurus"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"},"next":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"}},{"id":"api/misc/eslint-plugin/no-html-links","title":"no-html-links","description":"Ensure that the Docusaurus ` component is used instead of ` tags.","source":"@site/docs/api/misc/eslint-plugin/no-html-links.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-html-links.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links"},"sidebar":"api","previous":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"},"next":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"}},{"id":"api/misc/eslint-plugin/no-untranslated-text","title":"no-untranslated-text","description":"Enforce text labels in JSX to be wrapped by translate calls.","source":"@site/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"sidebar":"api","previous":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"},"next":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"}},{"id":"api/misc/eslint-plugin/prefer-docusaurus-heading","title":"prefer-docusaurus-heading","description":"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.","source":"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"sidebar":"api","previous":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"next":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/misc/eslint-plugin/README","title":"\ud83d\udce6 eslint-plugin","description":"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.","source":"@site/docs/api/misc/eslint-plugin/README.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/misc/@docusaurus/eslint-plugin"},"sidebar":"api","previous":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"},"next":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},{"id":"api/misc/eslint-plugin/string-literal-i18n-messages","title":"string-literal-i18n-messages","description":"Enforce translate APIs to be called on plain text labels.","source":"@site/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"},"sidebar":"api","previous":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"next":{"title":"\ud83d\udce6 logger","permalink":"/docs/api/misc/@docusaurus/logger"}},{"id":"api/misc/logger/logger","title":"\ud83d\udce6 logger","description":"An encapsulated logger for semantically formatting console messages.","source":"@site/docs/api/misc/logger/logger.mdx","sourceDirName":"api/misc/logger","slug":"/api/misc/@docusaurus/logger","permalink":"/docs/api/misc/@docusaurus/logger","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/misc/@docusaurus/logger"},"sidebar":"api","previous":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/plugin-methods/extend-infrastructure","title":"Extending infrastructure","description":"Docusaurus has some infrastructure like hot reloading, CLI, and swizzling, that can be extended by external plugins.","source":"@site/docs/api/plugin-methods/extend-infrastructure.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/extend-infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/extend-infrastructure.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"api","previous":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"},"next":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"}},{"id":"api/plugin-methods/i18n-lifecycles","title":"I18n lifecycles","description":"Plugins use these lifecycles to load i18n-related data.","source":"@site/docs/api/plugin-methods/i18n-lifecycles.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/i18n-lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"api","previous":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"},"next":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"}},{"id":"api/plugin-methods/lifecycle-apis","title":"Lifecycle APIs","description":"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.","source":"@site/docs/api/plugin-methods/lifecycle-apis.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/lifecycle-apis","permalink":"/docs/api/plugin-methods/lifecycle-apis","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"},"next":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"}},{"id":"api/plugin-methods/README","title":"Plugin Method References","description":"This section is a work in progress. Anchor links or even URLs are not guaranteed to be stable.","source":"@site/docs/api/plugin-methods/README.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/","permalink":"/docs/api/plugin-methods/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"api","previous":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"},"next":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"}},{"id":"api/plugin-methods/static-methods","title":"Static methods","description":"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.","source":"@site/docs/api/plugin-methods/static-methods.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/static-methods","permalink":"/docs/api/plugin-methods/static-methods","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4},"sidebar":"api","previous":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"},"next":{"title":"Plugins overview","permalink":"/docs/api/plugins"}},{"id":"api/plugins/plugin-client-redirects","title":"\ud83d\udce6 plugin-client-redirects","description":"Docusaurus Plugin to generate client-side redirects.","source":"@site/docs/api/plugins/plugin-client-redirects.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/plugins/@docusaurus/plugin-client-redirects"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"},"next":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"}},{"id":"api/plugins/plugin-content-blog","title":"\ud83d\udce6 plugin-content-blog","description":"Provides the Blog feature and is the default blog plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-blog.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/plugins/@docusaurus/plugin-content-blog"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"},"next":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"}},{"id":"api/plugins/plugin-content-docs","title":"\ud83d\udce6 plugin-content-docs","description":"Provides the Docs functionality and is the default docs plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-docs.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/plugins/@docusaurus/plugin-content-docs"},"sidebar":"api","previous":{"title":"Plugins overview","permalink":"/docs/api/plugins"},"next":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"}},{"id":"api/plugins/plugin-content-pages","title":"\ud83d\udce6 plugin-content-pages","description":"The default pages plugin for Docusaurus. The classic template ships with this plugin with default configurations. This plugin provides creating pages functionality.","source":"@site/docs/api/plugins/plugin-content-pages.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/plugins/@docusaurus/plugin-content-pages"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"},"next":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"}},{"id":"api/plugins/plugin-debug","title":"\ud83d\udce6 plugin-debug","description":"The debug plugin will display useful debug information at http3000/docusaurus/debug.","source":"@site/docs/api/plugins/plugin-debug.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/plugins/@docusaurus/plugin-debug"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"},"next":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},{"id":"api/plugins/plugin-google-analytics","title":"\ud83d\udce6 plugin-google-analytics","description":"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.","source":"@site/docs/api/plugins/plugin-google-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":6,"frontMatter":{"sidebar_position":6,"slug":"/api/plugins/@docusaurus/plugin-google-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"},"next":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},{"id":"api/plugins/plugin-google-gtag","title":"\ud83d\udce6 plugin-google-gtag","description":"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.","source":"@site/docs/api/plugins/plugin-google-gtag.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":7,"frontMatter":{"sidebar_position":7,"slug":"/api/plugins/@docusaurus/plugin-google-gtag"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"},"next":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},{"id":"api/plugins/plugin-google-tag-manager","title":"\ud83d\udce6 plugin-google-tag-manager","description":"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.","source":"@site/docs/api/plugins/plugin-google-tag-manager.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-google-tag-manager"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"},"next":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},{"id":"api/plugins/plugin-ideal-image","title":"\ud83d\udce6 plugin-ideal-image","description":"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).","source":"@site/docs/api/plugins/plugin-ideal-image.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-ideal-image"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},"next":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"}},{"id":"api/plugins/plugin-pwa","title":"\ud83d\udce6 plugin-pwa","description":"Docusaurus Plugin to add PWA support using Workbox. This plugin generates a Service Worker in production build only, and allows you to create fully PWA-compliant documentation site with offline and installation support.","source":"@site/docs/api/plugins/plugin-pwa.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-pwa.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":9,"frontMatter":{"sidebar_position":9,"slug":"/api/plugins/@docusaurus/plugin-pwa"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"},"next":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"}},{"id":"api/plugins/plugin-sitemap","title":"\ud83d\udce6 plugin-sitemap","description":"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.","source":"@site/docs/api/plugins/plugin-sitemap.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":10,"frontMatter":{"sidebar_position":10,"slug":"/api/plugins/@docusaurus/plugin-sitemap"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"},"next":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},{"id":"api/plugins/plugin-vercel-analytics","title":"\ud83d\udce6 plugin-vercel-analytics","description":"Vercel Analytics provides comprehensive insights into your website\'s visitors, tracking top pages, referrers, and demographics like location, operating systems, and browser info.","source":"@site/docs/api/plugins/plugin-vercel-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-vercel-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":11,"frontMatter":{"sidebar_position":11,"slug":"/api/plugins/@docusaurus/plugin-vercel-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"},"next":{"title":"Themes overview","permalink":"/docs/api/themes"}},{"id":"api/plugins/plugins-overview","title":"Docusaurus plugins","description":"We provide official Docusaurus plugins.","source":"@site/docs/api/plugins/overview.mdx","sourceDirName":"api/plugins","slug":"/api/plugins","permalink":"/docs/api/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"plugins-overview","sidebar_label":"Plugins overview","slug":"/api/plugins"},"sidebar":"api","previous":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"},"next":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"}},{"id":"api/themes/theme-classic","title":"\ud83d\udce6 theme-classic","description":"The classic theme for Docusaurus.","source":"@site/docs/api/themes/theme-classic.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/themes/@docusaurus/theme-classic"},"sidebar":"api","previous":{"title":"Configuration","permalink":"/docs/api/themes/configuration"},"next":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"}},{"id":"api/themes/theme-configuration","title":"Theme configuration","description":"This configuration applies to all main themes.","source":"@site/docs/api/themes/theme-configuration.mdx","sourceDirName":"api/themes","slug":"/api/themes/configuration","permalink":"/docs/api/themes/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"sidebar_label":"Configuration","slug":"/api/themes/configuration","toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Themes overview","permalink":"/docs/api/themes"},"next":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"}},{"id":"api/themes/theme-live-codeblock","title":"\ud83d\udce6 theme-live-codeblock","description":"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.","source":"@site/docs/api/themes/theme-live-codeblock.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/themes/@docusaurus/theme-live-codeblock"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"},"next":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"}},{"id":"api/themes/theme-mermaid","title":"\ud83d\udce6 theme-mermaid","description":"This theme provides a @theme/Mermaid component that is powered by mermaid. You can read more on diagrams documentation.","source":"@site/docs/api/themes/theme-mermaid.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-mermaid.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/themes/@docusaurus/theme-mermaid"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"},"next":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"}},{"id":"api/themes/theme-search-algolia","title":"\ud83d\udce6 theme-search-algolia","description":"This theme provides a @theme/SearchBar component that integrates with Algolia DocSearch easily. Combined with @docusaurus/theme-classic, it provides a very easy search integration. You can read more on search documentation.","source":"@site/docs/api/themes/theme-search-algolia.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-search-algolia.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/themes/@docusaurus/theme-search-algolia"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"},"next":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"}},{"id":"api/themes/themes-overview","title":"Docusaurus themes","description":"We provide official Docusaurus themes.","source":"@site/docs/api/themes/overview.mdx","sourceDirName":"api/themes","slug":"/api/themes","permalink":"/docs/api/themes","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"themes-overview","sidebar_label":"Themes overview","slug":"/api/themes"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},"next":{"title":"Configuration","permalink":"/docs/api/themes/configuration"}},{"id":"blog","title":"Blog","description":"Deploy a full-featured blog in no time with Docusaurus.","source":"@site/docs/blog.mdx","sourceDirName":".","slug":"/blog","permalink":"/docs/blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/blog.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Deploy a full-featured blog in no time with Docusaurus."},"sidebar":"docs","previous":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"},"next":{"title":"Markdown Features","permalink":"/docs/markdown-features"}},{"id":"browser-support","title":"Browser support","description":"How to keep a reasonable bundle size while ensuring sufficient browser support.","source":"@site/docs/browser-support.mdx","sourceDirName":".","slug":"/browser-support","permalink":"/docs/browser-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"How to keep a reasonable bundle size while ensuring sufficient browser support."},"sidebar":"docs","previous":{"title":"Search","permalink":"/docs/search"},"next":{"title":"SEO","permalink":"/docs/seo"}},{"id":"cli","title":"CLI","description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website.","source":"@site/docs/cli.mdx","sourceDirName":".","slug":"/cli","permalink":"/docs/cli","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/cli.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website."},"sidebar":"api","next":{"title":"Client API","permalink":"/docs/docusaurus-core"}},{"id":"configuration","title":"Configuration","description":"Configuring your site\'s behavior through docusaurus.config.js and more.","source":"@site/docs/configuration.mdx","sourceDirName":".","slug":"/configuration","permalink":"/docs/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Configuring your site\'s behavior through docusaurus.config.js and more."},"sidebar":"docs","previous":{"title":"Installation","permalink":"/docs/installation"},"next":{"title":"Playground","permalink":"/docs/playground"}},{"id":"deployment","title":"Deployment","description":"Deploy your Docusaurus app for production on a range of static site hosting services.","source":"@site/docs/deployment.mdx","sourceDirName":".","slug":"/deployment","permalink":"/docs/deployment","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Deploy your Docusaurus app for production on a range of static site hosting services."},"sidebar":"docs","previous":{"title":"Using Plugins","permalink":"/docs/using-plugins"},"next":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"}},{"id":"docusaurus-core","title":"Docusaurus Client API","description":"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.","source":"@site/docs/docusaurus-core.mdx","sourceDirName":".","slug":"/docusaurus-core","permalink":"/docs/docusaurus-core","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"sidebar_label":"Client API"},"sidebar":"api","previous":{"title":"CLI","permalink":"/docs/cli"},"next":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"}},{"id":"guides/creating-pages","title":"Creating Pages","description":"In this section, we will learn about creating pages in Docusaurus.","source":"@site/docs/guides/creating-pages.mdx","sourceDirName":"guides","slug":"/creating-pages","permalink":"/docs/creating-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/creating-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/creating-pages","sidebar_label":"Pages"},"sidebar":"docs","previous":{"title":"Guides","permalink":"/docs/category/guides"},"next":{"title":"Introduction","permalink":"/docs/docs-introduction"}},{"id":"guides/docs/create-doc","title":"Create a doc","description":"Create a Markdown Document","source":"@site/docs/guides/docs/docs-create-doc.mdx","sourceDirName":"guides/docs","slug":"/create-doc","permalink":"/docs/create-doc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"create-doc","description":"Create a Markdown Document","slug":"/create-doc"},"sidebar":"docs","previous":{"title":"Introduction","permalink":"/docs/docs-introduction"},"next":{"title":"Sidebar","permalink":"/docs/sidebar"}},{"id":"guides/docs/introduction","title":"Docs Introduction","description":"The docs feature provides users with a way to organize Markdown files in a hierarchical format.","source":"@site/docs/guides/docs/docs-introduction.mdx","sourceDirName":"guides/docs","slug":"/docs-introduction","permalink":"/docs/docs-introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"introduction","sidebar_label":"Introduction","slug":"/docs-introduction"},"sidebar":"docs","previous":{"title":"Pages","permalink":"/docs/creating-pages"},"next":{"title":"Create a doc","permalink":"/docs/create-doc"}},{"id":"guides/docs/multi-instance","title":"Docs Multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","source":"@site/docs/guides/docs/docs-multi-instance.mdx","sourceDirName":"guides/docs","slug":"/docs-multi-instance","permalink":"/docs/docs-multi-instance","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","slug":"/docs-multi-instance"},"sidebar":"docs","previous":{"title":"Versioning","permalink":"/docs/versioning"},"next":{"title":"Blog","permalink":"/docs/blog"}},{"id":"guides/docs/sidebar/autogenerated","title":"Autogenerated","description":"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.","source":"@site/docs/guides/docs/sidebar/autogenerated.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/autogenerated","permalink":"/docs/sidebar/autogenerated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/sidebar/autogenerated"},"sidebar":"docs","previous":{"title":"Sidebar items","permalink":"/docs/sidebar/items"},"next":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"}},{"id":"guides/docs/sidebar/index","title":"Sidebar","description":"Creating a sidebar is useful to:","source":"@site/docs/guides/docs/sidebar/index.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar","permalink":"/docs/sidebar","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/sidebar"},"sidebar":"docs","previous":{"title":"Create a doc","permalink":"/docs/create-doc"},"next":{"title":"Sidebar items","permalink":"/docs/sidebar/items"}},{"id":"guides/docs/sidebar/items","title":"Sidebar items","description":"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.","source":"@site/docs/guides/docs/sidebar/items.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/items","permalink":"/docs/sidebar/items","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_max_heading_level":4,"slug":"/sidebar/items"},"sidebar":"docs","previous":{"title":"Sidebar","permalink":"/docs/sidebar"},"next":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"}},{"id":"guides/docs/sidebar/multiple-sidebars","title":"Using multiple sidebars","description":"You can create a sidebar for each set of Markdown files that you want to group together.","source":"@site/docs/guides/docs/sidebar/multiple-sidebars.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/multiple-sidebars","permalink":"/docs/sidebar/multiple-sidebars","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/multiple-sidebars.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/sidebar/multiple-sidebars"},"sidebar":"docs","previous":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"},"next":{"title":"Versioning","permalink":"/docs/versioning"}},{"id":"guides/docs/versioning","title":"Versioning","description":"You can use the versioning CLI to create a new documentation version based on the latest content in the docs directory. That specific set of documentation will then be preserved and accessible even as the documentation in the docs directory continues to evolve.","source":"@site/docs/guides/docs/versioning.mdx","sourceDirName":"guides/docs","slug":"/versioning","permalink":"/docs/versioning","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/versioning.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/versioning"},"sidebar":"docs","previous":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"},"next":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"}},{"id":"guides/markdown-features/admonitions","title":"Admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-admonitions.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/admonitions","permalink":"/docs/markdown-features/admonitions","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-admonitions.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","slug":"/markdown-features/admonitions"},"sidebar":"docs","previous":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"},"next":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"}},{"id":"guides/markdown-features/assets","title":"Assets","description":"Handling assets in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-assets.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/assets","permalink":"/docs/markdown-features/assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"assets","description":"Handling assets in Docusaurus Markdown","slug":"/markdown-features/assets"},"sidebar":"docs","previous":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"},"next":{"title":"Markdown links","permalink":"/docs/markdown-features/links"}},{"id":"guides/markdown-features/code-blocks","title":"Code blocks","description":"Handling code blocks in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/code-blocks","permalink":"/docs/markdown-features/code-blocks","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"code-blocks","description":"Handling code blocks in Docusaurus Markdown","slug":"/markdown-features/code-blocks"},"sidebar":"docs","previous":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"},"next":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"}},{"id":"guides/markdown-features/diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","source":"@site/docs/guides/markdown-features/markdown-features-diagrams.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/diagrams","permalink":"/docs/markdown-features/diagrams","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-diagrams.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","slug":"/markdown-features/diagrams"},"sidebar":"docs","previous":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"},"next":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"}},{"id":"guides/markdown-features/head-metadata","title":"Head metadata","description":"Declaring page-specific head metadata through MDX","source":"@site/docs/guides/markdown-features/markdown-features-head-metadata.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/head-metadata","permalink":"/docs/markdown-features/head-metadata","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-head-metadata.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"head-metadata","description":"Declaring page-specific head metadata through MDX","slug":"/markdown-features/head-metadata"},"sidebar":"docs","previous":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"},"next":{"title":"Styling and Layout","permalink":"/docs/styling-layout"}},{"id":"guides/markdown-features/introduction","title":"Markdown Features","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","source":"@site/docs/guides/markdown-features/markdown-features-intro.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features","permalink":"/docs/markdown-features","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"introduction","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","slug":"/markdown-features"},"sidebar":"docs","previous":{"title":"Blog","permalink":"/docs/blog"},"next":{"title":"MDX and React","permalink":"/docs/markdown-features/react"}},{"id":"guides/markdown-features/links","title":"Markdown links","description":"Links to other pages in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-links.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/links","permalink":"/docs/markdown-features/links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-links.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"links","description":"Links to other pages in Markdown","slug":"/markdown-features/links"},"sidebar":"docs","previous":{"title":"Assets","permalink":"/docs/markdown-features/assets"},"next":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"}},{"id":"guides/markdown-features/math-equations","title":"Math Equations","description":"Writing LaTeX Math Equations","source":"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/math-equations","permalink":"/docs/markdown-features/math-equations","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"math-equations","description":"Writing LaTeX Math Equations","slug":"/markdown-features/math-equations"},"sidebar":"docs","previous":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"},"next":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"}},{"id":"guides/markdown-features/plugins","title":"MDX Plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","source":"@site/docs/guides/markdown-features/markdown-features-plugins.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/plugins","permalink":"/docs/markdown-features/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","slug":"/markdown-features/plugins"},"sidebar":"docs","previous":{"title":"Markdown links","permalink":"/docs/markdown-features/links"},"next":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"}},{"id":"guides/markdown-features/react","title":"MDX and React","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","source":"@site/docs/guides/markdown-features/markdown-features-react.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/react","permalink":"/docs/markdown-features/react","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"react","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","slug":"/markdown-features/react"},"sidebar":"docs","previous":{"title":"Markdown Features","permalink":"/docs/markdown-features"},"next":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"}},{"id":"guides/markdown-features/tabs","title":"Tabs","description":"Using tabs inside Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-tabs.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/tabs","permalink":"/docs/markdown-features/tabs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"tabs","description":"Using tabs inside Docusaurus Markdown","slug":"/markdown-features/tabs"},"sidebar":"docs","previous":{"title":"MDX and React","permalink":"/docs/markdown-features/react"},"next":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"}},{"id":"guides/markdown-features/toc","title":"Headings and Table of contents","description":"Customizing headings and table-of-contents in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-toc.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/toc","permalink":"/docs/markdown-features/toc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"toc","description":"Customizing headings and table-of-contents in Markdown","slug":"/markdown-features/toc"},"sidebar":"docs","previous":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"},"next":{"title":"Assets","permalink":"/docs/markdown-features/assets"}},{"id":"guides/whats-next","title":"What\'s next?","description":"Congratulations! You have understood most core features of Docusaurus now. You have:","source":"@site/docs/guides/whats-next.mdx","sourceDirName":"guides","slug":"/guides/whats-next","permalink":"/docs/guides/whats-next","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"},"next":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"}},{"id":"i18n/crowdin","title":"i18n - Using Crowdin","description":"The i18n system of Docusaurus is decoupled from any translation software.","source":"@site/docs/i18n/i18n-crowdin.mdx","sourceDirName":"i18n","slug":"/i18n/crowdin","permalink":"/docs/i18n/crowdin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"crowdin","slug":"/i18n/crowdin","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Using Git","permalink":"/docs/i18n/git"},"next":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"}},{"id":"i18n/git","title":"i18n - Using git","description":"A possible translation strategy is to version control the translation files with Git (or any other VCS).","source":"@site/docs/i18n/i18n-git.mdx","sourceDirName":"i18n","slug":"/i18n/git","permalink":"/docs/i18n/git","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-git.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"git","slug":"/i18n/git"},"sidebar":"docs","previous":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"},"next":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"}},{"id":"i18n/introduction","title":"i18n - Introduction","description":"It is easy to translate a Docusaurus website with its internationalization (i18n) support.","source":"@site/docs/i18n/i18n-introduction.mdx","sourceDirName":"i18n","slug":"/i18n/introduction","permalink":"/docs/i18n/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"introduction","slug":"/i18n/introduction"},"sidebar":"docs","previous":{"title":"Deployment","permalink":"/docs/deployment"},"next":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"}},{"id":"i18n/tutorial","title":"i18n - Tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","source":"@site/docs/i18n/i18n-tutorial.mdx","sourceDirName":"i18n","slug":"/i18n/tutorial","permalink":"/docs/i18n/tutorial","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-tutorial.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"id":"tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","slug":"/i18n/tutorial"},"sidebar":"docs","previous":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"},"next":{"title":"Using Git","permalink":"/docs/i18n/git"}},{"id":"installation","title":"Installation","description":"How to install Docusaurus locally, and start a Docusaurus site in no time.","source":"@site/docs/installation.mdx","sourceDirName":".","slug":"/installation","permalink":"/docs/installation","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/installation.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"How to install Docusaurus locally, and start a Docusaurus site in no time."},"sidebar":"docs","previous":{"title":"Getting Started","permalink":"/docs/category/getting-started"},"next":{"title":"Configuration","permalink":"/docs/configuration"}},{"id":"introduction","title":"Introduction","description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","source":"@site/docs/introduction.mdx","sourceDirName":".","slug":"/","permalink":"/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","slug":"/"},"sidebar":"docs","next":{"title":"Getting Started","permalink":"/docs/category/getting-started"}},{"id":"migration/index","title":"Upgrading Docusaurus","description":"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.","source":"@site/docs/migration/index.mdx","sourceDirName":"migration","slug":"/migration","permalink":"/docs/migration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration"},"sidebar":"docs","previous":{"title":"Client architecture","permalink":"/docs/advanced/client"},"next":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"}},{"id":"migration/v2/migration-automated","title":"Automated migration","description":"The migration CLI automatically migrates your v1 website to a v2 website.","source":"@site/docs/migration/v2/migration-automated.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/automated","permalink":"/docs/migration/v2/automated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v2/automated"},"sidebar":"docs","previous":{"title":"Overview","permalink":"/docs/migration/v2"},"next":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"}},{"id":"migration/v2/migration-manual","title":"Manual migration","description":"This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.","source":"@site/docs/migration/v2/migration-manual.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/manual","permalink":"/docs/migration/v2/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-manual.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v2/manual","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"},"next":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-overview","title":"Overview","description":"This doc guides you through migrating an existing Docusaurus 1 site to Docusaurus 2.","source":"@site/docs/migration/v2/migration-overview.mdx","sourceDirName":"migration/v2","slug":"/migration/v2","permalink":"/docs/migration/v2","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-overview.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v2"},"sidebar":"docs","previous":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"},"next":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"}},{"id":"migration/v2/migration-translated-sites","title":"Translated sites","description":"This page explains how migrate a translated Docusaurus v1 site to Docusaurus v2.","source":"@site/docs/migration/v2/migration-translated-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/translated-sites","permalink":"/docs/migration/v2/translated-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-translated-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v2/translated-sites"},"sidebar":"docs","previous":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-versioned-sites","title":"Versioned sites","description":"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1\'s approach.","source":"@site/docs/migration/v2/migration-versioned-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/versioned-sites","permalink":"/docs/migration/v2/versioned-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v2/versioned-sites"},"sidebar":"docs","previous":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"},"next":{"title":"Translated sites","permalink":"/docs/migration/v2/translated-sites"}},{"id":"migration/v3","title":"Upgrading to Docusaurus v3","description":"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.","source":"@site/docs/migration/v3.mdx","sourceDirName":"migration","slug":"/migration/v3","permalink":"/docs/migration/v3","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/migration/v3","sidebar_label":"To Docusaurus v3"},"sidebar":"docs","previous":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"},"next":{"title":"Overview","permalink":"/docs/migration/v2"}},{"id":"playground","title":"Playground","description":"Playgrounds allow you to run Docusaurus in your browser, without installing anything!","source":"@site/docs/playground.mdx","sourceDirName":".","slug":"/playground","permalink":"/docs/playground","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/configuration"},"next":{"title":"TypeScript Support","permalink":"/docs/typescript-support"}},{"id":"search","title":"Search","description":"There are a few options you can use to add search to your website:","source":"@site/docs/search.mdx","sourceDirName":".","slug":"/search","permalink":"/docs/search","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"keywords":["algolia","search"]},"sidebar":"docs","previous":{"title":"Static Assets","permalink":"/docs/static-assets"},"next":{"title":"Browser support","permalink":"/docs/browser-support"}},{"id":"seo","title":"Search engine optimization (SEO)","description":"How to make your Docusaurus site maximally search-engine-friendly.","source":"@site/docs/seo.mdx","sourceDirName":".","slug":"/seo","permalink":"/docs/seo","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/seo.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"How to make your Docusaurus site maximally search-engine-friendly.","sidebar_label":"SEO","keywords":["seo","positioning"]},"sidebar":"docs","previous":{"title":"Browser support","permalink":"/docs/browser-support"},"next":{"title":"Using Plugins","permalink":"/docs/using-plugins"}},{"id":"static-assets","title":"Static Assets","description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are.","source":"@site/docs/static-assets.mdx","sourceDirName":".","slug":"/static-assets","permalink":"/docs/static-assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/static-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are."},"sidebar":"docs","previous":{"title":"Swizzling","permalink":"/docs/swizzling"},"next":{"title":"Search","permalink":"/docs/search"}},{"id":"styling-layout","title":"Styling and Layout","description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.","source":"@site/docs/styling-layout.mdx","sourceDirName":".","slug":"/styling-layout","permalink":"/docs/styling-layout","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},"sidebar":"docs","previous":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"},"next":{"title":"Swizzling","permalink":"/docs/swizzling"}},{"id":"swizzling","title":"Swizzling","description":"Customize your site\'s appearance through creating your own theme components","source":"@site/docs/swizzling.mdx","sourceDirName":".","slug":"/swizzling","permalink":"/docs/swizzling","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/swizzling.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Customize your site\'s appearance through creating your own theme components"},"sidebar":"docs","previous":{"title":"Styling and Layout","permalink":"/docs/styling-layout"},"next":{"title":"Static Assets","permalink":"/docs/static-assets"}},{"id":"typescript-support","title":"TypeScript Support","description":"Docusaurus is written in TypeScript and provides first-class TypeScript support.","source":"@site/docs/typescript-support.mdx","sourceDirName":".","slug":"/typescript-support","permalink":"/docs/typescript-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/typescript-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"description":"Docusaurus is written in TypeScript and provides first-class TypeScript support."},"sidebar":"docs","previous":{"title":"Playground","permalink":"/docs/playground"},"next":{"title":"Guides","permalink":"/docs/category/guides"}},{"id":"using-plugins","title":"Using Plugins","description":"The Docusaurus core doesn\'t provide any feature of its own. All features are delegated to individual plugins: the docs feature provided by the docs plugin; the blog feature provided by the blog plugin; or individual pages provided by the pages plugin. If there are no plugins installed, the site won\'t contain any routes.","source":"@site/docs/using-plugins.mdx","sourceDirName":".","slug":"/using-plugins","permalink":"/docs/using-plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/using-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"docs","previous":{"title":"SEO","permalink":"/docs/seo"},"next":{"title":"Deployment","permalink":"/docs/deployment"}}],"drafts":[],"sidebars":{"docs":[{"type":"doc","id":"introduction"},{"type":"category","label":"Getting Started","link":{"type":"generated-index","slug":"/category/getting-started","permalink":"/docs/category/getting-started"},"collapsed":false,"items":[{"type":"doc","id":"installation"},{"type":"doc","id":"configuration"},{"type":"doc","id":"playground"},{"type":"doc","id":"typescript-support"}],"collapsible":true},{"type":"category","label":"Guides","link":{"type":"generated-index","title":"Docusaurus Guides","description":"Let\'s learn about the most important Docusaurus concepts!","keywords":["guides"],"image":"/img/docusaurus.png","slug":"/category/guides","permalink":"/docs/category/guides"},"items":[{"type":"doc","id":"guides/creating-pages"},{"type":"category","label":"Docs","link":{"type":"doc","id":"guides/docs/introduction"},"items":[{"type":"doc","id":"guides/docs/create-doc"},{"type":"category","label":"Sidebar","link":{"type":"doc","id":"guides/docs/sidebar/index"},"items":[{"type":"doc","id":"guides/docs/sidebar/items"},{"type":"doc","id":"guides/docs/sidebar/autogenerated"},{"type":"doc","id":"guides/docs/sidebar/multiple-sidebars"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/docs/versioning"},{"type":"doc","id":"guides/docs/multi-instance"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"blog"},{"type":"category","label":"Markdown Features","link":{"type":"doc","id":"guides/markdown-features/introduction"},"items":[{"type":"doc","id":"guides/markdown-features/react"},{"type":"doc","id":"guides/markdown-features/tabs"},{"type":"doc","id":"guides/markdown-features/code-blocks"},{"type":"doc","id":"guides/markdown-features/admonitions"},{"type":"doc","id":"guides/markdown-features/toc"},{"type":"doc","id":"guides/markdown-features/assets"},{"type":"doc","id":"guides/markdown-features/links"},{"type":"doc","id":"guides/markdown-features/plugins"},{"type":"doc","id":"guides/markdown-features/math-equations"},{"type":"doc","id":"guides/markdown-features/diagrams"},{"type":"doc","id":"guides/markdown-features/head-metadata"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"styling-layout"},{"type":"doc","id":"swizzling"},{"type":"doc","id":"static-assets"},{"type":"doc","id":"search"},{"type":"doc","id":"browser-support"},{"type":"doc","id":"seo"},{"type":"doc","id":"using-plugins"},{"type":"doc","id":"deployment"},{"type":"category","label":"Internationalization","link":{"type":"doc","id":"i18n/introduction"},"items":[{"type":"doc","id":"i18n/tutorial","label":"Tutorial","translatable":true},{"type":"doc","id":"i18n/git","label":"Using Git","translatable":true},{"type":"doc","id":"i18n/crowdin","label":"Using Crowdin","translatable":true}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/whats-next"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced Guides","link":{"type":"doc","id":"advanced/index"},"items":[{"type":"doc","id":"advanced/architecture"},{"type":"doc","id":"advanced/plugins"},{"type":"doc","id":"advanced/routing"},{"type":"doc","id":"advanced/ssg"},{"type":"doc","id":"advanced/client"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Upgrading","link":{"type":"doc","id":"migration/index"},"items":[{"type":"doc","id":"migration/v3"},{"type":"category","label":"To Docusaurus v2","items":[{"type":"doc","id":"migration/v2/migration-overview"},{"type":"doc","id":"migration/v2/migration-automated"},{"type":"doc","id":"migration/v2/migration-manual"},{"type":"doc","id":"migration/v2/migration-versioned-sites"},{"type":"doc","id":"migration/v2/migration-translated-sites"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"api":[{"type":"doc","id":"cli"},{"type":"doc","id":"docusaurus-core"},{"type":"doc","id":"api/docusaurus.config.js"},{"type":"category","label":"Plugin method references","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugin-methods/lifecycle-apis"},{"type":"doc","id":"api/plugin-methods/extend-infrastructure"},{"type":"doc","id":"api/plugin-methods/i18n-lifecycles"},{"type":"doc","id":"api/plugin-methods/static-methods"}],"link":{"type":"doc","id":"api/plugin-methods/README"}},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugins/plugin-content-docs"},{"type":"doc","id":"api/plugins/plugin-content-blog"},{"type":"doc","id":"api/plugins/plugin-content-pages"},{"type":"doc","id":"api/plugins/plugin-client-redirects"},{"type":"doc","id":"api/plugins/plugin-debug"},{"type":"doc","id":"api/plugins/plugin-google-analytics"},{"type":"doc","id":"api/plugins/plugin-google-gtag"},{"type":"doc","id":"api/plugins/plugin-google-tag-manager"},{"type":"doc","id":"api/plugins/plugin-ideal-image"},{"type":"doc","id":"api/plugins/plugin-pwa"},{"type":"doc","id":"api/plugins/plugin-sitemap"},{"type":"doc","id":"api/plugins/plugin-vercel-analytics"}],"link":{"type":"doc","id":"api/plugins/plugins-overview"}},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/themes/theme-configuration","label":"Configuration"},{"type":"doc","id":"api/themes/theme-classic"},{"type":"doc","id":"api/themes/theme-live-codeblock"},{"type":"doc","id":"api/themes/theme-search-algolia"},{"type":"doc","id":"api/themes/theme-mermaid"}],"link":{"type":"doc","id":"api/themes/themes-overview"}},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/create-docusaurus"},{"type":"category","label":"\ud83d\udce6 eslint-plugin","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/eslint-plugin/no-html-links"},{"type":"doc","id":"api/misc/eslint-plugin/no-untranslated-text"},{"type":"doc","id":"api/misc/eslint-plugin/prefer-docusaurus-heading"},{"type":"doc","id":"api/misc/eslint-plugin/string-literal-i18n-messages"}],"link":{"type":"doc","id":"api/misc/eslint-plugin/README"}},{"type":"doc","label":"\ud83d\udce6 logger","id":"api/misc/logger/logger"}]}]}}]},"community":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/community","tagsPath":"/community/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/sidebarsCommunity.js","contentPath":"/home/runner/work/docusaurus/docusaurus/website/community","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-community/current","docs":[{"id":"canary","title":"Canary releases","description":"Docusaurus has a canary releases system.","source":"@site/community/4-canary.mdx","sourceDirName":".","slug":"/canary","permalink":"/community/canary","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":4,"frontMatter":{},"sidebar":"community","previous":{"title":"Contributing","permalink":"/community/contributing"},"next":{"title":"Release process","permalink":"/community/release-process"}},{"id":"contributing","title":"Contributing","description":"","source":"@site/community/3-contributing.mdx","sourceDirName":".","slug":"/contributing","permalink":"/community/contributing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":3,"frontMatter":{"title":"Contributing","hide_title":true,"sidebar_label":"Contributing"},"sidebar":"community","previous":{"title":"Awesome Resources","permalink":"/community/resources"},"next":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"release-process","title":"Release process","description":"Let\'s see how Docusaurus handles versioning, releases and breaking changes.","source":"@site/community/5-release-process.mdx","sourceDirName":".","slug":"/release-process","permalink":"/community/release-process","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":5,"frontMatter":{},"sidebar":"community","previous":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"resources","title":"Awesome Resources","description":"A curated list of interesting Docusaurus community projects.","source":"@site/community/2-resources.mdx","sourceDirName":".","slug":"/resources","permalink":"/community/resources","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":2,"frontMatter":{},"sidebar":"community","previous":{"title":"Team","permalink":"/community/team"},"next":{"title":"Contributing","permalink":"/community/contributing"}},{"id":"support","title":"Support","description":"Docusaurus has a community of thousands of developers.","source":"@site/community/0-support.mdx","sourceDirName":".","slug":"/support","permalink":"/community/support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":0,"frontMatter":{},"sidebar":"community","next":{"title":"Team","permalink":"/community/team"}},{"id":"team","title":"Team","description":"Active Team","source":"@site/community/1-team.mdx","sourceDirName":".","slug":"/team","permalink":"/community/team","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx","tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"sidebarPosition":1,"frontMatter":{},"sidebar":"community","previous":{"title":"Support","permalink":"/community/support"},"next":{"title":"Awesome Resources","permalink":"/community/resources"}}],"drafts":[],"sidebars":{"community":[{"type":"doc","id":"support"},{"type":"doc","id":"team"},{"type":"doc","id":"resources"},{"type":"doc","id":"contributing","label":"Contributing"},{"type":"doc","id":"canary"},{"type":"doc","id":"release-process"},{"type":"link","href":"/changelog","label":"Changelog"},{"type":"link","href":"/showcase","label":"Showcase"},{"type":"link","href":"/feature-requests","label":"Feature Requests"},{"type":"link","label":"Chat with us on Discord","href":"https://discord.gg/docusaurus"}]}}]},"docs-tests":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":true,"className":"docs-version-current","path":"/tests/docs","tagsPath":"/tests/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/home/runner/work/docusaurus/docusaurus/website/_dogfooding/docs-tests-sidebars.js","contentPath":"/home/runner/work/docusaurus/docusaurus/website/_dogfooding/_docs tests","contentPathLocalized":"/home/runner/work/docusaurus/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-docs-tests/current","docs":[{"id":"beginner\'s guide","title":"Beginner\'s guide","description":"#9160","source":"@site/_dogfooding/_docs tests/beginner\'s guide.mdx","sourceDirName":".","slug":"/beginner\'s guide","permalink":"/tests/docs/beginner\'s guide","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{}},{"id":"doc-with-another-sidebar","title":"Doc with another sidebar","description":"My link appears in a sidebar, but I want to display another sidebar...","source":"@site/_dogfooding/_docs tests/doc-with-another-sidebar.mdx","sourceDirName":".","slug":"/doc-with-another-sidebar","permalink":"/tests/docs/doc-with-another-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"displayed_sidebar":"anotherSidebar"},"sidebar":"anotherSidebar"},{"id":"doc-with-last-update","title":"Doc With Last Update Front Matter","description":"","source":"@site/_dogfooding/_docs tests/doc-with-last-update.mdx","sourceDirName":".","slug":"/doc-with-last-update","permalink":"/tests/docs/doc-with-last-update","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"custom author","lastUpdatedAt":946684800000,"frontMatter":{"last_update":{"author":"custom author","date":"1/1/2000"}},"sidebar":"sidebar","previous":{"title":"Doc with another sidebar","permalink":"/tests/docs/doc-with-another-sidebar"},"next":{"title":"Tests","permalink":"/tests/docs/category/tests"}},{"id":"doc-without-sidebar","title":"Doc without sidebar","description":"My link appears in a sidebar, but I don\'t want to display that...","source":"@site/_dogfooding/_docs tests/doc-without-sidebar.mdx","sourceDirName":".","slug":"/doc-without-sidebar","permalink":"/tests/docs/doc-without-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"displayed_sidebar":null}},{"id":"dummy","title":"Just a dummy page","description":"","source":"@site/_dogfooding/_docs tests/dummy.mdx","sourceDirName":".","slug":"/dummy.html","permalink":"/tests/docs/dummy.html","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"dummy.html"},"sidebar":"anotherSidebar"},{"id":"folder with space/doc 1","title":"Doc 1","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 1.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 1","permalink":"/tests/docs/folder with space/doc 1","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{}},{"id":"folder with space/doc 2","title":"Doc 2","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 2.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 2","permalink":"/tests/docs/folder with space/doc 2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{}},{"id":"index","title":"Docs tests","description":"This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don\'t really cover.","source":"@site/_dogfooding/_docs tests/index.mdx","sourceDirName":".","slug":"/","permalink":"/tests/docs/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"A","permalink":"/tests/docs/tags/a","description":"Description for tag a"},{"inline":false,"label":"Label for tag b","permalink":"/tests/docs/tags/b"},{"inline":false,"label":"C","permalink":"/tests/docs/tags/permalink-for-tag-c"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"/","tags":["a","b","c"],"unlisted":true,"id":"index","sidebar_label":"Docs tests"},"sidebar":"sidebar"},{"id":"more-test","title":"Another test page","description":"Test link","source":"@site/_dogfooding/_docs tests/more-test.mdx","sourceDirName":".","slug":"/more-test","permalink":"/tests/docs/more-test","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"A","permalink":"/tests/docs/tags/a","description":"Description for tag a"},{"inline":false,"label":"Label for tag e","permalink":"/tests/docs/tags/permalink-for-tag-e","description":"Description for tag e"},{"inline":false,"label":"Some-tag","permalink":"/tests/docs/tags/some-tag"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"tags":["a","e","some-tag"]},"sidebar":"sidebar","previous":{"title":"Another category with index","permalink":"/tests/docs/category/another-category-with-index"},"next":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"}},{"id":"standalone","title":"Standalone doc","description":"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar","source":"@site/_dogfooding/_docs tests/standalone.mdx","sourceDirName":".","slug":"/standalone","permalink":"/tests/docs/standalone","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Label for tag b","permalink":"/tests/docs/tags/b"},{"inline":false,"label":"D","permalink":"/tests/docs/tags/d"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"tags":["b","d"]}},{"id":"tests/admonitions","title":"Admonitions tests","description":"Empty content","source":"@site/_dogfooding/_docs tests/tests/admonitions.mdx","sourceDirName":"tests","slug":"/tests/admonitions","permalink":"/tests/docs/tests/admonitions","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Case-Sensitive doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc"},"next":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},{"id":"tests/ascii/\xe6\xf8\xe5/index","title":"index","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/\xe6\xf8\xe5/index.mdx","sourceDirName":"tests/ascii/\xe6\xf8\xe5","slug":"/tests/ascii/\xe6\xf8\xe5/","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"},"next":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"}},{"id":"tests/ascii/folder/\xe6\xf8\xe5","title":"\xe6\xf8\xe5","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx","sourceDirName":"tests/ascii/folder","slug":"/tests/ascii/folder/\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"},"next":{"title":"index","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},{"id":"tests/Case-Sentitive-Doc","title":"Case-Sensitive doc","description":"This doc has uppercase and lowercase chars in its filename, and thus in its path / slug.","source":"@site/_dogfooding/_docs tests/tests/Case-Sentitive-Doc.mdx","sourceDirName":"tests","slug":"/tests/Case-Sentitive-Doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Tests","permalink":"/tests/docs/category/tests"},"next":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"}},{"id":"tests/category-links/custom-index-convention/intro","title":"Introduction","description":"This file is called intro.md. Typically, it won\'t be selected by the convention; however, it is in this case, because we have used a custom one.","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/intro","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},{"id":"tests/category-links/custom-index-convention/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/sample-doc.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/sample-doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Introduction","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro"},"next":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"}},{"id":"tests/category-links/no-index-doc/index","title":"Index","description":"This file (index.md) is supposed to be a category index, but it isn\'t because we have set link: null in the category.json.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/index.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/","permalink":"/tests/docs/tests/category-links/no-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"}},{"id":"tests/category-links/no-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"},"next":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"}},{"id":"tests/category-links/no-subdoc/index","title":"No sub-docs","description":"The only doc of this category is the index page. It should show up as a regular doc link.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx","sourceDirName":"tests/category-links/no-subdoc","slug":"/tests/category-links/no-subdoc/","permalink":"/tests/docs/tests/category-links/no-subdoc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"},"next":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"}},{"id":"tests/category-links/readme","title":"Readme","description":"This readme.md should not be used as the category index due to the category.json link","source":"@site/_dogfooding/_docs tests/tests/category-links/readme.mdx","sourceDirName":"tests/category-links","slug":"/tests/category-links/","permalink":"/tests/docs/tests/category-links/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"}},{"id":"tests/category-links/regular-category/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/regular-category/sample-doc.mdx","sourceDirName":"tests/category-links/regular-category","slug":"/tests/category-links/regular-category/sample-doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"},"next":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"}},{"id":"tests/category-links/with-category-name-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"},"next":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"}},{"id":"tests/category-links/with-category-name-doc/with-category-name-doc","title":"Category with a doc of category\'s name","description":"You should be able to click on the category and browse this /.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/","permalink":"/tests/docs/tests/category-links/with-category-name-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/index","title":"Category with index.md doc","description":"You should be able to click on the category and browse this index.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/index.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/","permalink":"/tests/docs/tests/category-links/with-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"},"next":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"}},{"id":"tests/category-links/with-readme-doc/README","title":"Category with readme.md doc","description":"You should be able to click on the category and browse this readme.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/README.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/","permalink":"/tests/docs/tests/category-links/with-readme-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"}},{"id":"tests/category-links/with-readme-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"},"next":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"}},{"id":"tests/custom-props/doc-with-custom-props","title":"Doc with Custom Props","description":"This doc has custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-with-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-with-custom-props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"sidebar_custom_props":{"prop":"custom","number":1,"boolean":true}},"sidebar":"sidebar","previous":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"},"next":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"}},{"id":"tests/custom-props/doc-without-custom-props","title":"Doc Without Custom Props","description":"This doc doesn\'t have custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-without-custom-props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"},"next":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"}},{"id":"tests/custom-props/index","title":"Custom Props","description":"","source":"@site/_dogfooding/_docs tests/tests/custom-props/index.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/","permalink":"/tests/docs/tests/custom-props/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"},"next":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"}},{"id":"tests/img-tests","title":"Image tests","description":"URL encoded image","source":"@site/_dogfooding/_docs tests/tests/img-tests.mdx","sourceDirName":"tests","slug":"/tests/img-tests","permalink":"/tests/docs/tests/img-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"image":"./img/oss_logo.png"},"sidebar":"sidebar","previous":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"},"next":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"}},{"id":"tests/links/broken-anchors-tests","title":"Broken Anchors tests","description":"Markdown link to above anchor","source":"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx","sourceDirName":"tests/links","slug":"/tests/links/broken-anchors-tests","permalink":"/tests/docs/tests/links/broken-anchors-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"},"next":{"title":"Target doc","permalink":"/tests/docs/tests/links/target-doc-slug"}},{"id":"tests/links/target","title":"Target doc","description":"This is just a doc meant to be linked to by other docs.","source":"@site/_dogfooding/_docs tests/tests/links/target.mdx","sourceDirName":"tests/links","slug":"/tests/links/target-doc-slug","permalink":"/tests/docs/tests/links/target-doc-slug","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"slug":"target-doc-slug"},"sidebar":"sidebar","previous":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"},"next":{"title":"Test links","permalink":"/tests/docs/tests/links/test-markdown-links"}},{"id":"tests/links/test-markdown-links","title":"Test links","description":"These are dogfood tests showing that Markdown links with md/mdx file references are resolved correctly.","source":"@site/_dogfooding/_docs tests/tests/links/test-markdown-links.mdx","sourceDirName":"tests/links","slug":"/tests/links/test-markdown-links","permalink":"/tests/docs/tests/links/test-markdown-links","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Target doc","permalink":"/tests/docs/tests/links/target-doc-slug"},"next":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"}},{"id":"tests/toc-partials/index","title":"TOC partial test","description":"This page tests that MDX-imported content appears correctly in the table-of-contents","source":"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx","sourceDirName":"tests/toc-partials","slug":"/tests/toc-partials/","permalink":"/tests/docs/tests/toc-partials/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Test links","permalink":"/tests/docs/tests/links/test-markdown-links"},"next":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"}},{"id":"tests/visibility/force-unlisted","title":"force_unlisted_parseFrontMatter_test","description":"This doc is hidden despite unlisted: false","source":"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/force-unlisted","permalink":"/tests/docs/tests/visibility/force-unlisted","draft":false,"unlisted":true,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"force_unlisted_parseFrontMatter_test":true},"sidebar":"sidebar"},{"id":"tests/visibility/index","title":"Visibility","description":"A category to play with draft/unlisted front matter.","source":"@site/_dogfooding/_docs tests/tests/visibility/index.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/","permalink":"/tests/docs/tests/visibility/","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"tags":["visibility"]},"sidebar":"sidebar","previous":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"},"next":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"}},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/index","title":"Only Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","title":"Only Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted1","title":"Only Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted2","title":"Only Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-drafts/draft-subcategory/listed1","title":"Some Drafts - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"},"next":{"title":"Some Unlisteds - Listed 1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/index","title":"Some Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1","title":"Some Unlisteds - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"},"next":{"title":"Sidebar item description tests","permalink":"/tests/docs/category/sidebar-item-description-tests"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","title":"Some Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted1","title":"Some Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted2","title":"Some Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"toc/toc-_-_","title":"toc-_-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-_.mdx","sourceDirName":"toc","slug":"/toc/toc-_-_","permalink":"/tests/docs/toc/toc-_-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"},"next":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}},{"id":"toc/toc-_-5","title":"toc-_-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx","sourceDirName":"toc","slug":"/toc/toc-_-5","permalink":"/tests/docs/toc/toc-_-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"},"next":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"}},{"id":"toc/toc-2-2","title":"toc-2-2","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx","sourceDirName":"toc","slug":"/toc/toc-2-2","permalink":"/tests/docs/toc/toc-2-2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":2},"sidebar":"sidebar","previous":{"title":"Another test page","permalink":"/tests/docs/more-test"},"next":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"}},{"id":"toc/toc-2-3","title":"toc-2-3","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-3.mdx","sourceDirName":"toc","slug":"/toc/toc-2-3","permalink":"/tests/docs/toc/toc-2-3","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"},"next":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"}},{"id":"toc/toc-2-4","title":"toc-2-4","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx","sourceDirName":"toc","slug":"/toc/toc-2-4","permalink":"/tests/docs/toc/toc-2-4","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"sidebar":"sidebar","previous":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"},"next":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"}},{"id":"toc/toc-2-5","title":"toc-2-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-5.mdx","sourceDirName":"toc","slug":"/toc/toc-2-5","permalink":"/tests/docs/toc/toc-2-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"},"next":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"}},{"id":"toc/toc-3-_","title":"toc-3-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx","sourceDirName":"toc","slug":"/toc/toc-3-_","permalink":"/tests/docs/toc/toc-3-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"},"next":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"}},{"id":"toc/toc-3-5","title":"toc-3-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-5.mdx","sourceDirName":"toc","slug":"/toc/toc-3-5","permalink":"/tests/docs/toc/toc-3-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":3,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"},"next":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"}},{"id":"toc/toc-4-5","title":"toc-4-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx","sourceDirName":"toc","slug":"/toc/toc-4-5","permalink":"/tests/docs/toc/toc-4-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":4,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"},"next":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"}},{"id":"toc/toc-5-5","title":"toc-5-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx","sourceDirName":"toc","slug":"/toc/toc-5-5","permalink":"/tests/docs/toc/toc-5-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":5,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"},"next":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"}},{"id":"toc/toc-test-bad","title":"toc-test-bad","description":"Test the TOC behavior of a real-world MD doc with invalid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-bad.mdx","sourceDirName":"toc","slug":"/toc/toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"},"next":{"title":"toc-test-good","permalink":"/tests/docs/toc/toc-test-good"}},{"id":"toc/toc-test-good","title":"toc-test-good","description":"Test the TOC behavior of a real-world MD doc with valid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx","sourceDirName":"toc","slug":"/toc/toc-test-good","permalink":"/tests/docs/toc/toc-test-good","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}}],"drafts":[{"id":"tests/another-draft","title":"Another Draft","description":"This page should only be visible in local development","source":"@site/_dogfooding/_docs tests/tests/another-draft.mdx","sourceDirName":"tests","slug":"/tests/another-draft","permalink":"/tests/docs/tests/another-draft","draft":true,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true}},{"id":"tests/visibility/only-drafts/draft1","title":"Only Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft1.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft1","permalink":"/tests/docs/tests/visibility/only-drafts/draft1","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft2","title":"Only Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft2.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft2","permalink":"/tests/docs/tests/visibility/only-drafts/draft2","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["draft"]}},{"id":"tests/visibility/some-drafts/draft1","title":"Some Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft1.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft1","permalink":"/tests/docs/tests/visibility/some-drafts/draft1","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft2","title":"Some Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft2.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft2","permalink":"/tests/docs/tests/visibility/some-drafts/draft2","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/draft3","title":"Only Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/index","title":"Only Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/draft3","title":"Some Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/index","title":"Some Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"inline":false,"label":"Visibility","permalink":"/tests/docs/tags/visibility"},{"inline":false,"label":"Draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}}],"sidebars":{"sidebar":[{"type":"doc","id":"index","className":"red","label":"Index","translatable":true},{"type":"doc","id":"doc-without-sidebar"},{"type":"doc","id":"doc-with-another-sidebar"},{"type":"doc","id":"doc-with-last-update"},{"type":"category","label":"Tests","link":{"type":"generated-index","slug":"/category/tests","permalink":"/tests/docs/category/tests"},"items":[{"type":"doc","id":"tests/Case-Sentitive-Doc"},{"type":"doc","id":"tests/admonitions"},{"type":"category","label":"ascii","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"folder","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/ascii/folder/\xe6\xf8\xe5"}]},{"type":"doc","label":"index","id":"tests/ascii/\xe6\xf8\xe5/index"}]},{"type":"category","label":"Category Links","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Introduction","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/custom-index-convention/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/custom-index-convention/intro"}},{"type":"category","label":"no-index-doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/no-index-doc/index"},{"type":"doc","id":"tests/category-links/no-index-doc/sample-doc"}]},{"type":"doc","label":"No sub-docs","id":"tests/category-links/no-subdoc/index"},{"type":"doc","id":"tests/category-links/readme"},{"type":"category","label":"regular-category","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/regular-category/sample-doc"}]},{"type":"category","label":"Category with a doc of category\'s name","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-category-name-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-category-name-doc/with-category-name-doc"}},{"type":"category","label":"Category with index.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-index-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-index-doc/index"}},{"type":"category","label":"Category with readme.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-readme-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-readme-doc/README"}}],"link":{"type":"generated-index","slug":"/category-links-generated-index-slug","permalink":"/tests/docs/category-links-generated-index-slug"}},{"type":"category","label":"Custom Props","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/custom-props/doc-with-custom-props","customProps":{"prop":"custom","number":1,"boolean":true}},{"type":"doc","id":"tests/custom-props/doc-without-custom-props"}],"link":{"type":"doc","id":"tests/custom-props/index"}},{"type":"doc","id":"tests/img-tests"},{"type":"category","label":"links","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/links/broken-anchors-tests"},{"type":"doc","id":"tests/links/target"},{"type":"doc","id":"tests/links/test-markdown-links"}]},{"type":"doc","label":"TOC partial test","id":"tests/toc-partials/index"},{"type":"category","label":"Visibility","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/force-unlisted"},{"type":"category","label":"only-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Only Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted2"}]},{"type":"category","label":"some-drafts","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"draft-subcategory","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-drafts/draft-subcategory/listed1"}]}]},{"type":"category","label":"some-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Some Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted2"}]}],"link":{"type":"doc","id":"tests/visibility/index"}},{"type":"link","label":"External Link test","href":"https://docusaurus.io"},{"type":"category","label":"Sidebar item description tests","link":{"type":"generated-index","slug":"/category/sidebar-item-description-tests","permalink":"/tests/docs/category/sidebar-item-description-tests"},"items":[{"type":"link","label":"Link without description","href":"https://docusaurus.io"},{"type":"link","label":"Link with description","href":"https://docusaurus.io","description":"Some link description"},{"type":"category","label":"Category without description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category with description","description":"Some category description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Another category with index","collapsible":false,"link":{"type":"generated-index","slug":"/category/another-category-with-index","permalink":"/tests/docs/category/another-category-with-index"},"items":[{"type":"doc","id":"more-test"}],"collapsed":false},{"type":"category","label":"Huge sidebar category","items":[{"type":"link","href":"/","label":"Test Test test test test test test"},{"type":"link","href":"/","label":"Link 0 (level 1)"},{"type":"link","href":"/","label":"Link 1 (level 1)"},{"type":"link","href":"/","label":"Link 2 (level 1)"},{"type":"link","href":"/","label":"Link 3 (level 1)"},{"type":"link","href":"/","label":"Link 4 (level 1)"},{"type":"link","href":"/","label":"Link 5 (level 1)"},{"type":"link","href":"/","label":"Link 6 (level 1)"},{"type":"link","href":"/","label":"Link 7 (level 1)"},{"type":"category","label":"Category 0 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Link tests","className":"red","items":[{"type":"link","label":"External link absolute","href":"https://github.com/facebook/docusaurus"},{"type":"link","label":"pathname:/// link","href":"pathname:///some/local/path"},{"type":"link","label":"pathname:/// link (no baseUrl)","href":"pathname:///some/local/path","autoAddBaseUrl":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"TOC tests","className":"red","items":[{"type":"doc","id":"toc/toc-2-2"},{"type":"doc","id":"toc/toc-2-3"},{"type":"doc","id":"toc/toc-2-4"},{"type":"doc","id":"toc/toc-2-5"},{"type":"doc","id":"toc/toc-3-5"},{"type":"doc","id":"toc/toc-3-_"},{"type":"doc","id":"toc/toc-4-5"},{"type":"doc","id":"toc/toc-5-5"},{"type":"doc","id":"toc/toc-_-5"},{"type":"doc","id":"toc/toc-_-_"},{"type":"doc","id":"toc/toc-test-bad"},{"type":"doc","id":"toc/toc-test-good"}],"collapsed":true,"collapsible":true},{"type":"category","label":"HTML items tests","collapsed":false,"collapsible":false,"items":[{"type":"html","value":"Some Text","defaultStyle":true},{"type":"html","value":"<span style=\\"border-top: 1px solid var(--ifm-color-gray-500); display: block;margin: 0.5rem 0 0.25rem 1rem;\\" />"},{"type":"html","defaultStyle":true,"value":"\\n <span style=\\"font-size: 0.5rem; color: lightgrey;\\">Powered by</span>\\n <img style=\\"width: 100px; height: 100px; display: block;\\" src=\\"/img/docusaurus.png\\" alt=\\"Docusaurus Logo\\" />\\n "}]}],"anotherSidebar":[{"type":"doc","id":"dummy"}]}}]}},"docusaurus-plugin-content-blog":{"default":{"blogSidebarTitle":"All our posts","blogPosts":[{"id":"/releases/3.4","metadata":{"permalink":"/blog/releases/3.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.4/index.mdx","source":"@site/blog/releases/3.4/index.mdx","title":"Docusaurus 3.4","description":"We are happy to announce Docusaurus 3.4.","date":"2024-05-31T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.045,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-05-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","nextItem":{"title":"Docusaurus 3.3","permalink":"/blog/releases/3.3"}},"content":"We are happy to announce **Docusaurus 3.4**.\\n\\nUpgrading should be easy. Our [release process](/community/release-process) respects [Semantic Versioning](https://semver.org/). Minor versions do not include any breaking changes.\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Tags files\\n\\nThe docs and blog plugins both already supported a `tags` front matter attribute, enabling you to group related content. But tags declared inline in the front matter are not always ideal.\\n\\nWith [#10137](https://github.com/facebook/docusaurus/pull/10137), you can now declare a list of pre-defined tags in a `tags.yml` file:\\n\\n```yml title=\\"blog/tags.yml\\"\\ntag1:\\n label: \'Tag 1\'\\n description: \'Tag 1 description\'\\n permalink: /tag-1-permalink\\n\\ntag2:\\n label: \'Tag 2\'\\n description: \'Tag 2 description\'\\n permalink: /tag-2-permalink\\n```\\n\\nThese predefined tags can be used in the front matter of your blog or docs files:\\n\\n```md title=\\"blog/2024-05-31-my-blog-post.md\\"\\n---\\ntags: [tag1, tag2]\\n---\\n\\n# Title\\n\\nContent\\n```\\n\\n:::tip Keeping tags usage consistent\\n\\nUse the new `onInlineTags: \'throw\'` plugin option to enforce the usage of predefined tags and prevent contributors from creating new unwanted tags.\\n\\n:::\\n\\n### Hash Router - Experimental\\n\\nWith [9859](https://github.com/facebook/docusaurus/pull/9859), we added a new **experimental** hash router config option, useful for **offline browsing** by opening your site locally through the `file://` protocol.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\nexport default {\\n future: {\\n experimental_router: \'hash\',\\n },\\n};\\n```\\n\\n:::warning\\n\\nThis mode is **not recommended for sites deployed through a web server**.\\n\\n:::\\n\\nWhen this mode is turned on, Docusaurus will opt out of static site rendering, and build a client-side single page application where all routes are prefixed with `/#/`. A single `index.html` file is generated. This file can be opened locally in your browser by simply clicking it, using the browser `file://` protocol. This makes it possible to distribute a Docusaurus site as a `.zip` file so that readers can browse it offline, without having to install anything complex on their computer apart a web browser.\\n\\n![Docusaurus hash router - local browsing using the file:// protocol](./img/hash.png)\\n\\nTry browsing our own Docusaurus site built with the hash router:\\n\\n- [Docusaurus website - Hash Router web deployment](https://facebook.github.io/docusaurus/#/)\\n- [Docusaurus website - Hash Router downloadable GitHub artifacts](https://github.com/facebook/docusaurus/actions/workflows/build-hash-router.yml)\\n\\n:::caution Experimental\\n\\nThis feature is **experimental**. If you try it out, please let us know how it works for you [here](https://github.com/facebook/docusaurus/issues/3825).\\n\\n:::\\n\\n### Site Storage - Experimental\\n\\nDocusaurus uses the browser `localStorage` API to persist UI state.\\n\\nBut sometimes the storage space is \\"shared\\" between multiple sites using the same domain, leading to **storage key conflicts**. This generally happens in two cases\\n\\n- when working on multiple `http://localhost:3000` sites\\n- when hosting multiple sites under the same domain: `https://example.com/site1/` and `https://example.com/site2/`\\n\\nFor this reason, we introduced a new **experimental** `siteStorage` configuration option:\\n\\n```tsx\\nexport default {\\n future: {\\n experimental_storage: {\\n type: \'localStorage\',\\n namespace: true,\\n },\\n },\\n};\\n```\\n\\nWhen `namespace: true` is set, we apply a hash suffix to all the storage keys, making them unique to the current site (based on `config.url` and `config.baseUrl`. For example, the `theme` storage key becomes `theme-x6f`. It is also possible to provide your own custom suffix `namespace: \'suffix\'`. We also made it possible to use `type: \'sessionStorage\'` instead of the default `localStorage`.\\n\\n:::caution Experimental\\n\\nThis feature is **experimental**. If you try it out, please let us know how it works for you [here](https://github.com/facebook/docusaurus/pull/10121).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#10151](https://github.com/facebook/docusaurus/pull/10151): add Turkmen (tk) theme translations\\n- [#10111](https://github.com/facebook/docusaurus/pull/10111): add Bulgarian (bg) theme translations\\n- [#10168](https://github.com/facebook/docusaurus/pull/10168): fix many long overdue Markdown link resolution bugs\\n- [#10178](https://github.com/facebook/docusaurus/pull/10178): the `/search` page now respects the `contextualSearch: false` setting\\n- [#10118](https://github.com/facebook/docusaurus/pull/10118): fix bad pluralization on docs generated index category card description\\n- [#10130](https://github.com/facebook/docusaurus/pull/10130): fix false positives reported by the broken anchor checker due to trailing slashes\\n\\nCheck the **[3.4.0 changelog entry](/changelog/3.4.0)** for an exhaustive list of changes."},{"id":"/releases/3.3","metadata":{"permalink":"/blog/releases/3.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.3/index.mdx","source":"@site/blog/releases/3.3/index.mdx","title":"Docusaurus 3.3","description":"We are happy to announce Docusaurus 3.3.","date":"2024-05-03T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.56,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-05-03T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 3.4","permalink":"/blog/releases/3.4"},"nextItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"}},"content":"We are happy to announce **Docusaurus 3.3**.\\n\\nUpgrading should be easy. Our [release process](/community/release-process) respects [Semantic Versioning](https://semver.org/). Minor versions do not include any breaking changes.\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Highlights\\n\\n### Prepare for React 19\\n\\nThe React core team recently [released the first **React 19 beta**](https://react.dev/blog/2024/04/25/react-19). They also [published an upgrade guide and a **React v18.3 release**](https://react.dev/blog/2024/04/25/react-19-upgrade-guide) with new warnings to help us identify issues **before upgrading to React 19**.\\n\\nDocusaurus v3 depends on React `18.x`. When initializing a new Docusaurus sites, it will use that new React `18.3` release. It\'s also the case if you decide to upgrade your dependencies, or re-generate your package manager lockfile.\\n\\nIt turns out in its current state, **Docusaurus had a few of those extra warnings to fix**, notably this one immediately appearing on your dev console on any page load and navigation:\\n\\n> Warning: LoadableComponent uses the legacy contextTypes API which is no longer supported and will be removed in the next major release. Use React.createContext() with static contextType instead.\\n\\nIn [#10079](https://github.com/facebook/docusaurus/pull/10079), we got Docusaurus ready for React 19. We fixed all the React 18.3 warnings we encountered. In case we missed any, don\'t hesitate to [**report new warnings**](https://github.com/facebook/docusaurus/issues/10099) if you see them, to us but also to other Docusaurus third-party plugin authors.\\n\\n### `createSitemapItems`\\n\\nIn [#10083](https://github.com/facebook/docusaurus/pull/10083), we introduced a new flexible `createSitemapItems()` hook to the sitemap plugin. This enables users to create/filter/transform/enhance the sitemap items with their own custom logic.\\n\\n```ts\\nexport default {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n sitemap: {\\n // highlight-start\\n createSitemapItems: async ({\\n defaultCreateSitemapItems,\\n ...params\\n }) => {\\n const items = await defaultCreateSitemapItems(params);\\n return items.filter((item) => !item.url.includes(\'/tags/\'));\\n },\\n // highlight-end\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n### Pages plugin improvements\\n\\nThe Docusaurus [pages plugin](/docs/api/plugins/@docusaurus/plugin-content-pages) has historically been lagging behind the docs and blog plugins in terms of available feature.\\n\\nIn [#10032](https://github.com/facebook/docusaurus/pull/10032) we normalized the options available on each core content plugins by adding a few the missing page plugins APIs related to the edit url and the last update metadata displayed at the bottom on Markdown pages.\\n\\n```js\\nexport default {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n pages: {\\n // highlight-start\\n editUrl:\\n \'https://github.com/facebook/docusaurus/tree/main/website/src/pages\',\\n editLocalizedFiles: true,\\n showLastUpdateAuthor: true,\\n showLastUpdateTime: true,\\n // highlight-end\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n<IframeWindow url=\\"/examples/markdownPageExample\\" />\\n\\n:::note Only for Markdown pages\\n\\nThese new plugin options only apply to Markdown pages, and have no effect on React pages for which you have full control over the layout with JSX.\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#10064](https://github.com/facebook/docusaurus/pull/10064): new site config option `siteConfig.markdown.anchors.maintainCase`\\n- [#9767](https://github.com/facebook/docusaurus/pull/9767): new `docusaurus deploy --target-dir` option\\n- [#10042](https://github.com/facebook/docusaurus/pull/10042): new (experimental) plugin API: `route.props`\\n- [#10060](https://github.com/facebook/docusaurus/pull/10060): optimizes the App entrypoint, avoid useless re-renders on navigations\\n- [#10080](https://github.com/facebook/docusaurus/pull/10080): `<Admonition>` component can render properly without heading/icon\\n- [#10091](https://github.com/facebook/docusaurus/pull/10091): `<Tabs>` props can now override defaults\\n- [#10090](https://github.com/facebook/docusaurus/pull/10090): `docusaurus serve` works better with a `/baseUrl/` pathname prefix\\n- [#10070](https://github.com/facebook/docusaurus/pull/10070): add missing theme translations for `pt-BR`\\n- [#10025](https://github.com/facebook/docusaurus/pull/10025): doc sidebar item label now impacts the doc pagination label\\n\\nCheck the **[3.3.0 changelog entry](/changelog/3.3.0)** for an exhaustive list of changes."},{"id":"/releases/3.2","metadata":{"permalink":"/blog/releases/3.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx","source":"@site/blog/releases/3.2/index.mdx","title":"Docusaurus 3.2","description":"We are happy to announce Docusaurus 3.2.","date":"2024-03-29T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.475,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-03-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 3.3","permalink":"/blog/releases/3.3"},"nextItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"}},"content":"We are happy to announce **Docusaurus 3.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Faster builds\\n\\nWe worked hard to reduce the time it takes to build a Docusaurus site in production mode.\\n\\nBetween v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.\\n\\nLet\'s take an example. Our benchmark on the [React Native website upgrading to v3.2](https://github.com/facebook/react-native-website/pull/4072) reports the following results:\\n\\n- \ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)\\n- \ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)\\n\\nThe results will vary depending on your site\'s topology and the options you turned on, but we expect the largest sites will see the most significant improvements.\\n\\nNote that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our [performance issue](https://github.com/facebook/docusaurus/issues/4765) for upcoming improvements.\\n\\n<details>\\n <summary>What is the difference between a cold build and an incremental build?</summary>\\n\\nA cold build is when the Docusaurus caches are empty, generally after running `docusaurus clear`.\\n\\nAn incremental build happens when you run another time the `docusaurus build` command. Docusaurus automatically tries to \\"re-use\\" computations from former builds to make subsequent builds faster. In practice it\'s based on [Webpack persistent caching](https://webpack.js.org/guides/build-performance/#persistent-cache). To enable incremental builds on your CI server, you can persist the `node_modules/.cache` folder across builds.\\n\\n</details>\\n\\n### Faster Dev Server\\n\\nWe also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.\\n\\nThe way we initially implemented content reloading wasn\'t great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin\'s content, only that plugin will reload. It\'s hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25.\\n\\nWe plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don\'t run useless computations that would always keep giving the same result.\\n\\n### MDX partials table-of-contents\\n\\nWith [#9684](https://github.com/facebook/docusaurus/pull/9684), Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.\\n\\nDocusaurus and MDX allows you to [import one Markdown file into another](/docs/markdown-features/react#importing-markdown). We usually call the imported Markdown file a \\"partial\\", and use the `_` prefix so that this file does not lead to the creation of a new page.\\n\\n```md title=\\"myDoc.mdx\\"\\n# My Doc\\n\\n## Doc heading\\n\\nContent is imported from another MDX file:\\n\\nimport ImportedDoc from \'./\\\\_importedDoc.mdx\';\\n\\n<ImportedDoc />\\n```\\n\\n```md title=\\"_myPartial.mdx\\"\\n## Partial heading\\n\\nSome paragraph\\n```\\n\\nPreviously, the heading `Partial heading` did not appear in the table-of-contents, but now it will!\\n\\n### Blog improvements\\n\\nWe improved the blog plugin with several new options to make it even more powerful and flexible:\\n\\n- [#9912](https://github.com/facebook/docusaurus/pull/9912): you can now display the last update time and author of a blog post, a feature the docs plugin already had.\\n- [#9886](https://github.com/facebook/docusaurus/pull/9886): a new `processBlogPosts` option allow you to filter/transform/sort blog posts.\\n- [#9838](https://github.com/facebook/docusaurus/pull/9838): a new `pageBasePath` option allows you to customize the blog pagination URL segment (`/blog/page/2`)\\n\\n### Sitemap lastmod\\n\\nWith [#9954](https://github.com/facebook/docusaurus/pull/9954), the sitemap plugin has a new `lastmod` option that can now emit a `<lastmod>` tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog `last_update` front matter.\\n\\nWe also made it possible to opt-out of emitting `<priority>` and `<frequency>` tags, which are generally ignored by crawlers (notably [Google](https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping)).\\n\\nWe recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:\\n\\n```js\\n{\\n lastmod: \'date\',\\n priority: null,\\n changefreq: null,\\n}\\n```\\n\\n## Other changes\\n\\n- [#9687](https://github.com/facebook/docusaurus/pull/9687): new Vercel Analytics plugin\\n- [#9681](https://github.com/facebook/docusaurus/pull/9681) and [#9442](https://github.com/facebook/docusaurus/pull/9442): `docusaurus swizzle` and `create-docusaurus` CLIs now ask users if they prefer to use TypeScript\\n- [#9928](https://github.com/facebook/docusaurus/pull/9928): new Icelandic translation\\n- [#9928](https://github.com/facebook/docusaurus/pull/9931): new `allContentLoaded` plugin lifecycle (experimental)\\n\\nCheck the **[3.2.0 changelog entry](/changelog/3.2.0)** for an exhaustive list of changes."},{"id":"/releases/3.1","metadata":{"permalink":"/blog/releases/3.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx","source":"@site/blog/releases/3.1/index.mdx","title":"Docusaurus 3.1","description":"We are happy to announce Docusaurus 3.1.","date":"2024-01-05T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":1.665,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-01-05T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"},"nextItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"}},"content":"We are happy to announce **Docusaurus 3.1**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Broken anchors checker\\n\\nIn [#9528](https://github.com/facebook/docusaurus/pull/9528), we improved the built-in broken links checker to also detect broken anchors.\\n\\n![Docusaurus blog post social card](./img/broken-anchor.jpg)\\n\\n:::tip[Make it fail fast]\\n\\nThe new [`onBrokenAnchors`](/docs/api/docusaurus-config#onBrokenAnchors) option has value `warn` by default, for retro-compatibility reasons.\\n\\nWe recommend to turn it to `throw` and fail your CI builds instead of deploying broken anchors to productions.\\n\\n:::\\n\\n:::note\\n\\nFor users and plugin authors implementing custom `<Heading>` and `<Link>` components, we provide a new [`useBrokenLinks`](/docs/docusaurus-core#useBrokenLinks) React hook API.\\n\\n**Most Docusaurus users don\'t need to care about it**, built-in components (`docusaurus/Link` and `@theme/Heading`) already use it internally.\\n\\n:::\\n\\n### `parseFrontMatter` hook\\n\\nIn [#9624](https://github.com/facebook/docusaurus/pull/9624), we added a new [`siteConfig.markdown.parseFrontMatter` function hook](/docs/api/docusaurus-config#markdown).\\n\\nThis makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n // highlight-start\\n parseFrontMatter: async (params) => {\\n // Reuse the default parser\\n const result = await params.defaultParseFrontMatter(params);\\n\\n // Process front matter description placeholders\\n result.frontMatter.description =\\n result.frontMatter.description?.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n\\n // Create your own front matter shortcut\\n if (result.frontMatter.i_do_not_want_docs_pagination) {\\n result.frontMatter.pagination_prev = null;\\n result.frontMatter.pagination_next = null;\\n }\\n\\n // Rename an unsupported front matter coming from another system\\n if (result.frontMatter.cms_seo_summary) {\\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\\n delete result.frontMatter.cms_seo_summary;\\n }\\n\\n return result;\\n },\\n // highlight-end\\n },\\n};\\n```\\n\\nRead the [front matter guide](/docs/markdown-features#front-matter) and the [`parseFrontMatter` API ref](/docs/api/docusaurus-config#markdown) for details.\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#9674](https://github.com/facebook/docusaurus/pull/9674): add `siteConfig.markdown.remarkRehypeOptions` to pass options to `remark-rehype`, letting you customize things such as MDX footnote label\\n- [#9671](https://github.com/facebook/docusaurus/pull/9671): add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML\\n- [#9610](https://github.com/facebook/docusaurus/pull/9610): enable CLI port configuration via `PORT` environment variable\\n- [#9477](https://github.com/facebook/docusaurus/pull/9477): complete Brazilian Portuguese (pt-BR) translations\\n\\nCheck the **[3.1.0 changelog entry](/changelog/3.1.0)** for an exhaustive list of changes."},{"id":"/releases/3.0","metadata":{"permalink":"/blog/releases/3.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx","source":"@site/blog/releases/3.0/index.mdx","title":"Announcing Docusaurus 3.0","description":"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73","date":"2023-10-31T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":10.515,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Announcing Docusaurus 3.0","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-10-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"},"nextItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"}},"content":"Today, we are happy to **announce Docusaurus 3.0**! \ud83e\udd73\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nThis is a new **major version** of Docusaurus, coming with **new exciting features** and upgraded dependencies.\\n\\nIn line with the [**Semantic Versioning**](https://semver.org/) principles, this release includes **breaking changes** we documented thoroughly in the [**v3 upgrade guide**](/docs/migration/v3/). Breaking changes can be bothersome, but they are necessary to set the ground for a **new wave of Docusaurus features** we plan to implement.\\n\\n![v3.0 social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\nWe initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, **upgrading to MDX v3** is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding [compatibility options for MDX v1](/docs/api/docusaurus-config#markdown).\\n\\nThe simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:\\n\\n- [Prepare your site](/blog/preparing-your-site-for-docusaurus-v3) ahead of time, incrementally, while staying on Docusaurus v2\\n- [Set up visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) to catch unexpected visual changes happening during the upgrade\\n\\n:::info About Docusaurus v2\\n\\nAccording to our [release process](/community/release-process#stable-version), Docusaurus v2 has now entered **maintenance mode**. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.\\n\\n:::\\n\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Breaking changes\\n\\nThis section only gives you a quick glance. All the breaking changes are thoroughly documented in the [**v3 upgrade guide**](/docs/migration/v3).\\n\\nDocusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:\\n\\n- Node.js v16 \u27a1\ufe0f v18\\n- React v17 \u27a1\ufe0f v18\\n- MDX v1 \u27a1\ufe0f v3\\n- TypeScript v4 \u27a1\ufe0f v5\\n- prism-react-renderer v1 \u27a1\ufe0f v2\\n- react-live v2 \u27a1\ufe0f v4\\n- Mermaid v9 \u27a1\ufe0f v10\\n- import-fresh v3 \u27a1\ufe0f jiti v1\\n- remark-emoji v2 \u27a1\ufe0f v4\\n\\nA typical `package.json` dependency upgrade looks like:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n // upgrade to Docusaurus v3\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0\\",\\n // upgrade to MDX v3\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n // upgrade to prism-react-renderer v2.0+\\n- \\"prism-react-renderer\\": \\"^1.3.5\\",\\n+ \\"prism-react-renderer\\": \\"^2.1.0\\",\\n // upgrade to React v18.0+\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n // upgrade Docusaurus dev dependencies to v3\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\",\\n- \\"@docusaurus/types\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0\\",\\n+ \\"@docusaurus/types\\": \\"3.0.0\\"\\n }\\n \\"engines\\": {\\n // require Node.js 18.0+\\n- \\"node\\": \\">=16.14\\"\\n+ \\"node\\": \\">=18.0\\"\\n }\\n }\\n```\\n\\nApart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn\'t have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new default blog RSS feed limit of 20 entries\\n- [#9308](https://github.com/facebook/docusaurus/pull/9308): fix and re-introduce the `:::warning` admonition, deprecate `:::caution`\\n- [#9310](https://github.com/facebook/docusaurus/pull/9310): remove the legacy versioned sidebar id prefix, used for sites versioned before `v2.0.0-beta.10` (December 2021)\\n- [#7966](https://github.com/facebook/docusaurus/pull/7966): refactor docs theme components, eventually requiring to you re-swizzle them\\n\\n## Highlights\\n\\nBelow is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0).\\n\\n### Markdown\\n\\nDocusaurus v3 upgraded from MDX v1 to MDX v3:\\n\\n- in [#8288](https://github.com/facebook/docusaurus/pull/8288), we upgraded to [**MDX v2**](https://mdxjs.com/blog/v2/) ([migration guide](https://mdxjs.com/migrating/v2/))\\n- in [#9451](https://github.com/facebook/docusaurus/pull/9451), we upgraded to [**MDX v3**](https://mdxjs.com/blog/v3/) ([migration guide](https://mdxjs.com/migrating/v3/))\\n\\nThis new MDX version is **much better for content writers and plugin authors**, and lays the ground for implementing new exciting Markdown features.\\n\\n:::warning MDX v3 - the main challenge\\n\\nThe transition from MDX v1 to MDX v3 is the **main challenge** to the adoption of Docusaurus v3.\\n\\nSome documents that compiled successfully under Docusaurus v2 might now **fail to compile** under Docusaurus v3, while others might **render differently**.\\n\\nMost breaking changes come from [MDX v2](https://mdxjs.com/blog/v2/), and [MDX v3](https://mdxjs.com/blog/v3/) is a relatively small release. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\n**Don\'t be intimidated**. Most problems are **easy to fix** and often related to `{` and `<` characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command [`npx docusaurus-mdx-checker`](https://github.com/slorber/docusaurus-mdx-checker) to help you get an estimate of the work to be done, and we recommend to [prepare your site in advance](/blog/preparing-your-site-for-docusaurus-v3).\\n\\nIf you created custom [MDX plugins](/docs/markdown-features/plugins) (Remark/Rehype), the AST is slightly different, and you might need to refactor them.\\n\\n:::\\n\\nThis notably enables us to add a [CommonMark mode](/docs/markdown-features#mdx-vs-commonmark) that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and **experimental** and limited ([some Docusaurus features will not work](https://github.com/facebook/docusaurus/issues/9092)). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret `.md` files as CommonMark in an upcoming major version, and recommend to use the `.mdx` extension for any file using JSX or ES modules.\\n\\nWe also introduced a new way to [configure Markdown globally for your site](/docs/api/docusaurus-config#markdown), and plan to add more flexible options later.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n format: \'mdx\',\\n mermaid: true,\\n preprocessor: ({filePath, fileContent}) => {\\n return fileContent.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n },\\n mdx1Compat: {\\n comments: true,\\n admonitions: true,\\n headingIds: true,\\n },\\n },\\n};\\n```\\n\\nDocusaurus now uses the [remark-directive](https://github.com/remarkjs/remark-directive) plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own [custom directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) such as `:textDirective`, `::leafDirective` or `:::containerDirective`.\\n\\n### ESM and TypeScript configs {#esm-ts-configs}\\n\\nIn [#9317](https://github.com/facebook/docusaurus/pull/9317), we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.\\n\\nHere are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type * as Preset from \'@docusaurus/preset-classic\';\\n\\nconst config: Config = {\\n title: \'My Site\',\\n favicon: \'img/favicon.ico\',\\n // your site config ...\\n presets: [\\n [\\n \'classic\',\\n {\\n // your preset config ...\\n } satisfies Preset.Options,\\n ],\\n ],\\n themeConfig: {\\n // your theme config ...\\n } satisfies Preset.ThemeConfig,\\n};\\n\\nexport default config;\\n```\\n\\n```ts title=\\"sidebars.ts\\"\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n\\nconst sidebars: SidebarsConfig = {\\n docs: [\'introduction\'],\\n};\\n\\nexport default sidebars;\\n```\\n\\n### Unlisted content\\n\\nDocusaurus already supported a `draft: true` front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.\\n\\nIn [#8004](https://github.com/facebook/docusaurus/pull/8004), we introduced a new `unlisted: true` front matter option, which will keep your pages available in production builds, while \\"hiding\\" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.\\n\\nUnlisted content will:\\n\\n- be excluded from `sitemap.xml`\\n- be excluded from SEO results thanks to `<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />`\\n- be excluded from blog RSS feeds\\n- be excluded from Algolia DocSearch results\\n- be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...\\n\\nUnlisted content will also display a banner so that you don\'t forget to turn it off once your content is ready for prime time. Here\'s an example of an [unlisted blog post](/tests/blog/unlisted-post):\\n\\n<IframeWindow url=\\"/tests/blog/unlisted-post\\" />\\n\\n### React 18\\n\\nIn [#8961](https://github.com/facebook/docusaurus/pull/8961), we upgraded to React 18. This is important, notably for the [gradual adoption of Concurrent React features](https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features), as well as upcoming exciting features such as [build-time React Server Components](https://github.com/facebook/docusaurus/issues/9089).\\n\\nThis new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), notably the new [automatic batching](https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching) behavior.\\n\\n:::danger Experimental support for React 18 features\\n\\nReact 18 comes with new features:\\n\\n- `<Suspense>`\\n- `React.lazy()`\\n- `startTransition()`\\n\\nTheir Docusaurus support is considered as **experimental**. We might have to adjust the integration in the future, leading to a different runtime behavior.\\n\\n:::\\n\\n### Automatic JSX runtime\\n\\nDocusaurus now uses the [\\"automatic\\" JSX runtime](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html).\\n\\nIt is not needed anymore to import React in JSX files that do not use any React API.\\n\\n```diff title=\\"src/components/MyComponent.js\\"\\n- import React from \'react\';\\n\\n export default function MyComponent() {\\n return <div>Hello</div>;\\n }\\n```\\n\\n### Debug builds\\n\\nIt is now possible to build your static site in dev mode.\\n\\n```bash\\ndocusaurus build --dev\\n```\\n\\n:::tip Debug React-related problems\\n\\nDocusaurus will log more errors to the console, notably React 18 hydration errors through the new [`onRecoverableError` callback](https://react.dev/reference/react-dom/client/hydrateRoot#parameters).\\n\\nThis new build mode is particularly helpful for **troubleshooting React problems**. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the [React Error Decoder page](https://reactjs.org/docs/error-decoder.html/).\\n\\n:::\\n\\n### TypeScript\\n\\nDocusaurus v3 now requires a minimum version of TypeScript 5.0.\\n\\nWe re-internalized the base recommended TypeScript config to a new official package:\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\nWe also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new [TypeScript config files](#esm-ts-configs):\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type {Options, ThemeConfig} from \'@docusaurus/preset-classic\';\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n```\\n\\n### Code blocks\\n\\nIn [#9316](https://github.com/facebook/docusaurus/pull/9316), we improved on syntax highlighting thanks to the [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) v2 upgrade. For example, a bash param `--save` is now colored:\\n\\n```bash\\nnpm install --save some-package\\n```\\n\\nThe [interactive code editor](/docs/markdown-features/code-blocks#interactive-code-editor) also upgrades to [react-live](https://github.com/FormidableLabs/react-live) v4, coming with a new [sucrase](https://github.com/alangpierce/sucrase) compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.\\n\\n```js live\\nfunction Hello() {\\n const name: string = \'World\';\\n return <div>Hello {name}</div>;\\n}\\n```\\n\\nIn [#8982](https://github.com/facebook/docusaurus/pull/8982) and [#8870](https://github.com/facebook/docusaurus/pull/8870), we also added [magic comments](/docs/markdown-features/code-blocks#custom-magic-comments) support for TeX-like, Haskell-like, and WebAssembly comment syntax.\\n\\n```haskell title=\\"haskell.hs\\"\\nstringLength :: String -> Int\\n-- highlight-next-line\\nstringLength [] = 0\\nstringLength (x:xs) = 1 + stringLength xs\\n```\\n\\n```matlab title=\\"matlab.m\\"\\n% highlight-start\\nfunction result = times2(n)\\n result = n * 2;\\nend\\n% highlight-end\\nx = 10;\\n% highlight-next-line\\ny = times2(x);\\n```\\n\\n### Mermaid diagrams\\n\\nIn [#9305](https://github.com/facebook/docusaurus/pull/9305), we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.\\n\\n<details>\\n <summary>Mindmap</summary>\\n\\n```mermaid\\nmindmap\\n root((mindmap))\\n Research\\n Creative techniques\\n Strategic planning\\n Argument mapping\\n Tools\\n Pen and paper\\n Mermaid\\n```\\n\\n</details>\\n\\n<details>\\n <summary>Quadrant chart</summary>\\n\\n```mermaid\\nquadrantChart\\n title Reach and engagement of campaigns\\n x-axis Low Reach --\x3e High Reach\\n y-axis Low Engagement --\x3e High Engagement\\n quadrant-1 We should expand\\n quadrant-2 Need to promote\\n quadrant-3 Re-evaluate\\n quadrant-4 May be improved\\n Campaign A: [0.3, 0.6]\\n Campaign B: [0.45, 0.23]\\n Campaign C: [0.57, 0.69]\\n Campaign D: [0.78, 0.34]\\n Campaign E: [0.40, 0.34]\\n Campaign F: [0.35, 0.78]\\n```\\n\\n</details>\\n\\n### Query-string data attributes\\n\\nIn [#9028](https://github.com/facebook/docusaurus/pull/9028), we made it possible to set custom HTML [data attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*) though `docusaurus-data-x` query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.\\n\\n```css title=\\"/src/css/custom.css\\"\\nhtml[data-navbar=\'false\'] .navbar {\\n display: none;\\n}\\n\\nhtml[data-red-border] div#__docusaurus {\\n border: red solid thick;\\n}\\n```\\n\\n<IframeWindow url=\\"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border\\" />\\n\\n### Other features\\n\\nOther new features worth mentioning:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new blog `feedOptions.limit` option\\n- [#9071](https://github.com/facebook/docusaurus/pull/9071): add normalized SEO front matter support for the pages plugin\\n- [#9171](https://github.com/facebook/docusaurus/pull/9028): the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url\\n- [#9171](https://github.com/facebook/docusaurus/pull/9171): new ESLint rule [`no-html-links`](/docs/api/misc/@docusaurus/eslint-plugin/no-html-links)\\n- [#8384](https://github.com/facebook/docusaurus/pull/8384): new ESLint rule [`prefer-docusaurus-heading`](/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading)\\n\\nRead [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0) for an exhaustive list of changes.\\n\\n## Conclusion\\n\\nThis release comes with a few features, but more importantly **upgrades many pieces of the Docusaurus infrastructure**.\\n\\nThe **MDX upgrade** consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.\\n\\nNow that we\'ve caught up with our infrastructure, we\'ll be back **delivering useful documentation features** very soon, in upcoming minor versions.\\n\\nWe would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a **competitive solution** that stands out for its great **flexibility**."},{"id":"/preparing-your-site-for-docusaurus-v3","metadata":{"permalink":"/blog/preparing-your-site-for-docusaurus-v3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","source":"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","title":"Preparing your site for Docusaurus v3","description":"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.","date":"2023-09-29T00:00:00.000Z","tags":[{"inline":false,"label":"Maintenance","permalink":"/blog/tags/maintenance"}],"readingTime":13.975,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Preparing your site for Docusaurus v3","authors":["slorber"],"tags":["maintenance"],"slug":"/preparing-your-site-for-docusaurus-v3","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"},"nextItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},"content":":::warning\\n\\nThis blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the [upgrade guide](https://docusaurus.io/docs/next/migration/v3) for the most up-to-date migration steps.\\n\\n:::\\n\\n**Docusaurus v3** is now [**in beta**](https://github.com/facebook/docusaurus/discussions/9312) and the official release is around the corner. This is the perfect time to start **preparing your site** for this new major version.\\n\\nDocusaurus v3 comes with a few **breaking changes**, many of which can be **handled today under Docusaurus v2**. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.\\n\\nThe main breaking change is the upgrade from MDX v1 to MDX v3. Read the [**MDX v2**](https://mdxjs.com/blog/v2/) and [**MDX v3**](https://mdxjs.com/blog/v3/) release notes for details. MDX will now compile your Markdown content **more strictly** and with **subtle differences**.\\n\\nThis article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.\\n\\n![Preparing your site for Docusaurus v3 - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n:::warning\\n\\nThis article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the [v3.0.0-beta.0 release notes](https://github.com/facebook/docusaurus/discussions/9312) for an exhaustive list.\\n\\n:::\\n\\n:::tip Don\'t be afraid\\n\\nThere\'s a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.\\n\\nIf your site is relatively small, with only a few customizations, you can probably [upgrade to Docusaurus v3](#try-docusaurus-v3-today) immediately.\\n\\n:::\\n\\n## Preparatory work\\n\\nBefore preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest [Docusaurus v2 version](/versions).\\n\\nDepending on the complexity of your site, it may be a good idea to adopt the [visual regression testing workflow](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.\\n\\nWe also recommend using the `.mdx` extension whenever you use JSX, `import`, or `export` (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, `.md` files will be parsed as standard [CommonMark](https://commonmark.org/), which does not support these features. In Docusaurus v3, `.md` files keep being compiled as MDX files, but it will be possible to [opt-in for CommonMark](https://github.com/facebook/docusaurus/issues/3018).\\n\\n## Preparing content for MDX v3\\n\\nMDX is a major dependency of Docusaurus responsible for compiling your `.md` and `.mdx` files to React components.\\n\\nMDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of `{` and `<` characters.\\n\\nUpgrading MDX comes with all the breaking changes documented on the [MDX v2](https://mdxjs.com/blog/v2/) and [MDX v3](https://mdxjs.com/blog/v3/) release blog posts. Most breaking changes come from MDX v2. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\nMake sure to also read our updated [**MDX and React**](/docs/markdown-features/react) documentation page.\\n\\n:::tip Ask for help\\n\\nWe have a dedicated [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053) discussion.\\n\\n:::\\n\\n### Using the MDX playground\\n\\nThe MDX playground is your new best friend. It permits to understand how your content is **compiled to React components**, and troubleshoot compilation or rendering issues in isolation.\\n\\nEach MDX version comes with its own playground:\\n\\n- [MDX playground - current version](https://mdxjs.com/playground/)\\n- [MDX playground - v1](https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/)\\n\\n<details>\\n <summary>Configuring the MDX playground options for Docusaurus</summary>\\n\\nTo obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the [MDX playground](https://mdxjs.com/playground/):\\n\\n- Use `MDX`\\n- Use `remark-gfm`\\n- Use `remark-directive`\\n\\n![Screenshot of the MDX playground\'s options panel, with only the \\"Use `MDX`\\", \\"Use `remark-gfm`\\", and \\"Use `remark-directive`\\" options checked](./img/mdx2-playground-options.png)\\n\\n</details>\\n\\nUsing the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.\\n\\n:::tip Making your content future-proof\\n\\nThe goal will be to refactor your problematic content so that it **works fine with both versions of MDX**. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.\\n\\n:::\\n\\n### Using the MDX checker CLI\\n\\nWe provide a [docusaurus-mdx-checker](https://github.com/slorber/docusaurus-mdx-checker) CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.\\n\\n```bash\\nnpx docusaurus-mdx-checker\\n```\\n\\nFor each compilation issue, the CLI will log the file path and a line number to look at.\\n\\n![Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages](./img/mdx-checker-output.png)\\n\\n:::tip\\n\\nUse this CLI to estimate of how much work will be required to make your content compatible with MDX v3.\\n\\n:::\\n\\n:::warning\\n\\nThis CLI is a best effort, and will only report compilation errors.\\n\\nIt will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using [visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing).\\n\\n:::\\n\\n### Common MDX problems\\n\\nWe upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:\\n\\n- [Docusaurus PR](https://github.com/facebook/docusaurus/pull/8288)\\n- [React-Native PR](https://github.com/facebook/react-native-website/pull/3780)\\n- [Jest PR](https://github.com/jestjs/jest/pull/14463)\\n\\nThese upgrades permitted us to aggregate the most common content problems, and document how to best handle them.\\n\\n#### Bad usage of `{`\\n\\nThe `{` character is used for opening [JavaScript expressions](https://mdxjs.com/docs/what-is-mdx/#expressions). MDX will now fail if what you put inside `{expression}` is not a valid expression.\\n\\n```md title=\\"example.md\\"\\nThe object shape looks like {username: string, age: number}\\n```\\n\\n:::danger Error message\\n\\n> Could not parse expression with acorn: Unexpected content after expression\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `{username: string, age: number}`\\n- Use the HTML code: `{`\\n- Escape it: `\\\\{`\\n\\n:::\\n\\n#### Bad usage of `<`\\n\\nThe `<` character is used for opening [JSX tags](https://mdxjs.com/docs/what-is-mdx/#jsx). MDX will now fail if it thinks your JSX is invalid.\\n\\n```md title=\\"example.md\\"\\nUse Android version <5\\n\\nYou can use a generic type like Array<T>\\n\\nFollow the template \\"Road to <YOUR_MINOR_VERSION>\\"\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `5` (U+0035) before name, expected a character that can start a name, such as a letter, `$`, or `_`\\n\\n> Expected a closing tag for `<T>` (1:6-1:9) before the end of `paragraph` end-tag-mismatch mdast-util-mdx-jsx\\n\\n> Expected a closing tag for `<YOUR_MINOR_VERSION>` (134:19-134:39) before the end of `paragraph`\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `Array<T>`\\n- Use the HTML code: `<` or `<`\\n- Escape it: `\\\\<` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Bad usage of GFM Autolink\\n\\nDocusaurus supports [GitHub Flavored Markdown (GFM)](https://github.github.com/gfm/), but [autolink](https://github.github.com/gfm/#autolinks) using the `<link>` syntax is not supported anymore by MDX.\\n\\n```md title=\\"example.md\\"\\n<sebastien@thisweekinreact.com>\\n\\n<http://localhost:3000>\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `@` (U+0040) in name, expected a name character such as letters, digits, `$`, or `_`; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use `[text](url)`)\\n\\n> Unexpected character `/` (U+002F) before local name, expected a character that can start a name, such as a letter, `$`, or `_` (note: to create a link in MDX, use `[text](url)`)\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse regular Markdown links, or remove the `<` and `>`. MDX and GFM are able to autolink literals already.\\n\\n{/* prettier-ignore */}\\n```md title=\\"example.md\\"\\nsebastien@thisweekinreact.com\\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\\n\\nhttp://localhost:3000\\n[http://localhost:3000](http://localhost:3000)\\n```\\n\\n:::\\n\\n#### Lower-case MDXComponent mapping\\n\\nFor users providing a [custom `MDXComponent`mapping](/docs/markdown-features/react#mdx-component-scope), components are now \\"sandboxed\\":\\n\\n- a `MDXComponent` mapping for `h1` only gets used for `# hi` but not for `<h1>hi</h1>`\\n- a **lower-cased** custom element name will not be substituted by its respective `MDXComponent` component anymore\\n\\n:::danger visual difference\\n\\nYour [`MDXComponent` component mapping](/docs/markdown-features/react#mdx-component-scope) might not be applied as before, and your custom components might no longer be used.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nFor native Markdown elements, you can keep using **lower-case**: `p`, `h1`, `img`, `a`...\\n\\nFor any other element, **use upper-case names**.\\n\\n```diff title=\\"src/theme/MDXComponents.js\\"\\n import MDXComponents from \'@theme-original/MDXComponents\';\\n\\n export default {\\n ...MDXComponents,\\n p: (props) => <p {...props} className=\\"my-paragraph\\"/>\\n- myElement: (props) => <div {...props} className=\\"my-class\\" />,\\n+ MyElement: (props) => <div {...props} className=\\"my-class\\" />,\\n };\\n```\\n\\n:::\\n\\n#### Unintended extra paragraphs\\n\\nIn MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected `<p>` tags.\\n\\n:::danger visual difference\\n\\nSee how this content is rendered differently by MDX v1 and v3.\\n\\n```md title=\\"example.md\\"\\n<div>Some **Markdown** content</div>\\n<div>\\n Some **Markdown** content\\n</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v1 output\\"\\n<div>Some **Markdown** content</div>\\n<div>Some **Markdown** content</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v3 output\\"\\n<div>Some <strong>Markdown</strong> content</div>\\n<div><p>Some <strong>Markdown</strong> content</p></div>\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you don\'t want an extra `<p>` tag, refactor content on a case by case basis to use a single-line JSX tag.\\n\\n```diff\\n <figure>\\n <img src=\\"/img/myImage.png\\" alt=\\"My alt\\" />\\n- <figcaption>\\n- My image caption\\n- </figcaption>\\n+ <figcaption>My image caption</figcaption>\\n </figure>\\n```\\n\\nIf your content contains \\"Markdown inlines\\" (`**`, `*`, `_`, `[link](/path)`), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.\\n\\n:::\\n\\n#### Unintended usage of directives\\n\\nDocusaurus v3 now uses [Markdown Directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) (implemented with [remark-directive](https://github.com/remarkjs/remark-directive)) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.\\n\\n```md title=\\"example.md\\"\\nThis is a :textDirective\\n\\n::leafDirective\\n\\n:::containerDirective\\n\\nContainer directive content\\n\\n:::\\n```\\n\\n:::danger Visual change\\n\\nDirectives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won\'t be rendered back in their original form.\\n\\n```md title=\\"example.md\\"\\nThe AWS re:Invent conf is great\\n```\\n\\nDue to `:Invent` being parsed as a text directive, this will now be rendered as:\\n\\n```\\nThe AWS re\\nconf is great\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\n- Use the HTML code: `:`\\n- Add a space after `:` (if it makes sense): `: text`\\n- Escape it: `\\\\:` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Unsupported indented code blocks\\n\\nMDX does not transform indented text as code blocks anymore.\\n\\n```md title=\\"example.md\\"\\n console.log(\\"hello\\");\\n```\\n\\n:::danger Visual change\\n\\nThe upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn\'t a code block anymore.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse the regular code block syntax instead of indentation:\\n\\n````md title=\\"example.md\\"\\n```js\\nconsole.log(\'hello\');\\n```\\n````\\n\\n:::\\n\\n### MDX plugins\\n\\nAll the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now [**ES Modules only**](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and do not support [CommonJS](https://nodejs.org/api/modules.html#modules-commonjs-modules) anymore.\\n\\nIn practice this means that you can\'t do `require(\\"remark-plugin\\")` anymore.\\n\\n:::tip How to prepare\\n\\nDocusaurus v3 now supports [**ES Modules**](https://flaviocopes.com/es-modules/) configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:\\n\\n```js title=\\"docusaurus.config.js\\"\\nimport remarkPlugin from \'remark-plugin\';\\n\\nexport default {\\n title: \'Docusaurus\',\\n /* site config using remark plugins here */\\n};\\n```\\n\\nIf you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the [Docusaurus config supports the usage of an async function](/docs/configuration#syntax-to-declare-docusaurus-config) to let you do so.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = async function () {\\n const myPlugin = (await import(\'remark-plugin\')).default;\\n return {\\n // site config...\\n };\\n};\\n```\\n\\n:::\\n\\n:::info For plugin authors\\n\\nIf you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a [dedicated support discussion](https://github.com/facebook/docusaurus/discussions/9337) to help plugin authors upgrade their code.\\n\\n:::\\n\\n## Other breaking changes\\n\\nApart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.\\n\\n### Node.js 18.0\\n\\nNode.js 16 [reached End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol), and Docusaurus v3 now requires **Node.js >= 18.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### React 18.0\\n\\nDocusaurus v3 now requires **React >= 18.0**.\\n\\nReact 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.\\n\\nSimple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.\\n\\n:::tip How to prepare\\n\\nRead the official [React v18.0](https://react.dev/blog/2022/03/29/react-v18) and [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), and look at your first-party React code to figure out which components might be affected this React 18 upgrade.\\n\\nWe recommend to particularly look for:\\n\\n- Automatic batching for stateful components\\n- New React hydration errors reported to the console\\n\\n:::\\n\\n### TypeScript 5.0\\n\\nDocusaurus v3 now requires **TypeScript >= 5.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### TypeScript base config\\n\\nThe official Docusaurus TypeScript config has been re-internalized from the external package [`@tsconfig/docusaurus`](https://www.npmjs.com/package/@tsconfig/docusaurus) to our new monorepo package [`@docusaurus/tsconfig`](https://www.npmjs.com/package/@docusaurus/tsconfig).\\n\\nThis new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.\\n\\n:::tip How to prepare\\n\\nThe new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"devDependencies\\": {\\n- \\"@tsconfig/docusaurus\\": \\"^1.0.7\\",\\n+ \\"@docusaurus/tsconfig\\": \\"^3.0.0-beta.0\\",\\n }\\n }\\n```\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\n:::\\n\\n### Admonition warning\\n\\nFor historical reasons, we support an undocumented admonition `:::warning` that renders with a red color.\\n\\n:::danger Warning\\n\\nThis is a Docusaurus v2 `:::warning` admonition.\\n\\n:::\\n\\nHowever, the color and icon is historically wrong. Docusaurus v3 re-introduces `:::warning` admonition officially, documents it, and fix the color and icon.\\n\\n:::warning\\n\\nThis is a Docusaurus v3 `:::warning` admonition.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you previously used the undocumented `:::warning` admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use `:::danger` instead.\\n\\nDocusaurus v3 also [deprecated the `:::caution`](https://github.com/facebook/docusaurus/pull/9308) admonition. Please refactor `:::caution` (yellow) to either `:::warning` (yellow) or `:::danger` (red).\\n\\n:::\\n\\n### Versioned sidebars\\n\\nThis breaking change will only affect **Docusaurus v2 early adopters** who versioned their docs before `v2.0.0-beta.10` (December 2021).\\n\\nWhen creating version `v1.0.0`, the sidebar file contained a prefix `version-v1.0.0/` that [Docusaurus v3 does not support anymore](https://github.com/facebook/docusaurus/pull/9310).\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"version-v1.0.0/docs\\": [\\n \\"version-v1.0.0/introduction\\",\\n \\"version-v1.0.0/prerequisites\\"\\n ]\\n}\\n```\\n\\n:::tip How to prepare\\n\\nYour Docusaurus v2 site is able to handle the 2 sidebar formats similarly.\\n\\nYou can remove the useless versioned prefix from your versioned sidebars.\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"docs\\": [\\"introduction\\", \\"prerequisites\\"]\\n}\\n```\\n\\n:::\\n\\n## Try Docusaurus v3 today {#try-docusaurus-v3-today}\\n\\nDocusaurus v3 is now [in beta](https://github.com/facebook/docusaurus/discussions/9312), and already used in production by [React-Native](https://reactnative.dev), [Jest](https://jestjs.io), and [our own website](https://docusaurus.io/).\\n\\nWe think this new Docusaurus version is **robust and ready to be deployed in production**. It should be released officially soon, after receiving a positive feedback from early adopters of our community.\\n\\nWe would really appreciate it if you try upgrading and report issues on the [3.0.0-beta.0 release discussion thread](https://github.com/facebook/docusaurus/discussions/9312).\\n\\nFor most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0-beta.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0-beta.0\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n \\"clsx\\": \\"^2.0.0\\",\\n \\"prism-react-renderer\\": \\"^1.3.5\\",\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0-beta.0\\"\\n }\\n }\\n```\\n\\n## Ask for help\\n\\nWe will be there to help you upgrade through the following support channels:\\n\\n- [Docusaurus v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9336)\\n- [Docusaurus v3 - Discord channel #migration-v2-to-v3](https://discord.com/channels/398180168688074762/1154771869094912090)\\n- [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053)\\n- [MDX v3 - Remark/Rehype Plugins Support](https://github.com/facebook/docusaurus/discussions/9337)\\n- [MDX v3 - Discord channel #migration-mdx-v3](https://discord.com/channels/398180168688074762/1116724556976111616)\\n\\nAlternatively, you can look for a paid [Docusaurus Service Provider](https://github.com/facebook/docusaurus/discussions/9281) to execute this upgrade for you. If your site is open source, you can also ask our community for [free, benevolent help](https://github.com/facebook/docusaurus/discussions/9283).\\n\\n## Conclusion\\n\\nDocusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.\\n\\nThe initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."},{"id":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","metadata":{"permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","source":"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","title":"Upgrading frontend dependencies with confidence","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","date":"2023-09-22T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":8.355,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"authors":["slorber"],"tags":["release"],"slug":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"},"nextItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"}},"content":"Frontend developers often need to **upgrade npm dependencies**, but those upgrades can feel scary and lead to **subtle UI side effects** not caught by your regular test suite.\\n\\nUpgrading Docusaurus is a good example: without reviewing all the pages one by one, it\'s hard to be sure there\'s no visual regression. **Docusaurus v3 is around the corner** (currently in [beta](https://github.com/facebook/docusaurus/discussions/9312)), and we would like to help you do this upgrade with confidence.\\n\\nThis article introduces a **visual regression testing** workflow based on [**GitHub Actions**](https://github.com/features/actions), [**Playwright**](https://playwright.dev/), and [**Argos**](https://argos-ci.com/). It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.\\n\\n![Upgrading frontend dependencies with confidence - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nThis workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as [React Native](https://reactnative.dev/), [Jest](https://jestjs.io/), and the [Docusaurus](https://docusaurus.io/) site itself.\\n\\nDocusaurus v3 comes with infrastructure changes and major dependency upgrades such as [MDX v3](https://mdxjs.com/blog/v3/) and [React 18](https://react.dev/blog/2022/03/29/react-v18), which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That\'s why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.\\n\\n## Workflow overview\\n\\nThe general idea is pretty simple:\\n\\n- Build your site in CI with [GitHub Actions](https://github.com/features/actions)\\n- Take screenshots of all `sitemap.xml` pages with [Playwright](https://playwright.dev/)\\n- Upload them to [Argos](https://argos-ci.com/)\\n- Do this for both Git branches `main` and `pr-branch`\\n- Compare the screenshots side-by-side in [Argos](https://argos-ci.com/)\\n\\nArgos will then **report visual differences** found between `main` and `pr-branch` as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.\\n\\n![Argos GitHub commit status](./img/argos-github-status.png)\\n\\n![Argos GitHub PR comment](./img/argos-github-comment.png)\\n\\nArgos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.\\n\\nCheck the [Docusaurus Argos page](https://app.argos-ci.com/meta-open-source/docusaurus) to explore our own website reports.\\n\\nHere is a more concrete example of Argos [reporting a visual regression](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838) found while upgrading the React-Native website:\\n\\n[![Argos GitHub PR comment](./img/argos-react-native-regression.png)](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838)\\n\\n## Workflow implementation\\n\\nThis section will describe the implementation details of each step of the workflow.\\n\\nYou will need to [sign up to Argos](https://app.argos-ci.com/signup) and [connect Argos to your GitHub repository](https://argos-ci.com/docs/github)\\n\\n### Dependencies\\n\\nThis workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:\\n\\n```bash\\nyarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio\\n```\\n\\n### GitHub Action\\n\\nThe GitHub action is responsible for executing the workflow for each Git branch.\\n\\nA minimal workflow could look like:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n\\njobs:\\n take-screenshots:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Check out repository code\\n uses: actions/checkout@v4\\n\\n - name: Use Node.js\\n uses: actions/setup-node@v3\\n with:\\n node-version: current\\n\\n - name: Install dependencies\\n run: yarn install --frozen-lockfile\\n\\n - name: Install Playwright browsers\\n run: yarn playwright install --with-deps chromium\\n\\n - name: Build the website\\n run: yarn docusaurus build\\n\\n - name: Take screenshots with Playwright\\n run: yarn playwright test\\n\\n - name: Upload screenshots to Argos\\n run: yarn argos upload ./screenshots\\n```\\n\\n### Playwright config\\n\\nPlaywright is responsible for taking screenshots of the website previously built locally by the GitHub action.\\n\\nA minimal [Playwright config](https://playwright.dev/docs/test-configuration) could look like:\\n\\n```ts title=\\"playwright.config.ts\\"\\nimport {devices} from \'@playwright/test\';\\nimport type {PlaywrightTestConfig} from \'@playwright/test\';\\n\\nconst config: PlaywrightTestConfig = {\\n webServer: {\\n port: 3000,\\n command: \'yarn docusaurus serve\',\\n },\\n projects: [\\n {\\n name: \'chromium\',\\n use: {\\n ...devices[\'Desktop Chrome\'],\\n },\\n },\\n ],\\n};\\n\\nexport default config;\\n```\\n\\n### Playwright test\\n\\nA Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.\\n\\n```ts title=\\"screenshot.spec.ts\\"\\nimport * as fs from \'fs\';\\nimport {test} from \'@playwright/test\';\\nimport {argosScreenshot} from \'@argos-ci/playwright\';\\nimport {extractSitemapPathnames, pathnameToArgosName} from \'./utils\';\\n\\n// Constants\\nconst siteUrl = \'http://localhost:3000\';\\nconst sitemapPath = \'./build/sitemap.xml\';\\nconst stylesheetPath = \'./screenshot.css\';\\nconst stylesheet = fs.readFileSync(stylesheetPath).toString();\\n\\n// Wait for hydration, requires Docusaurus v2.4.3+\\n// Docusaurus adds a <html data-has-hydrated=\\"true\\"> once hydrated\\n// See https://github.com/facebook/docusaurus/pull/9256\\nfunction waitForDocusaurusHydration() {\\n return document.documentElement.dataset.hasHydrated === \'true\';\\n}\\n\\nfunction screenshotPathname(pathname: string) {\\n test(`pathname ${pathname}`, async ({page}) => {\\n const url = siteUrl + pathname;\\n await page.goto(url);\\n await page.waitForFunction(waitForDocusaurusHydration);\\n await page.addStyleTag({content: stylesheet});\\n await argosScreenshot(page, pathnameToArgosName(pathname));\\n });\\n}\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath);\\n console.log(\'Pathnames to screenshot:\', pathnames);\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n<details>\\n <summary>Why do we take screenshots with Argos instead of Playwright?</summary>\\n\\nArgos has a [Playwright integration](https://argos-ci.com/docs/playwright) that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.\\n\\n</details>\\n\\n<details>\\n<summary>What\'s inside <code>utils.ts</code>?</summary>\\n\\nThis module contains implementation details that we choose to hide for clarity.\\n\\n```ts\\nimport * as cheerio from \'cheerio\';\\nimport * as fs from \'fs\';\\n\\n// Extract a list of pathnames, given a fs path to a sitemap.xml file\\n// Docusaurus generates a build/sitemap.xml file for you!\\nexport function extractSitemapPathnames(sitemapPath: string): string[] {\\n const sitemap = fs.readFileSync(sitemapPath).toString();\\n const $ = cheerio.load(sitemap, {xmlMode: true});\\n const urls: string[] = [];\\n $(\'loc\').each(function handleLoc() {\\n urls.push($(this).text());\\n });\\n return urls.map((url) => new URL(url).pathname);\\n}\\n\\n// Converts a pathname to a decent screenshot name\\nexport function pathnameToArgosName(pathname: string): string {\\n return pathname.replace(/^\\\\/|\\\\/$/g, \'\') || \'index\';\\n}\\n```\\n\\n</details>\\n\\n### Stylesheet\\n\\nScreenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as **false positive** visual regressions.\\n\\nFor this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read [Argos - About flaky tests docs](https://argos-ci.com/docs/about-flaky) for details.\\n\\n```css title=\\"screenshot.css\\"\\n/* Iframes can load lazily */\\niframe,\\n/* Avatars can be flaky due to using external sources: GitHub/Unavatar */\\n.avatar__photo,\\n/* Gifs load lazily and are animated */\\nimg[src$=\'.gif\'],\\n/* Algolia keyboard shortcuts appear with a little delay */\\n.DocSearch-Button-Keys > kbd,\\n/* The live playground preview can often display dates/counters */\\n[class*=\'playgroundPreview\'] {\\n visibility: hidden;\\n}\\n\\n/* Different docs last-update dates can alter layout */\\n.theme-last-updated,\\n/* Mermaid diagrams are rendered client-side and produce layout shifts */\\n.docusaurus-mermaid-container {\\n display: none;\\n}\\n```\\n\\n:::tip prevent layout shifts\\n\\nWe recommend hiding flaky UI elements affecting layout with `display: none;`.\\n\\nFor example, the docs \\"Last Updated on\\" might render on more than 1 line, eventually \\"pushing\\" the rest of your content further down, leading to Argos detecting many different pixels.\\n\\n:::\\n\\n## Example repository\\n\\nThe [slorber/docusaurus-argos-example](https://github.com/slorber/docusaurus-argos-example) repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.\\n\\n[![Docusaurus + Argos monorepo example screenshot](./img/docusaurus-argos-example-repo-screenshot.png)](https://github.com/slorber/docusaurus-argos-example)\\n\\nRelevant pull-requests:\\n\\n- [PR - Set up GitHub Action + Playwright + Argos](https://github.com/slorber/docusaurus-argos-example/pull/1): implements the minimal workflow described above\\n- [PR - Upgrading Docusaurus from v2 to v3](https://github.com/slorber/docusaurus-argos-example/pull/2): shows how Argos caught 3 visual regressions while upgrading\\n\\n:::tip More advanced example?\\n\\nBrowse the Docusaurus repository for a more advanced integration:\\n\\n- [GitHub Action](https://github.com/facebook/docusaurus/blob/main/.github/workflows/argos.yml)\\n- [Playwright + Argos tests](https://github.com/facebook/docusaurus/tree/main/argos)\\n\\n:::\\n\\n## Make it cheap\\n\\nThe tools we choose are implementation details of this visual regression testing workflow.\\n\\nFor Docusaurus, we choose [Argos](https://argos-ci.com/): it works well for us, and offers [free](https://argos-ci.com/pricing) and [open source](https://argos-ci.com/docs/open-source) plans. However, you are free to adopt alternative tools.\\n\\nIn case you don\'t mind storing large screenshots in Git, you can also try the free, self-hosted [Playwright Visual Comparisons](https://playwright.dev/docs/test-snapshots) and browse visual differences with `npx playwright show-report`. However, we found using a dedicated external tool is more convenient.\\n\\nExternal tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.\\n\\n### Limit the number of pathnames\\n\\nThe base setup involves taking a screenshot of every single pathname found in `sitemap.xml`. For large sites, that can lead to a lot of screenshots.\\n\\nYou can decide to filter the pathnames to only take screenshots of the most critical pages.\\n\\nFor the Docusaurus website, do not take screenshots for versioned docs pages:\\n\\n```ts title=\\"screenshot.spec.ts\\"\\n// highlight-start\\nfunction isVersionedDocsPathname(pathname: string): boolean {\\n return pathname.match(/^\\\\/docs\\\\/((\\\\d\\\\.\\\\d\\\\.\\\\d)|(next))\\\\//);\\n}\\n// highlight-end\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath)\\n // highlight-next-line\\n .filter(isVersionedDocsPathname);\\n\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n### Limit the workflow concurrency\\n\\nImplementing [GitHub Actions concurrency groups](https://docs.github.com/en/actions/using-jobs/using-concurrency) will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nconcurrency:\\n group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}\\n cancel-in-progress: true\\n```\\n\\n### Run your workflow conditionally\\n\\nIt\'s not worth running this workflow for every single commit and pull-request.\\n\\nFor example, if someone corrects a typo in your documentation, you probably don\'t want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that\'s a bit expected!\\n\\nFor the Docusaurus website, we only run the workflow for pull-request having the `Argos` label:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n # highlight-start\\n types:\\n - opened\\n - synchronize\\n - reopened\\n - labeled\\n # highlight-end\\n\\njobs:\\n take-screenshots:\\n # highlight-start\\n if: ${{ github.ref_name == \'main\' || (github.event_name == \'pull_request\' && contains(github.event.pull_request.labels.*.name, \'Argos\')) }}\\n # highlight-end\\n runs-on: ubuntu-latest\\n steps:\\n # Your job steps here ...\\n```\\n\\nThere are many options to explore, such as [triggering the workflow manually](https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow) or [only when files matching a specific pattern are modified](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#example-including-paths).\\n\\n## Conclusion\\n\\nI believe **visual regression testing is underused** in the frontend ecosystem.\\n\\nTaking full-page screenshots is a **low-hanging fruit** that is easy to set up and can help you **catch a new class of bugs** that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for **any kind of refactoring** that shouldn\'t change the user interface.\\n\\nSo why not give it a try?\\n\\nHappy hacking!\\n\\n## See also\\n\\nUseful documentation links:\\n\\n- [Playwright - Installation](https://playwright.dev/docs/intro)\\n- [Playwright - Test config guide](https://playwright.dev/docs/test-configuration)\\n- [Playwright - Test config API](https://playwright.dev/docs/api/class-testconfig)\\n- [Argos - Installation](https://argos-ci.com/docs/installation)\\n- [Argos - Use with GitHub Actions](https://argos-ci.com/docs/github-actions)\\n- [Argos - Use with Playwright](https://argos-ci.com/docs/playwright)\\n- [Argos - About flaky tests](https://argos-ci.com/docs/about-flaky)"},{"id":"/releases/2.4","metadata":{"permalink":"/blog/releases/2.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx","source":"@site/blog/releases/2.4/index.mdx","title":"Docusaurus 2.4","description":"We are happy to announce Docusaurus 2.4.","date":"2023-03-23T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":3.05,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-03-23T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},"nextItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"}},"content":"We are happy to announce **Docusaurus 2.4**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Sidebar item description\\n\\nIn [#8236](https://github.com/facebook/docusaurus/pull/8236), we made it possible to provide a new `description` attribute for docs sidebar items of type `link` and `category`.\\n\\n```tsx title=\\"sidebars.js\\"\\n[\\n {\\n type: \'link\',\\n label: \'Link with description\',\\n href: \'https://docusaurus.io\',\\n // highlight-next-line\\n description: \'Some link description\',\\n },\\n {\\n type: \'category\',\\n label: \'Category with description\',\\n // highlight-next-line\\n description: \'Some category description\',\\n items: [],\\n },\\n];\\n```\\n\\nThese descriptions will be used in category generated index pages.\\n\\n![Show sidebar category generated index with custom descriptions](./img/sidebar-item-description.jpg)\\n\\n### Theme Query String\\n\\nIn [#8708](https://github.com/facebook/docusaurus/pull/8708), we added the possibility to force Docusaurus to initialize itself in `light` or `dark` mode through a new `docusaurus-theme` query-string parameter.\\n\\nThis is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.\\n\\n<IframeWindow url=\\"/docs/?docusaurus-theme=light\\" />\\n<IframeWindow url=\\"/docs/?docusaurus-theme=dark\\" />\\n\\n### Remark plugin npm2yarn upgrade\\n\\nIn [#8690](https://github.com/facebook/docusaurus/pull/8690), we upgraded our Remark plugin [@docusaurus/remark-plugin-npm2yarn](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn) with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.\\n\\n````markdown\\nRun these commands!\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n````\\n\\n<BrowserWindow>\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n\\n</BrowserWindow>\\n\\n### gtag support for multiple tracking IDs\\n\\nIn [#8620](https://github.com/facebook/docusaurus/pull/8620) we added support for the [@docusaurus/plugin-google-gtag](/docs/api/plugins/@docusaurus/plugin-google-gtag) plugin to declare multiple tracking IDs.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n gtag: {\\n trackingID: [\\n // highlight-next-line\\n \'G-<YOUR-NEW-GA4-ID>\',\\n // highlight-next-line\\n \'UA-<YOUR-OLD-UA-ID>\',\\n ],\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n**[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/)** on **July 1, 2023**.\\n\\nDocusaurus users should migrate to Google Analytics 4. Google **does not permit to migrate your existing Universal Analytics data** to your new Google Analytics 4 property.\\n\\nTo preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (`UA-*`) and new one (`G-*`). Refer to the **[dedicated issue](https://github.com/facebook/docusaurus/issues/7221)** for details.\\n\\n:::\\n\\n### Developer Experience\\n\\nIn [#8736](https://github.com/facebook/docusaurus/pull/8736), we improved how we render error messages and added initial support to render the full causal chain of an error (see [ES2022 Error Cause](https://h3manth.com/ES2022/#error-cause)).\\n\\n:::tip\\n\\nTo see it in action, click here: <ErrorBoundaryTestButton cause=\\"Probably undefined is not a function \ud83d\ude04\\"/>\\n\\n:::\\n\\nIn [#8735](https://github.com/facebook/docusaurus/pull/8735) we also made navbar-related error messages clearer to help users understand what they did wrong.\\n\\n![Docusaurus navbar error message screenshot](./img/navbar-error.jpg)\\n\\n### Translations\\n\\nWe made it possible to translate some new elements:\\n\\n- [#8677](https://github.com/facebook/docusaurus/pull/8677) introduces a new `process.env.DOCUSAURUS_CURRENT_LOCALE` (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...\\n- [#8616](https://github.com/facebook/docusaurus/pull/8616) allows to translate the navbar and footer logo alt text\\n\\nWe added default theme translation support for multiple languages:\\n\\n- \ud83c\udded\ud83c\uddfa [#8668](https://github.com/facebook/docusaurus/pull/8668): Hungarian\\n- \ud83c\uddf3\ud83c\uddf4 [#8631](https://github.com/facebook/docusaurus/pull/8631): Norwegian (Bokm\xe5l)\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8674](https://github.com/facebook/docusaurus/pull/8674): respect `prefers-reduced-motion: reduce` media query\\n- [#8712](https://github.com/facebook/docusaurus/pull/8712): use a navbar item of type `docSidebar` in template\\n- [#8801](https://github.com/facebook/docusaurus/pull/8801): allow tabs children to be falsy\\n- [#8757](https://github.com/facebook/docusaurus/pull/8757): make search page react to external query-string changes\\n- [#8803](https://github.com/facebook/docusaurus/pull/8803): fix code block buttons position in RTL\\n- [#8615](https://github.com/facebook/docusaurus/pull/8615): fix color mode toggle when using dark navbar\\n- [#8699](https://github.com/facebook/docusaurus/pull/8699): fix navbar dropdown tab focus bug\\n\\nCheck the **[2.4.0 changelog entry](/changelog/2.4.0)** for an exhaustive list of changes."},{"id":"/releases/2.3","metadata":{"permalink":"/blog/releases/2.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx","source":"@site/blog/releases/2.3/index.mdx","title":"Docusaurus 2.3","description":"We are happy to announce Docusaurus 2.3.","date":"2023-01-27T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.89,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-01-27T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"},"nextItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"}},"content":"We are happy to announce **Docusaurus 2.3**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Google Tag Manager plugin\\n\\nGoogle Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.\\n\\nWe now have a [`@docusaurus/plugin-google-tag-manager`](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/) package that you can use alongside or as an alternative to the existing [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/) (refer to [this doc](https://support.google.com/tagmanager/answer/7582054) to understand when to use which solution).\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/) on **July 1, 2023**, and ask users to migrate to **Google Analytics 4**.\\n\\nTherefore, we are also **deprecating our existing [`@docusaurus/plugin-google-analytics`](/docs/api/plugins/@docusaurus/plugin-google-analytics)** package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/), or the [Google Tag Manager plugin](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/). Refer to the [dedicated Docusaurus issue](https://github.com/facebook/docusaurus/issues/7221) for details and questions.\\n\\n:::\\n\\n### Tabs Query String Support\\n\\nIt is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a `?qs-param=tab-value` search parameter.\\n\\nThis feature allows deep-linking to a specific documentation tab that will pre-selected on page load.\\n\\nWhen used alongside the `groupId` prop, the query string tab value takes precedence over the `localStorage` value.\\n\\nMake sure to check the [documentation](/docs/markdown-features/tabs#query-string) and the demo below to understand how it works:\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n```tsx\\n<Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n</Tabs>\\n```\\n\\n<BrowserWindow>\\n <Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n </Tabs>\\n</BrowserWindow>\\n\\n### Nested admonitions\\n\\nIt is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:\\n\\n```md\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n```\\n\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n\\n### Blog `createFeedItems`\\n\\nA new blog plugin option [`feedOptions.createFeedItems`](/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn) gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\n[\\n \'@docusaurus/preset-classic\',\\n {\\n blog: {\\n feedOptions: {\\n // highlight-start\\n createFeedItems: async (params) => {\\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\\n return defaultCreateFeedItems({\\n // keep only the 10 most recent blog posts in the feed\\n blogPosts: blogPosts.filter((item, index) => index < 10),\\n ...rest,\\n });\\n },\\n // highlight-end\\n },\\n },\\n },\\n];\\n```\\n\\n### Translations\\n\\nWe added or completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf8\ud83c\uddee [#8541](https://github.com/facebook/docusaurus/pull/8541) Slovenian\\n- \ud83c\uddf9\ud83c\uddf7 [#8289](https://github.com/facebook/docusaurus/pull/8289) Turkish\\n- \ud83c\uddee\ud83c\uddf7 [#8406](https://github.com/facebook/docusaurus/pull/8406) Farsi\\n- \ud83c\uddf5\ud83c\uddf1 [#8525](https://github.com/facebook/docusaurus/pull/8525) Polish\\n- \ud83c\udde8\ud83c\uddf3 [#8423](https://github.com/facebook/docusaurus/pull/8423) Chinese\\n- \ud83c\uddf8\ud83c\uddea [#8312](https://github.com/facebook/docusaurus/pull/8312) Swedish\\n- \ud83c\uddfb\ud83c\uddf3 [#8450](https://github.com/facebook/docusaurus/pull/8450) Vietnamese\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8463](https://github.com/facebook/docusaurus/pull/8463) and [#8328](https://github.com/facebook/docusaurus/pull/8328): fix some annoying Docusaurus layout issues\\n- [#8539](https://github.com/facebook/docusaurus/pull/8539): Algolia plugin `options.searchPagePath` should be correctly applied to search modal footer\\n- [#8462](https://github.com/facebook/docusaurus/pull/8462): Algolia plugin now makes it easier to transform displayed search results with custom logic\\n- [#8397](https://github.com/facebook/docusaurus/pull/8397): the `deploy` CLI now understands git url `insteadOf` config\\n\\nCheck the **[2.3.0 changelog entry](/changelog/2.3.0)** for an exhaustive list of changes."},{"id":"/releases/2.2","metadata":{"permalink":"/blog/releases/2.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx","source":"@site/blog/releases/2.2/index.mdx","title":"Docusaurus 2.2","description":"We are happy to announce Docusaurus 2.2.","date":"2022-10-29T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":2.2,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2022-10-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"},"nextItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"}},"content":"We are happy to announce **Docusaurus 2.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n## Highlights\\n\\n### Mermaid diagrams\\n\\nIn [#7490](https://github.com/facebook/docusaurus/pull/7490), we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also [added support recently](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/). You can create Mermaid diagrams using Markdown code blocks:\\n\\n````md\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n````\\n\\n````mdx-code-block\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\n\\n<BrowserWindow>\\n\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n\\n</BrowserWindow>\\n\\n````\\n\\nMake sure to check the [documentation](/docs/markdown-features/diagrams), and the [more advanced examples](/tests/pages/diagrams)\\n\\n### Config `headTags`\\n\\nIn [#8151](https://github.com/facebook/docusaurus/pull/8151), we added the ability to apply arbitrary HTML `<head>` tags to all pages of your site.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n headTags: [\\n {\\n tagName: \'link\',\\n attributes: {\\n rel: \'icon\',\\n href: \'/img/docusaurus.png\',\\n },\\n },\\n ],\\n};\\n```\\n\\n### Accessibility\\n\\nWe did several accessibility improvements:\\n\\n- [#8207](https://github.com/facebook/docusaurus/pull/8207): improves keyboard navigation for mobile drawer hamburger button\\n- [#8161](https://github.com/facebook/docusaurus/pull/8161): improves keyboard navigation for tabs\\n- [#8204](https://github.com/facebook/docusaurus/pull/8204): makes the skip to content button support progressive enhancement\\n- [#8174](https://github.com/facebook/docusaurus/pull/8174): improves screen reader announcement when toggling between light/dark mode\\n\\n### Developer Experience\\n\\nWe made validation stricter and improved error messages:\\n\\n- [#8234](https://github.com/facebook/docusaurus/pull/8234): in case of doc processing failure, prints the problematic markdown file path in the error message\\n- [#8192](https://github.com/facebook/docusaurus/pull/8192) and [#8159](https://github.com/facebook/docusaurus/pull/8159): validates `siteConfig.url` more strictly and with better error message\\n- [#8066](https://github.com/facebook/docusaurus/pull/8066): makes config `url` and `baseUrl` fail-safe and less sensitive to the presence or absence of a leading or trailing slash\\n\\n### Translations\\n\\nWe completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf9\ud83c\uddf7 [#8105](https://github.com/facebook/docusaurus/pull/8105): completes Turkish translations\\n- \ud83c\uddf7\ud83c\uddfa [#8253](https://github.com/facebook/docusaurus/pull/8253): completes Russian translations\\n- \ud83c\uddeb\ud83c\uddf7 [#8243](https://github.com/facebook/docusaurus/pull/8243): completes French translations\\n- \ud83c\uddef\ud83c\uddf5 [#8075](https://github.com/facebook/docusaurus/pull/8075): completes Japanese translations\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8210](https://github.com/facebook/docusaurus/pull/8210): the `docusaurus swizzle` CLI has a new `--config` option\\n- [#8109](https://github.com/facebook/docusaurus/pull/8109): mobile navigation performance optimizations, prefetch resources earlier\\n- [#8059](https://github.com/facebook/docusaurus/pull/8059): versions/locales navbar dropdowns preserve hash and querystring on navigation\\n- [#8227](https://github.com/facebook/docusaurus/pull/8227): the client redirect plugin preserves hash and querystring on redirect\\n\\nCheck the **[2.2.0 changelog entry](/changelog/2.2.0)** for an exhaustive list of changes."},{"id":"/2022/09/01/docusaurus-2.1","metadata":{"permalink":"/blog/2022/09/01/docusaurus-2.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx","source":"@site/blog/2022/09-01-docusaurus-2.1/index.mdx","title":"Docusaurus 2.1","description":"We are happy to announce Docusaurus 2.1, our very first minor version release.","date":"2022-09-01T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"},"nextItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"}},"content":"We are happy to announce **Docusaurus 2.1**, our very first minor version release.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.1 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### DocCardList improvements\\n\\nIn [#8008](https://github.com/facebook/docusaurus/pull/8008), we simplified the usage of the`<DocCardList>` component, that is notably used on sidebar category generated index pages.\\n\\nThe `items` prop is now optional, and will be automatically inferred from the content of the parent sidebar category:\\n\\n```diff\\nimport DocCardList from \'@theme/DocCardList\';\\n- import {useCurrentSidebarCategory} from \'@docusaurus/theme-common\';\\n\\n- <DocCardList items={useCurrentSidebarCategory().items}/>\\n+ <DocCardList/>\\n```\\n\\nAlso, we made it possible to use it on any document, including regular docs not linked to any sidebar category.\\n\\n![simplified DocCardList component](./img/doc-card-list.png)\\n\\n### `noindex` improvements\\n\\nWe improved the support of the [`noindex` meta `robots` directive](https://developers.google.com/search/docs/advanced/crawling/block-indexing), a way to signal search engines you don\'t want a specific page to be indexed.\\n\\nIn [#7963](https://github.com/facebook/docusaurus/pull/7963), we allow `noindex` to be configured on a per-docs-version basis.\\n\\nUse the following plugin options to tell crawlers you don\'t want the `1.0.0` version to be indexed:\\n\\n```jsx\\nconst options = {\\n versions: {\\n \'1.0.0\': {\\n noIndex: true,\\n },\\n },\\n};\\n```\\n\\nIn practice, Docusaurus will add the following meta to each page of that version:\\n\\n```html\\n<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />\\n```\\n\\nIn [#7964](https://github.com/facebook/docusaurus/pull/7964), we also fixed a bug where the sitemap plugin would still contain pages that have a `noindex` directive. Now the sitemap plugin will reliably filter out all the pages containing `noindex` directives.\\n\\n### Overriding default meta tags\\n\\nIn [#7952](https://github.com/facebook/docusaurus/pull/7952), it becomes possible to override default html meta tags you couldn\'t before:\\n\\n```jsx\\n<>\\n {siteConfig.noIndex && <meta name=\\"robots\\" content=\\"nofollow, noindex\\" />}\\n <meta name=\\"viewport\\" content=\\"width=device-width, initial-scale=1.0\\" />\\n</>\\n```\\n\\nIt is now possible to use `<Head>` or `themeConfig.metadata`:\\n\\n- to override the `viewport` meta\\n- to override the `robots` meta: you could mark your site as `noIndex`, but except for specific pages that should be indexed\\n\\n### Ukrainian translations\\n\\nIn [#7953](https://github.com/facebook/docusaurus/pull/7953), we added default classic theme translations for the Ukrainian language.\\n\\n## Other changes\\n\\nCheck the [2.1.0 changelog entry](/changelog/2.1.0) for an exhaustive list of changes."},{"id":"/2022/08/01/announcing-docusaurus-2.0","metadata":{"permalink":"/blog/2022/08/01/announcing-docusaurus-2.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","source":"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","title":"Announcing Docusaurus 2.0","description":"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f","date":"2022-08-01T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"}],"readingTime":12.075,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://x.com/zpao","page":{"permalink":"/blog/authors/zpao"},"socials":{"x":"https://x.com/zpao","github":"https://github.com/zpao"},"imageURL":"https://github.com/zpao.png","key":"zpao"},{"name":"Joel Marcey","title":"Co-creator of Docusaurus 1","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Announcing Docusaurus 2.0","authors":["slorber","Josh-Cena","yangshun","lex111","zpao",{"key":"JMarcey","title":"Co-creator of Docusaurus 1"}],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"},"nextItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"}},"content":"```mdx-code-block\\nimport LiteYouTubeEmbed from \'react-lite-youtube-embed\';\\nimport \'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css\';\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport ProductHuntCard from \'@site/src/components/ProductHuntCard\';\\nimport HackerNewsIcon from \'@site/src/components/HackerNewsIcon\';\\nimport ColorModeToggle from \'@theme/Navbar/ColorModeToggle\';\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\nimport ThemedImage from \'@theme/ThemedImage\';\\nimport {ShowcaseCarouselV1, ShowcaseCarouselV2, ShowcaseCarouselV2Theming} from \'./ShowcaseCarousel\';\\n```\\n\\nToday we are extremely happy to finally **announce Docusaurus 2.0**! \ud83e\udd73\ufe0f\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nAfter **4 years of work, [75 alphas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75) and [22 betas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22)**, the next generation of Docusaurus is **ready for prime time**. From now on, we now plan to **respect [Semantic Versioning](https://semver.org/)** and will release **major versions more frequently**.\\n\\n![social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n**Now** is the best time to show your love for Docusaurus!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n:::tip\\n\\nIn a hurry? Check [what\'s new in Docusaurus 2.0](#whats-new-in-20)!\\n\\n:::\\n\\n## What is Docusaurus exactly?\\n\\nDocusaurus is a **static site generator** that helps you ship **beautiful documentation websites** in **no time**.\\n\\nFocus on your content: just write **Markdown files**. Docusaurus will generate an optimized **website** for you that\'s easy to **host anywhere**.\\n\\nDocusaurus is **full-featured** and very **flexible**: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to **adapt the UI to match your branding** so that it integrates nicely with your main website or documentation portal. Its usage of **React** enables a **modern client-side navigation**, and the ability to build an **interactive documentation**.\\n\\n![Introducing Slash](/img/slash-introducing.svg)\\n\\nThe Docusaurus philosophy is akin to the **Pareto principle**: you can get **80% of the results** for **20% of the effort**. This enables you to compete with top-notch documentation sites with **minimal effort**.\\n\\n<TweetQuote\\n url=\\"https://twitter.com/rachelnabors/status/1452697991039660038\\"\\n handle=\\"rachelnabors\\"\\n name=\\"Rachel Nabors\\"\\n job=\\"Former ReactJS & React-Native docs manager\\">\\n Unless you\'re spinning up a documentation team with engineering resources, you\\n probably want Docusaurus!\\n</TweetQuote>\\n\\nDocusaurus aims to be the **best documentation tool**, but you can use it for **other use-cases** as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!\\n\\n<TweetQuote\\n url=\\"https://twitter.com/johnny_reilly/status/1551861926334025728\\"\\n handle=\\"johnny_reilly\\"\\n name=\\"Johnny Reilly\\"\\n job=\\"Group Principal Engineer at Investec\\">\\n Using Docusaurus for my tech blog has been a fantastic choice. It looks\\n tremendous out-of-the-box and the awesome DX means I write way more\\n</TweetQuote>\\n\\n:::tip\\n\\nTry Docusaurus now with our [online playgrounds](/docs/playground) and [5 minutes tutorial](https://tutorial.docusaurus.io/) \u23f1\ufe0f\\n\\n:::\\n\\n## The story behind Docusaurus\\n\\nDocusaurus was created at **Facebook Open Source** in **2017** (now [Meta Open Source](https://opensource.fb.com/)). We had a lot of internal and open source projects to document. It\'s **complicated enough to write good documentation**, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to **focus on the content**, and **Markdown** is great for that.\\n\\nAt that time, our solution was to **copy/paste a Jekyll template** over and over again. This naturally became **hard to maintain**, so we created a tool to **solve our own pain** once for all.\\n\\n**[Docusaurus v1 was born](/blog/2017/12-14-introducing-docusaurus.mdx)!**\\n\\n![Birth of Slash](/img/slash-birth.png)\\n\\nIt quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as [Prettier](https://prettier.io/), [Babel](https://babeljs.io/), [React-Native](https://archive.reactnative.dev/), [KaTeX](https://katex.org/docs/), and of course [Docusaurus v1](http://v1.docusaurus.io/) itself.\\n\\n<ShowcaseCarouselV1 />\\n\\n<br />\\n\\n:::note\\n\\nNotice that the sample sites above use different colors, but still look quite the same.\\n\\n:::\\n\\n## Toward Docusaurus 2.0\\n\\n[**Docusaurus v1**](http://v1.docusaurus.io/) has been very successful, but we started to **question some architectural choices**:\\n\\n- React was only used as a **server-side templating language**, and not used on the client\\n- **Theming system was pretty limited**, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations\\n- The **docs versioning system was confusing**, since it was based on a diff algorithm\\n- The codebase was **monolithic**, neither well-tested nor easy to extend\\n\\n[**Docusaurus v2**](https://docusaurus.io/) was **rebuilt** from the ground up with a new **modular architecture**:\\n\\n- React is now also used on the client, enabling a **modern Single Page Application navigation**\\n- **Plugins** empower the community to contribute useful features as third-party packages\\n- **Theming** is more **flexible** than ever\\n- Docs versioning is now based on snapshot copies, much easier to understand\\n- We kept **everything good from v1**: docs, blog, pages, versioning, i18n...\\n- We implemented **several new features**\\n\\nMore details in the [Docusaurus 2 project announcement](/blog/2018/09-11-Towards-Docusaurus-2.mdx) and [v1 to v2 migration guide](https://docusaurus.io/docs/migration)\\n\\n## Who uses Docusaurus 2.0?\\n\\nDespite being in pre-release, it didn\'t take long for **Docusaurus v2 to outgrow Docusaurus v1** in terms of NPM downloads:\\n\\n[![NPM downloads: v2 outgrows v1](./img/npm-downloads.png)](https://npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nOur GitHub star trend is very positive, competing with major frameworks:\\n\\n[![GitHub stars: Docusaurus is well-positioned](./img/star-history.png)](https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline)\\n\\nToday, Docusaurus v2 has already been a great success even before its launch:\\n\\n- We received so many [lovely testimonials](https://twitter.com/sebastienlorber/timelines/1392048416872706049)\\n- Companies like [1Password](https://blog.1password.com/docusaurus-documentation-framework/) and [Courier](https://www.courier.com/blog/how-we-built-our-documentation/) are writing down their positive experience\\n- Our [site showcase](/showcase) references hundreds of sites, and this is only the tip of the iceberg.\\n\\n<ShowcaseCarouselV2 />\\n\\n<br />\\n\\n:::tip\\n\\nPlease add your site to our [site showcase](/showcase)! It only takes a few seconds: just [post a comment here](https://github.com/facebook/docusaurus/discussions/7826).\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/maxlynch/status/1549415692704825346\\"\\n handle=\\"maxlynch\\"\\n name=\\"Max Lynch\\"\\n job=\\"Ionic co-founder and CEO\\">\\n We use Docusaurus everywhere now and love it\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/supabase/status/1328960757149671425\\"\\n handle=\\"supabase\\"\\n name=\\"Supabase\\"\\n job=\\"Open Source Firebase alternative\\">\\n We\'ve been using V2 since January and it has been great\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/gabrielcsapo/status/1415061312917233665\\"\\n handle=\\"gabrielcsapo\\"\\n name=\\"Gabriel Csapo\\"\\n job=\\"Staff Software Engineer at LinkedIn\\">\\n Docusaurus is next level easy for literally everything you would need for\\n documentation in your project.\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/ItWasMattGregg/status/1526682295075102721\\"\\n handle=\\"ItWasMattGregg\\"\\n name=\\"Matt Gregg\\"\\n job=\\"Senior Front End Developer at Shopify\\">\\n Docusaurus is awesome. We use it\\n</TweetQuote>\\n\\n## What\'s New in 2.0?\\n\\nIt would be difficult to describe every single new feature coming with Docusaurus v2. Let\'s focus on the features we believe are the **most impactful**.\\n\\n### MDX\\n\\n[MDX](https://github.com/mdx-js/mdx) allows you to **interleave React components** in Markdown. This enables you to build top-notch **interactive documentation experiences** very easily.\\n\\nA demo is worth a thousand words:\\n\\n```md title=\\"docs/my-document.mdx\\"\\n### Give it a try: press that button!\\n\\nimport ColorModeToggle from \'@theme/ColorModeToggle\';\\n\\n<ColorModeToggle/>\\n```\\n\\n```mdx-code-block\\n<BrowserWindow>\\n\\n<h3>Give it a try: press that button!</h3>\\n\\n<ColorModeToggle/>\\n\\n</BrowserWindow>\\n```\\n\\n:::info\\n\\nMDX has its own [plugin system](https://mdxjs.com/docs/extending-mdx/). You to customize your Markdown authoring experience, and even create your own Markdown syntax.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/HamelHusain/status/1551962275250053123\\"\\n handle=\\"HamelHusain\\"\\n name=\\"Hamel Husain\\"\\n job=\\"Head Of Data Science at Outerbounds\\">\\n Docusaurus + MDX is great: we were able to implement a beautiful two-pane\\n layout and give the author fine-grained control on the placement of code and\\n corresponding prose.\\n</TweetQuote>\\n\\n### File system conventions\\n\\nOur goal is to make Docusaurus very **intuitive** to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.\\n\\n<LiteYouTubeEmbed\\n id=\\"T3S8GyFIXjo\\"\\n params=\\"autoplay=1&autohide=1&showinfo=0&rel=0\\"\\n title=\\"Explain Like I\'m 5: Docusaurus\\"\\n poster=\\"maxresdefault\\"\\n webp\\n/>\\n\\n<br />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/paularmstrong/status/1552005085168865281\\"\\n handle=\\"paularmstrong\\"\\n name=\\"Paul Armstrong\\"\\n job=\\"Principal Engineer at Microsoft\\">\\n Using the auto-generated sidebars makes it so simple to just create a page and\\n not worry about any other configuration.\\n</TweetQuote>\\n\\n### Plugins\\n\\nDocusaurus now has a **modular architecture** with a plugin system \u2014 our **core features** like docs, blog, pages, and search are all powered by individual plugins.\\n\\nMore importantly, it enables our community to **enhance Docusaurus** with additional features.\\n\\nLet\'s highlight some examples:\\n\\n- [redocusaurus](https://github.com/rohit-gohri/redocusaurus): seamless integration with [OpenAPI](https://www.openapis.org/) and [Redoc](https://github.com/Redocly/redoc)\\n\\n![redocusaurus plugin example](./img/plugins/redocusaurus.png)\\n\\n- [docusaurus-preset-shiki-twoslash](https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash): use [Shiki](https://github.com/shikijs/shiki) code block syntax highlighting with [TwoSlash](https://shikijs.github.io/twoslash/) TypeScript compiler hints\\n\\n![shiki-twoslash plugin example](./img/plugins/shiki-twoslash.png)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/orta\\"\\n handle=\\"orta\\"\\n name=\\"Orta Therox\\"\\n job=\\"Former TypeScript core team at Microsoft\\">\\n The plugin API was a breeze to use, and powerful enough that I could port the\\n code sample renderer from the TypeScript website site in a couple of hours.\\n</TweetQuote>\\n\\n- [docusaurus-search-local](https://github.com/easyops-cn/docusaurus-search-local): one of the various local search alternatives to the built-in Algolia plugin\\n\\n![local search plugin example](./img/plugins/search.png)\\n\\n:::tip\\n\\nWe have a curated list of outstanding plugins in our [community resources](/community/resources) page.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/jodyheavener/status/1551974535452311552\\"\\n handle=\\"jodyheavener\\"\\n name=\\"Jody Heavener\\"\\n job=\\"Senior Developer at 1Password\\">\\n The plugin system in Docusaurus v2 has made expanding 1Password\'s developer\\n portal so easy and fun. Super excited to show you what we\'ve got cooking up.\\n</TweetQuote>\\n\\n### Theming\\n\\nTheming is one of the most important features of Docusaurus: we believe a professional documentation site should **respect your company\'s branding** and create a consistent experience.\\n\\nDocusaurus theming gives a lot of **flexibility** on multiple levels:\\n\\n- Customize CSS variables to adjust colors, fonts, and more\\n- Provide your own CSS stylesheets\\n- Implement your own theme from scratch\\n- **Override any React component** provided by our default theme: we call this [swizzling](https://docusaurus.io/docs/swizzling)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/hung_dev/status/1546918275065741312\\"\\n handle=\\"hung_dev\\"\\n name=\\"\\nHung Viet Nguyen\\"\\n job=\\"Creator of JestPreview\\">\\n I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\\n time. This is super cool since a framework usually needs to sacrifice one for\\n the other.\\n</TweetQuote>\\n\\nThis enables users willing to invest a bit more time on **customizations** to build sites that **look different** from others.\\n\\n<ShowcaseCarouselV2Theming />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/dabit3/status/1382855449813389315\\"\\n handle=\\"dabit3\\"\\n name=\\"Nader Dabit\\"\\n job=\\"Web3 developer, Developer DAO founder\\">\\n So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\\n way that we wanted it to look. No blockers at all.\\n</TweetQuote>\\n\\n### Other features\\n\\nDocusaurus 2 comes with a very long list of useful features:\\n\\n- Theme: dark mode, better UI and UX, flexible `themeConfig` options...\\n- Docs versioning: flexible plugin options to adapt to your workflow\\n- Docs sidebar: collapsible category, category index pages...\\n- Blog: multiple authors, authors map, archive page...\\n- Markdown: tabs, math equations, live code blocks, linking, flexible front matter...\\n- Search: use the new Algolia DocSearch 3 experience\\n- Assets: make it easy to incorporate images and other kinds of files\\n- Internationalization: config options, default theme translations...\\n- Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...\\n- SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...\\n- PWA: add offline support to your site, and make it installable\\n- Fail-fast: strict config validation, detect broken links, and prevent bad production deployments\\n- TypeScript support for config files, plugins, custom pages and theme authors\\n- Playgrounds: assess Docusaurus easily from your browser with [docusaurus.new](https://docusaurus.new)\\n- Canary releases: use the @canary npm tag to use the upcoming release before anyone else\\n- Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working\\n\\n<TweetQuote\\n url=\\"https://twitter.com/alexbdebrie/status/1540010328335032320\\"\\n handle=\\"alexbdebrie\\"\\n name=\\"Alex DeBrie\\"\\n job=\\"AWS Data Hero, author of The DynamoDB Book\\">\\n Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\\n a good bit of configuration without being overwhelming, and the ability to\\n really customize the styling if you\'re braver than I am.\\n</TweetQuote>\\n\\n## Why 2.0 now?\\n\\nMany enthusiastic followers of ours have been curious **why it took us 4 years to release Docusaurus 2.0**, considering the beta is already successful and **widely used in production**.\\n\\nThe reason is that we aim to **respect [Semantic Versioning](https://semver.org/)**, which means we will be incrementing the major version number whenever we release a **breaking change**.\\n\\nIt is important for multiple reasons:\\n\\n- It **guarantees simple minor version upgrades**, as long as you only use the [public API](/community/release-process#public-api-surface)\\n- It follows front-end ecosystem conventions\\n- A new major version is an opportunity to thoroughly document breaking changes\\n- A new major/minor version is an opportunity to communicate new features through a blog post\\n\\nThe problem is that our flexible theming system inherently creates a very **implicit API surface** on which it is **hard to know what is a breaking change** in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our [public API](/community/release-process#public-api-surface), so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.\\n\\n:::info\\n\\nFrom now on, Docusaurus will **release new major versions more frequently**. In practice, you can expect a **new major version every 2 to 4 months**.\\n\\n[Major version numbers are not sacred](https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html), but we still group breaking changes together and avoid releasing major versions too often.\\n\\nCheck our [release process](/community/release-process) documentation for details.\\n\\n:::\\n\\n## What\'s Next?\\n\\n![Slash Up and Running](/img/slash-up-and-running.png)\\n\\nThe work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will **backport retro-compatible changes in Docusaurus 2.x** minor versions to make them available as soon as possible to the community on a stable channel.\\n\\nA sample of the features on our roadmap for the upcoming major versions of Docusaurus:\\n\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- [Improve Markdown infrastructure](https://github.com/facebook/docusaurus/issues/4625)\\n- [Improve theming and swizzle](https://github.com/facebook/docusaurus/issues/6114)\\n- [TailwindCSS theme](https://github.com/facebook/docusaurus/issues/2961)\\n- [Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer](https://github.com/facebook/docusaurus/issues/7227)\\n- [Dynamic navbar: navbar item activation strategies](https://github.com/facebook/docusaurus/issues/4389)\\n- [Custom Social Cards](https://github.com/facebook/docusaurus/issues/2968)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Use Node.js ES Modules](https://github.com/facebook/docusaurus/issues/6520)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n\\n## Thank You\\n\\nWe\'d like to express our gratitude to [all our contributors](https://github.com/facebook/docusaurus/graphs/contributors), including:\\n\\n- The Docusaurus core team: [Alexey Pyltsyn](https://github.com/lex111), [Joshua Chen](https://github.com/Josh-Cena), [S\xe9bastien Lorber](https://github.com/slorber), [Yangshun Tay](https://github.com/yangshun) and all our [former team members](https://docusaurus.io/community/team)\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source\\n- [Paul O\u2019Shannessy](https://github.com/zpao) for supporting the development of all the next versions of Docusaurus at Meta Open Source\\n- [Eric Nakagawa](https://github.com/ericnakagawa) for creating our cutest mascot Slash\\n- [Endilie Yacop Sucipto](https://github.com/endiliey) for his significant [initial work on Docusaurus v2](/blog/2020/01-07-tribute-to-endi.mdx)\\n- [Cl\xe9ment Vannicatte](https://github.com/shortcuts), [Kevin Granger](https://github.com/Shipow) and the whole Algolia team for their support\\n- All the community members for making valuable code contributions, improving our documentation, and answering questions on [Discord](https://discordapp.com/invite/docusaurus)\\n\\nWe\'d like to thank in particular all our **Docusaurus 2.0 early adopters** for assessing its alpha, beta and canary releases, providing a ton of **invaluable feedback**. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.\\n\\nAt [Meta Open Source](https://opensource.fb.com/), Docusaurus is one of our **most successful projects**. We can\'t wait to see all the outstanding documentation websites that you will create! Don\'t forget to **submit them to our [site showcase](/showcase)**!\\n\\n**Now, let your imagination run wild \ud83e\udd2a!**\\n\\n\u2014 Slash\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n\ud83d\ude4f Share your experience using Docusaurus with the community!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n![Slash plushies](./img/slash-plushies.jpg)"},{"id":"/2022/01/24/docusaurus-2021-recap","metadata":{"permalink":"/blog/2022/01/24/docusaurus-2021-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx","source":"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx","title":"Docusaurus 2021 Recap","description":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed 30k stars on GitHub!","date":"2022-01-24T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":6.01,"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"}],"frontMatter":{"title":"Docusaurus 2021 Recap","authors":["Josh-Cena"],"tags":["recap"],"image":"./img/thumbnail.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"},"nextItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"}},"content":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed **30k stars on GitHub**!\\n\\nWe\'ve **reached full feature parity** with v1 after [the release of internationalization](/blog/2021/03-09-releasing-docusaurus-i18n.mdx), [announced our **first beta**](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx), and welcomed **significantly more users** this year.\\n\\nThe **official v2 release** is just around the corner! Follow the [roadmap issue](https://github.com/facebook/docusaurus/issues/6113) for any latest news.\\n\\n![](./img/thumbnail.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\nLet\'s begin by going over a few highlights this year. Remember the [todo-list](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx#whats-next) from half a year ago? Time to take it out again and see how far we\'ve come!\\n\\n- **Internationalization**: officially released four months after its initial landing in late 2020. Seen great success in [many projects](/showcase?tags=i18n)\\n- **Autogenerated sidebars**: no need to maintain a big `sidebars.js` anymore\\n- **Webpack 5**: significantly improved build performance\\n- **Trailing slash config**: seamless integration with any content hosting provider\\n- **Redesigned mobile navigation**: mobile users now enjoy all navigation features as on desktop\\n- **UI improvements**: more accessible quotes, better admonitions, back-to-top button...\\n- **Blog multi-authors**: credit all the amazing contributors that collaborated on one blog post!\\n- **More blog features**: archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time\\n- **Asset collocation**: no need for a bloated static folder anymore: colocate your images with Markdown files\\n- **Sidebar category index pages**: category labels can now be associated with pages, enabling better doc organization\\n\\nOur codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!\\n\\n## Trends\\n\\n### npm\\n\\nDocusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.\\n\\n[![Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There\'s a sharp drop from 90000 to 40000 just before the Jan 2022 line.](./img/npm-trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\n(Ah, the classic Christmas dip...)\\n\\nWe released 18 versions, going from `2.0.0-alpha.71` to `2.0.0-beta.14`. That\'s one release every 20 days!\\n\\n### GitHub\\n\\n- **Stars**: 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!\\n- **Total contributors**: 512 \u2192 773 (+51.0% y/y)\\n- **Dependents**: 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1\\n- **Commits**: 1,187 commits in the past year, averaging 23 commits every week\\n- **Issues**: 619 issues opened, 505 of them eventually resolved\\n- A [**new core team member**](https://github.com/Josh-Cena) (yep, that\'s me \ud83d\ude1d)\\n\\nOur star trend is also very positive. Compared to similar projects, we are **growing at a faster rate**:\\n\\n![Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.](./img/star-history.png)\\n\\nWith an 8.4k increase in stars, we are ranked number 3 in this year\'s [JavaScript rising stars of static site generators](https://risingstars.js.org/2021/en#section-ssg), preceded only by Next.js and Astro.\\n\\n![Docusaurus placing 3rd in the \\"Static Sites\\" ranking list](./img/rising-stars.png)\\n\\n## Featured adoptions\\n\\nOur showcase has welcomed a few new [\\"favorite\\" sites](/showcase?tags=favorite) that showcase the true potential of Docusaurus 2\'s pluggable architecture.\\n\\n- [**IOTA-wiki**](https://wiki.iota.org/)\\n\\n![Iota wiki light mode](./img/iota-light.png#gh-light-mode-only)![Iota wiki dark mode](./img/iota-dark.png#gh-dark-mode-only)\\n\\n- [**Dyte**](https://docs.dyte.io/docs/home/introduction/)\\n\\n![Dyte light mode](./img/dyte-light.png#gh-light-mode-only)![Dyte dark mode](./img/dyte-dark.png#gh-dark-mode-only)\\n\\n- [**Ionic**](https://ionicframework.com/docs)\\n\\n![Ionic light mode](./img/ionic-light.png#gh-light-mode-only)![Ionic dark mode](./img/ionic-dark.png#gh-dark-mode-only)\\n\\n- [**Courier**](https://www.courier.com/docs/)\\n\\n![Courier](./img/courier.png)\\n\\nThe creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to [have it in our showcase](https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx).\\n\\n## Community\\n\\nAs an active moderator on [Discord](https://discord.gg/docusaurus), I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer.\\n\\nWe are constantly mentioned on Twitter with inspirational feedback:\\n\\n> **@docusaurus** is amazing! cant believe it\'s THAT simple to use.\\n\\n> No extra plugins, tooling or compilation steps. It just works out of the box.\\n\\n> I love **@docusaurus**. I couldn\'t have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.\\n\\nAnd we keep every one of them in [our little box](https://twitter.com/sebastienlorber/timelines/1392048416872706049) \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!\\n\\nAs we approach the official release, we are interested in knowing more about what people are doing out there: [plugin authors](https://github.com/facebook/docusaurus/discussions/4025), [creators of customized sites](https://github.com/facebook/docusaurus/discussions/5468), and [all new users](https://github.com/facebook/docusaurus/discussions/4610) \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs.\\n\\n## Going forward\\n\\nIn the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it\'s almost there. We have created a dedicated [milestone](https://github.com/facebook/docusaurus/milestone/15) to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a **more robust theming workflow**, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:\\n\\n- Guidelines on **component organization**. We want the theme components to have the right granularity so when you want to customize a part of your site, there\'s always a component doing just what you need.\\n- Improvements to the **swizzle CLI**. We want users to use it with delight and let it aid you through all possible swizzling scenarios.\\n- Refactoring our **theme APIs**. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.\\n- **Docs**. We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.\\n\\nRead more about plans for Docusaurus 2.0 in this [roadmap issue](https://github.com/facebook/docusaurus/issues/6113). 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!\\n\\nAs the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for [architectural changes in 3.0](https://github.com/facebook/docusaurus/milestone/16)!\\n\\nWith the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.\\n\\nWe\'d like to express our gratitude to [all the contributors in 2021](https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c), including:\\n\\n- The core team: [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://github.com/slorber), [Joshua Chen](https://github.com/Josh-Cena), and [Yangshun Tay](https://github.com/yangshun) for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting its development all along\\n- The Algolia team for helping Docusaurus users [migrate to the new DocSearch](/blog/2021/11-21-algolia-docsearch-migration/index.mdx) and answering search-related questions\\n- All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord\\n\\nSo long, 2021, and let\'s greet a great 2022!"},{"id":"/2021/11/21/algolia-docsearch-migration","metadata":{"permalink":"/blog/2021/11/21/algolia-docsearch-migration","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx","source":"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx","title":"DocSearch migration","description":"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.","date":"2021-11-21T00:00:00.000Z","tags":[{"inline":false,"label":"Search","permalink":"/blog/tags/search"}],"readingTime":2.96,"hasTruncateMarker":true,"authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","socials":{"x":"https://x.com/sh0rtcts","github":"https://github.com/shortcuts"},"imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"DocSearch migration","authors":["shortcuts","slorber"],"tags":["search"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"},"nextItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"}},"content":"[DocSearch](https://docsearch.algolia.com/) is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.\\n\\nDocusaurus site owners should upgrade their configuration with their new credentials **by February 1, 2022**, existing search indexes will be frozen and become read-only after this date.\\n\\n\x3c!--truncate--\x3e\\n\\n## Upgrading your Docusaurus site\\n\\nIn the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.\\n\\nThis email will include a new `appId` and `apiKey` to use in your Docusaurus configuration.\\n\\nThe only things you have to do:\\n\\n- Join the Algolia application (eventually creating a new Algolia account)\\n- Update your site configuration.\\n\\n```js title=\\"docusaurus.config.js\\"\\nconst config = {\\n themeConfig: {\\n algolia: {\\n // highlight-start\\n appId: \'<NEW_APP_ID>\',\\n apiKey: \'<NEW_SEARCH_API_KEY>\',\\n // highlight-end\\n },\\n },\\n};\\n\\nmodule.exports = config;\\n```\\n\\n:::info\\n\\n`appId` is now **required**.\\n\\nThese keys are not secrets and can be added to your Git repository.\\n\\n:::\\n\\n## DocSearch has a new home!\\n\\n### What is DocSearch?\\n\\n[DocSearch](https://docsearch.algolia.com/) is a program created by [Algolia](http://algolia.com/), which offers search to technical documentation of Open Source projects and technical blogs **for free**.\\n\\nYou can [read more here](https://docsearch.algolia.com/docs/what-is-docsearch/), and [apply](https://docsearch.algolia.com/apply) if you\'d like to give it a try!\\n\\n## What is this migration about?\\n\\n### Motivation\\n\\nWith the upcoming stable release of [DocSearch UI](https://docsearch.algolia.com/docs/DocSearch-v3), we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.\\n\\n### What\'s new?\\n\\nDocSearch now leverages the [Algolia Crawler](https://www.algolia.com/products/search-and-discovery/crawler/), which includes a web interface that will allow you to:\\n\\n- Start, schedule and monitor your crawls\\n- Edit your config file from a live editor\\n- Test your results with DocSearch v3\\n\\n![The Algolia crawler front page showing the project\'s overview, such as last complete crawl and indices](./img/crawler-overview.png)\\n\\n![The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.](./img/editor.png)\\n\\nBut also, more Algolia features in **your own Algolia app**:\\n\\n- Team management\\n- Browse and see how your records are indexed in Algolia\\n- Try other Algolia features with free trials\\n\\n![The Algolia index overview page, showing various filters and the details of every single index](./img/index-overview.png)\\n\\n![The Algolia index analytics page, showing trends for total users, total searches, etc.](./img/index-analytics.png)\\n\\nAnd of course, **a lot more, for free**.\\n\\n## FAQ\\n\\n### I\'m using Docusaurus and DocSearch, can I migrate? {#im-using-docusaurus-and-docsearch-can-i-migrate}\\n\\nAt the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you\'ll be contacted as soon as your Algolia app is ready!\\n\\n### Where can I read more about this?\\n\\nWe wrote a small [migration guide](https://docsearch.algolia.com/docs/migrating-from-legacy) but you\'ll have more detailed information in the migration email.\\n\\n### I received the migration email but the invite expired\\n\\nPlease contact us via either [email](mailto:docsearch@algolia.com) or [DocSearch\'s Discord](https://discord.gg/bRTacwYrfX) or on [Docusaurus\'s Discord #algolia channel](https://discordapp.com/invite/docusaurus)\\n\\n### I have feedback!\\n\\nFor any feedback regarding our documentation or the DocSearch UI component, you can open an issue [on our GitHub repository](https://github.com/algolia/docsearch/issues), but also contact us via the methods above.\\n\\n### Can I still run my own DocSearch instance?\\n\\nIn favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved [DocSearch scraper](https://github.com/algolia/docsearch-scraper) and [DocSearch v2](https://github.com/algolia/docsearch/tree/master), but the repositories will still be available and open to pull requests.\\n\\nThe previous documentation (now called `legacy`) remains available as well as our [`run your own`](https://docsearch.algolia.com/docs/legacy/run-your-own) guide."},{"id":"/2021/05/12/announcing-docusaurus-two-beta","metadata":{"permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","source":"@site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","title":"Announcing Docusaurus 2 Beta","description":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.","date":"2021-05-12T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"},{"inline":false,"label":"Beta","permalink":"/blog/tags/beta"}],"readingTime":3.52,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"./img/slorber.png","key":"slorber","image_url":"./img/slorber.png"},{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"title":"Announcing Docusaurus 2 Beta","authors":[{"key":"slorber","image_url":"./img/slorber.png","imageURL":"./img/slorber.png"},"JMarcey","yangshun","lex111"],"tags":["release","beta"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"},"nextItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"}},"content":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first **[Docusaurus 2 beta](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.0)**.\\n\\nWith the announcement of this beta, the team is even more confident that Docusaurus 2 is **ready for mainstream adoption**!\\n\\n![](./img/image_cropped.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus adoption\\n\\n**Don\'t fear the beta tag!**\\n\\nDocusaurus 2 is widely adopted and growing fast:\\n\\n[![Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.](./img/trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nTo get a fuller understanding of the quality of current Docusaurus 2 sites, our new [showcase](https://docusaurus.io/showcase) page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!\\n\\nDon\'t miss our [favorite](https://docusaurus.io/showcase?tags=favorite) sites; they all stand out with something unique:\\n\\n[![A screenshot of the showcase\'s favorites section, with 12 cards each displaying the information and preview of one site](./img/favorites.png)](https://docusaurus.io/showcase?tags=favorite)\\n\\n## Why was Docusaurus v2 in alpha for so long?\\n\\nIt\'s hard to believe that the first alpha release [v2.0.0-alpha.0](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.0) was 2 years ago \ud83d\ude33 , unusually long for a software alpha.\\n\\nAs this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached **feature parity** with Docusaurus 1 with **[i18n](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n)**, and it has been **successfully adopted** by many Docusaurus sites (see [i18n showcase](https://docusaurus.io/showcase?tags=i18n)).\\n\\nWe\'re now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.\\n\\n## What are the goals of the beta?\\n\\nNow that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.\\n\\nIn addition, we will use the beta phase to **improve our theming system**.\\n\\nWe want to make it:\\n\\n- **easier to implement a custom theme**, including for ourselves. We want to provide [multiple official themes](https://github.com/facebook/docusaurus/issues/3522) (including [Tailwind CSS](https://github.com/facebook/docusaurus/issues/2961)) for a long time.\\n\\n- **safer to extend an existing theme**: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.\\n\\nWe will build a better **theming infrastructure** and refactor the classic theme to use it.\\n\\nIf you customize your site, you may find these planned improvements quite valuable.\\n\\n## What\'s new?\\n\\nIn case you missed it, we recently shipped two major improvements:\\n\\n- [Auto-generated sidebars](https://docusaurus.io/docs/sidebar#sidebar-item-autogenerated): no need to maintain a `sidebars.js` file anymore!\\n- [Webpack 5 / PostCSS 8](https://github.com/facebook/docusaurus/issues/4027): persistent caching significantly speeds up **rebuild time**!\\n\\n## What\'s next?\\n\\nShipping the official 2.0 release!\\n\\nTo get there, we will continue to **fix bugs** and implement the **most wanted features**, including:\\n\\n- [Sidebar category index pages](https://github.com/facebook/docusaurus/issues/2643)\\n- [Better mobile navigation UX](https://github.com/facebook/docusaurus/issues/2220)\\n- [Better admonition design](https://github.com/facebookincubator/infima/issues/55)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n- [Fix trailing slashes and relative link issues](https://github.com/facebook/docusaurus/issues/3372)\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018)\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n\\n## Conclusion\\n\\nThis is an exciting time for Docusaurus.\\n\\nWe are inspired by the [positive feedback](https://twitter.com/sebastienlorber/timelines/1392048416872706049) about Docusaurus, and discover new sites online every single day.\\n\\nWe are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.\\n\\nThank you to everyone for reading and to the entire community who supports Docusaurus. \ud83e\udd17"},{"id":"/2021/03/09/releasing-docusaurus-i18n","metadata":{"permalink":"/blog/2021/03/09/releasing-docusaurus-i18n","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx","source":"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx","title":"Releasing Docusaurus i18n","description":"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.","date":"2021-03-09T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases"},{"inline":false,"label":"I18n","permalink":"/blog/tags/i-18-n"}],"readingTime":3.445,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Releasing Docusaurus i18n","authors":["slorber"],"tags":["release","i18n"],"image":"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"},"nextItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"}},"content":"Today, we officially release **[Docusaurus 2 i18n](https://docusaurus.io/docs/i18n/introduction)** ([internationalization](https://en.wikipedia.org/wiki/Internationalization_and_localization)), as part of [2.0.0-alpha.71](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71).\\n\\nDocusaurus 2 has now reached **full feature parity with Docusaurus 1**. \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the **first Docusaurus 2 beta** will be released.\\n\\n**We went the extra mile**, and the new i18n support is **even better than in Docusaurus 1**.\\n\\nIn this post, we will present you the **translation workflow**, explain some **design decisions** and **showcase early adopter sites** that just went live: [Jest](https://jestjs.io/), [Redwood](https://learn.redwoodjs.com/), and [Datagit](https://datagit.ir/).\\n\\nWe also **dogfood** the i18n support on the **Docusaurus 2 site itself**, and this post is already available in [English](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n) and [French](https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n)!\\n\\n\x3c!--truncate--\x3e\\n\\n## Translate your site\\n\\nYou can translate a Docusaurus site in **3 simple steps**:\\n\\n1. **Configure**: declare the default locale and alternative locales in `docusaurus.config.js`\\n1. **Translate**: put the translation files at the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n1. **Deploy**: build and deploy your site using a single or multi-domain strategy\\n\\nThe i18n support is **very flexible** and based on the **filesystem**.\\n\\nThe **[i18n tutorial](https://docusaurus.io/docs/i18n/tutorial)** is the best way to get started, and we provide help to use **[Git](https://docusaurus.io/docs/i18n/git)** or **[Crowdin](https://docusaurus.io/docs/i18n/crowdin)**.\\n\\n## Design decisions\\n\\nThe goals of the Docusaurus i18n system are:\\n\\n- **Simple**: just put the translated files in the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n- **Flexible translation workflows**: use Git (monorepo, forks, or submodules), SaaS software, FTP\\n- **Flexible deployment options**: single, multiple domains, or hybrid\\n- **Modular**: allow plugin authors to provide i18n support\\n- **Low-overhead runtime**: documentation is mostly static and does not require a heavy JS library or polyfills\\n- **Scalable build-times**: allow building and deploying localized sites independently\\n- **Localize assets**: an image of your site might contain text that should be translated\\n- **No coupling**: not forced to use any SaaS, yet integrations are possible\\n- **Easy to use with [Crowdin](https://crowdin.com/)**: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2\\n- **Good SEO defaults**: we set useful SEO headers like [`hreflang`](https://developers.google.com/search/docs/advanced/crawling/localized-versions) for you\\n- **RTL support**: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement\\n- **Default translations**: classic theme labels are translated for you in [many languages](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales)\\n\\n## Showcase\\n\\nWe worked with a few volunteers to **dogfood the i18n support** before releasing it.\\n\\n### Jest: upgrading Docusaurus\\n\\nWe have made it possible to **upgrade** a **translated Docusaurus 1 site** to Docusaurus 2.\\n\\n**[Jest](https://jestjs.io)**, using Docusaurus 1 and Crowdin was one of those sites.\\n\\nThe Docusaurus 2 migration was successful and the new site is now deployed in production ([announcement post](https://jestjs.io/blog/2021/03/09/jest-website-upgrade)).\\n\\n[![Jest\'s website front page in Japanese](/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png)](https://jestjs.io)\\n\\n### Redwood: adopting Docusaurus\\n\\n[Redwood](https://redwoodjs.com/) is a React full-stack Jamstack framework.\\n\\nThey were looking for a solution to create an **internationalized learning platform**, and became early adopters of Docusaurus 2 i18n for [learn.redwoodjs.com](https://learn.redwoodjs.com/), using Crowdin to get it translated to French.\\n\\n[![Redwood\'s doc page in French](/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png)](https://learn.redwoodjs.com/)\\n\\n### Datagit: using LTR support\\n\\nThe i18n system should work with any language, including **Right-to-Left languages**.\\n\\n[Datagit.ir](https://datagit.ir/) is using Farsi, and a simple configuration option is able to **flip the Docusaurus theme** to add the required Right-to-Left support.\\n\\n[![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png)](https://datagit.ir/)\\n\\n## Conclusion\\n\\nWe sincerely hope you will adopt and like the new i18n support.\\n\\nThis feature has not been an easy one, and we would like to thank everyone that got involved in this journey:\\n\\n- [Alexey](https://github.com/lex111) for his help to make the i18n support exhaustive and even better than v1\\n- [Simen](https://github.com/SimenB) for volunteering and supporting the Jest migration\\n- [Claire](https://github.com/clairefro) for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks\\n- [Massoud](https://github.com/massoudmaboudi) for reviewing my work on LTR and adopting it on Datagit\\n- [Crowdin](https://crowdin.com/) for their support and willingness to improve their translation SaaS\\n- The Docusaurus community for their patience, and providing many useful feedbacks on GitHub\\n\\nThanks for reading.\\n\\n\ud83d\ude4f And please, add your brand new i18n sites to our [showcase page](https://docusaurus.io/showcase). We accept any all polished Docusaurus site here, and we are working on a [redesign](https://github.com/facebook/docusaurus/issues/4238) allowing you to filter sites by features."},{"id":"/2021/01/19/docusaurus-2020-recap","metadata":{"permalink":"/blog/2021/01/19/docusaurus-2020-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/01-19-docusaurus-2020-recap.mdx","source":"@site/blog/2021/01-19-docusaurus-2020-recap.mdx","title":"Docusaurus 2020 Recap","description":"2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.","date":"2021-01-19T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":5.04,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2020 Recap","authors":["slorber"],"tags":["recap"],"image":"/img/docusaurus-2020-recap.png"},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"},"nextItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"}},"content":"**2020 was great for Docusaurus**, despite [a regrettable start](https://docusaurus.io/blog/2020/01/07/tribute-to-endi) and a tumultuous year for everyone.\\n\\nWe continued to invest in [Docusaurus 2](https://docusaurus.io/), and made it reach **full feature parity** with [Docusaurus 1](https://v1.docusaurus.io/).\\n\\nWe now **recommend Docusaurus 2** as the **default choice** to start a new Docusaurus project and encourage v1 users to [migrate to Docusaurus 2](https://docusaurus.io/docs/migration).\\n\\nWe are **still in alpha**, but expect **some good news very soon**!\\n\\n![Three Docusaurus plushies laid side-by-side on the table](/img/blog/2020-recap/docusaurus-plushie-banner.jpeg)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 highlights\\n\\nWe have worked on many features this year, and would like to highlight the most significant ones:\\n\\n- **i18n**: easily translate your Docusaurus site, released soon! ([preview](https://github.com/facebook/docusaurus/pull/3325), [doc](https://docusaurus.io/docs/next/i18n/introduction))\\n- **Version dropdown**: enable contextual version switch\\n- **Versioning options**: solving the most common pain-points users had with versioning\\n- **Contextual search**: search in the current version, use the brand-new DocSearch 3 experience\\n- **Markdown pages**: use Markdown instead of React components to create standalone pages\\n- **Better theme**: various UI, UX and accessibility improvements\\n- **PWA**: add offline support to your site, and make it installable\\n- **Fail-fast**: strict config validation, detect broken links, and prevent bad production deployments\\n- **Multi-instance**: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)\\n- **Migration CLI**: automate the upgrade from Docusaurus 1\\n- **CodeSandbox**: assess Docusaurus easily from your browser with [new.docusaurus.io](https://new.docusaurus.io/)\\n- **Canary releases**: use the `@canary` npm tag to use the upcoming release before anyone else\\n- **TypeScript**: progressive adoption for internal code, and improve usage for users\\n- **Publish Infima**: it is now [open-source](https://github.com/facebookincubator/infima)\\n\\n## Docusaurus 2 growth\\n\\nThe plan to [rebuild Docusaurus from scratch in 2019](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap) paid off: after a slow start, Docusaurus 2 has been widely adopted and has **already outgrown Docusaurus 1** usage.\\n\\n![Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.](/img/blog/2020-recap/docusaurus-npm-trends.png)\\n\\nNotable **projects, startups, large companies, and individuals** adopted Docusaurus 2 ([showcase](https://docusaurus.io/showcase)):\\n\\n- [Supabase](https://supabase.io)\\n- [React Navigation](https://reactnavigation.org)\\n- [React Redux](https://react-redux.js.org/)\\n- [Vector](https://vector.dev)\\n- [Algolia DocSearch](https://docsearch.algolia.com)\\n- [SAP Cloud SDK](https://sap.github.io/cloud-sdk)\\n- [Palo Alto Cortex XSOAR](https://xsoar.pan.dev)\\n- [Qudd\xfas George\'s website](https://portfoliosaurus.now.sh)\\n\\nWe helped **large scale Docusaurus 1 sites to upgrade**, ensuring a proper **migration path** and **feature parity**.\\n\\n[React Native](https://reactnative.dev/) was successfully upgraded to Docusaurus 2 ([archived v1 site](http://archive.reactnative.dev/)):\\n\\n![React Native\'s new website built with Docusaurus v2](/img/blog/2020-recap/react-native-screenshot.png)\\n\\nLocalized Docusaurus 1 sites (like **Jest**) will be able to upgrade too:\\n\\n![Jest\'s new website built with Docusaurus v2 in Japanese](/img/blog/2020-recap/jest-screenshot.png)\\n\\nWe also saw the **[first right-to-left](https://datagit.ir/)** Docusaurus 2 site published:\\n\\n![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2020-recap/datagit-rtl-screenshot.png)\\n\\n## GitHub Activity\\n\\n- **Stars**: 14632 \u2192 20946 (+43.2% y/y)\\n- **Total Contributors**: 303 \u2192 512 (+68.9% y/y). Most of which are non-Facebook contributors\\n- **Weekly npm Downloads**: 2356 \u2192 25592 (+986% y/y)\\n- **On GitHub**, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)\\n\\n## Collaboration with Major League Hacking\\n\\nWe have welcomed [Major League Hacking](https://mlh.io/) (MLH) fellows for 2 seasons already.\\n\\nWe are very thankful for the **various contributions** they made, such as:\\n\\n- Writing the foundations of the v1 to v2 migration CLI\\n- Help migrate the React Native website from v1 to v2\\n- Making the config validation more strict and exhaustive, returning helpful error messages\\n- Adding CodeSandbox support\\n- Improving the CI pipelines: build size and Lighthouse bots\\n\\nWe look forward to continuing this collaboration in 2021.\\n\\n## Media\\n\\nDmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in [60 seconds](https://www.youtube.com/watch?v=_An9EsKPhp0) or [15min](https://www.youtube.com/watch?v=Yhyx7otSksg) videos.\\n\\nRachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in [React Native Radio 178 (podcast)](https://reactnativeradio.com/episodes/178-documenting-react-native-with-rachel-nabors-gWxwySPl), and William Candillon the [React Native website migration (video)](https://www.youtube.com/watch?v=-zhjq2ECKq4).\\n\\nMany blog posts have been published:\\n\\n- [To the Makers of Docusaurus](https://portfoliosaurus.now.sh/blog/toTheMakers) by Quddus George\\n- [Richer API documentation with Redoc and Docusaurus](https://davidgoss.co/blog/api-documentation-redoc-docusaurus/) by David Goss\\n- [How to Build a Plugin for Docusaurus v2](https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/) by Adriaan Knapen\\n- [React Tracked Documentation Website with Docusaurus v2](https://blog.axlight.com/posts/react-tracked-documentation-website-with-docusaurus-v2/) by Daishi Kato\\n- [Easy documentation with Docusaurus](https://blog.logrocket.com/easy-documentation-with-docusaurus/) by Anshul Goyal (MLH fellow)\\n- [Build Beautiful Documentation Websites with Docusaurus](https://lo-victoria.com/build-beautiful-documentation-websites-with-docusaurus) by Victoria Lo\\n\\n## Community\\n\\nThe Docusaurus community continues to grow, the [Discord](https://discord.gg/docusaurus) server is quite active, and [Stack Overflow questions](https://stackoverflow.com/questions/tagged/docusaurus) keep being posted.\\n\\nThe **modular architecture** of Docusaurus 2 allowed the community to build and publish [third-party plugins](https://docusaurus.io/community/resources#community-plugins-). As we would like to federate better our community, if you are building a plugin, please [let us know](https://github.com/facebook/docusaurus/discussions/4025).\\n\\n## What\'s next?\\n\\nAs the **core features of Docusaurus 2** have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the **beta and release-candidate phase**.\\n\\nWith proper support for **i18n and versioning**, and **large scale migrations** such as **React Native** and **Jest**, we now have a clear migration path for all Docusaurus 1 sites.\\n\\nWe still have a few **major features** that we would like to work on:\\n\\n- [Create a theme gallery](https://github.com/facebook/docusaurus/issues/3522), make it easy to switch from one another, and include **first-class Tailwind support**\\n- [Upgrade to Webpack 5](https://github.com/facebook/docusaurus/issues/4027), improve performances and build times\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018), as MDX and makes it harder for CommonMark-based sites to adopt Docusaurus\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- Other tasks that we might discover during 2021\\n\\nHuge thanks to the community for [their contributions in 2020](https://github.com/facebook/docusaurus/graphs/contributors?from=2020-01-01&to=2021-01-01&type=c), especially:\\n\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting the project all this time\\n- the core team - [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://sebastienlorber.com), [Yangshun Tay](https://twitter.com/yangshunz)\\n- the Major League Hacking and Facebook interns for their significant impact\\n- the Algolia team for DocSearch 3 and their support\\n- [Bartosz Kaszubowski](https://github.com/Simek) for his investment in the React Native migration\\n- the whole community for their contributions, and providing support to each other\\n\\nCheers to a great 2021! \ud83c\udf89"},{"id":"/2020/01/07/tribute-to-endi","metadata":{"permalink":"/blog/2020/01/07/tribute-to-endi","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx","source":"@site/blog/2020/01-07-tribute-to-endi.mdx","title":"Tribute to Endi","description":"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.","date":"2020-01-07T00:00:00.000Z","tags":[{"inline":false,"label":"Endi","permalink":"/blog/tags/endi"},{"inline":false,"label":"Tribute","permalink":"/blog/tags/tribute"}],"readingTime":0.895,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Tribute to Endi","authors":"JMarcey","tags":["endi","tribute"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"},"nextItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"}},"content":"It is with great sadness to announce that our primary external Docusaurus contributor, [Endilie Yacop Sucipto](https://github.com/endiliey) (Endi to those who knew him), [passed away](https://give.asia/campaign/help_endi_beat_cancer#/updates) over the weekend after an illness associated with his bout with cancer.\\n\\n\x3c!--truncate--\x3e\\n\\nIt is impossible to overstate Endi\'s impact on this project:\\n\\n- Docusaurus\' top contributor, [by far](https://github.com/facebook/docusaurus/graphs/contributors).\\n- [Lead developer](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2) on the nearly complete [version 2 of Docusaurus](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap).\\n- Overall passionate advocate of the project on [Twitter](https://twitter.com/endiliey), [Discord](https://discord.gg/docusaurus) and other social media\\n\\nThinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.\\n\\nWe are working on ways to honor Endi\'s contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or [tweet](https://twitter.com/docusaurus) if you have a suggestion.\\n\\nThe Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14\\n\\n![A photo from behind Endi\'s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.](/img/endi.jpg)"},{"id":"/2019/12/30/docusaurus-2019-recap","metadata":{"permalink":"/blog/2019/12/30/docusaurus-2019-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx","source":"@site/blog/2019/12-30-docusaurus-2019-recap.mdx","title":"Docusaurus 2019 Recap","description":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)","date":"2019-12-30T00:00:00.000Z","tags":[{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps"}],"readingTime":2.72,"hasTruncateMarker":true,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"title":"Docusaurus 2019 Recap","authors":"yangshun","tags":["recap"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"},"nextItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"}},"content":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on [Docusaurus 2](https://docusaurus.io/). Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and [migrate](https://docusaurus.io/docs/migration) to it! Otherwise we will work with you to make that happen in 2020 :)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 (D2)\\n\\nIn 2018, we proposed to rebuild [Docusaurus from the ground up](https://github.com/facebook/docusaurus/issues/789). It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of [@endilie](https://github.com/endiliey), our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.\\n\\nD2\'s killer features are **Dark Mode** and its **superb performance**. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.\\n\\nLast but not least, we implemented a plugins architecture and turned the repo into a [Lerna monorepo](https://github.com/facebook/docusaurus/tree/main/packages). We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.\\n\\n## GitHub Activity\\n\\n- Stars: 10050 \u2192 14632 (+45.6% y/y)\\n- Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors\\n- Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November\\n- D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub\\n- We now have 4 active core contributors! (+100% y/y)\\n\\n## Notable Users\\n\\nA good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:\\n\\n- [Create React App](https://create-react-app.dev/)\\n- [Redux](https://redux.js.org/)\\n- [Draft.js](https://draftjs.org/)\\n- [Flux](http://facebook.github.io/flux/)\\n\\nAnd welcomed more projects to Docusaurus 1:\\n\\n- [Libra](https://developers.libra.org/)\\n- [MobX](https://mobx.js.org/)\\n- [Immer](https://immerjs.github.io/immer/)\\n- [Sorbet](https://sorbet.org/)\\n\\n## Media\\n\\nYangshun gave a classroom session during F8 about [Using Docusaurus to Create Open Source Websites](https://www.youtube.com/watch?v=QcGJsf6mgZE).\\n\\n## Community\\n\\nA few third-party hosting/development services also has first-class integration with a Docusaurus setup:\\n\\n- [Vercel deployment](https://github.com/vercel/vercel/tree/main/examples/docusaurus)\\n- [CodeSandbox](https://codesandbox.io/s/docusaurus-template-x3vg9)\\n- [Render](https://render.com/docs/deploy-docusaurus)\\n\\n## Looking Ahead\\n\\nD2 has gained some traction among the [developer community](https://docusaurus.io/showcase). In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!\\n\\nHuge thanks to the community for their contributions, especially the core team - [Endilie Yacop Sucipto](https://github.com/endiliey), [Alexey Pyltsyn](https://github.com/lex111), [Wei Gao](https://github.com/wgao19). Lastly, thank you [Joel Marcey](https://github.com/JoelMarcey) for starting Docusaurus and supporting the project all this time.\\n\\nCheers to a great 2020! \ud83c\udf89"},{"id":"/2018/12/14/Happy-First-Birthday-Slash","metadata":{"permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","source":"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","title":"Happy 1st Birthday Slash!","description":"Docusaurus makes 1 year! Happy Birthday Slash!","date":"2018-12-14T00:00:00.000Z","tags":[{"inline":false,"label":"Birth","permalink":"/blog/tags/birth"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Co-creator of Docusaurus","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Happy 1st Birthday Slash!","authors":[{"key":"JMarcey","title":"Co-creator of Docusaurus"}],"tags":["birth"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"},"nextItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"}},"content":"![Docusaurus makes 1 year! Happy Birthday Slash!](/img/docusaurus-slash-first-birthday.svg)\\n\\nDocusaurus [went live](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) on December 14, 2017. At the time, we had [8 early adopters](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements).\\n\\n\x3c!--truncate--\x3e\\n\\nWe now have nearly [60 known users of Docusaurus](https://v1.docusaurus.io/en/users), and probably more that we don\'t know about. We have [9K GitHub stars](https://github.com/facebook/docusaurus) and an active community, particularly [Yangshun Tay](https://twitter.com/yangshunz) and [Endilie Yacop Sucipto](https://twitter.com/endiliey), both of whom are the lead maintainers helping keep this project [moving forward](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2).\\n\\nThank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.\\n\\n> Special thanks to [Eric Nakagawa](https://twitter.com/ericnakagawa), creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"},{"id":"/2018/09/11/Towards-Docusaurus-2","metadata":{"permalink":"/blog/2018/09/11/Towards-Docusaurus-2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx","source":"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx","title":"Towards Docusaurus 2","description":"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.","date":"2018-09-11T00:00:00.000Z","tags":[{"inline":false,"label":"New","permalink":"/blog/tags/new"},{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption"}],"readingTime":9.25,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null}],"frontMatter":{"title":"Towards Docusaurus 2","authors":"endiliey","tags":["new","adoption"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"},"nextItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"Docusaurus was [officially announced](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as [React Native](https://facebook.github.io/react-native/), [Babel](https://babeljs.io/), [Jest](https://jestjs.io/), [Reason](https://reasonml.github.io/) and [Prettier](https://prettier.io/).\\n\\nThere is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89.\\n\\n\x3c!--truncate--\x3e\\n\\n## Introduction\\n\\nIt all started with this [RFC issue](https://github.com/facebook/docusaurus/issues/789) opened by [Yangshun](https://github.com/yangshun) towards the end of June 2018.\\n\\n<blockquote>\\n <h4>\\n <a href=\\"https://github.com/facebook/docusaurus/issues/789\\">\\n {\'[RFC] Docusaurus v2 \xb7 Issue #789 \xb7 facebook/docusaurus\'}\\n </a>\\n </h4>\\n These are some of the problems I\'m seeing in Docusaurus now and also how we can\\n address them in v2. A number of the ideas here were inspired by VuePress and other\\n static site generators. In the current static site generators ecosystem, t...\\n</blockquote>\\n\\nMost of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.\\n\\n## Infrastructure\\n\\n### Content\\n\\nA Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and `dangerouslySetInnerHTML` \ud83d\ude31.\\n\\nIn addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.\\n\\nFor Docusaurus 2, we will be using [webpack](https://webpack.js.org/) as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, **during build time we will create a server-rendered version of the app** and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by [Gatsby](https://github.com/gatsbyjs/gatsby).\\n\\n### Versioning\\n\\nIf you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs **if and only if** the docs content are **different**.\\n\\nFor example, if we have `docs/hello.md`:\\n\\n```text\\n---\\nid: hello\\ntitle: hello\\n---\\nHello world !\\n```\\n\\nAnd **we cut version 1.0.0,** Docusaurus will create `versioned_docs/version-1.0.0/hello.md`:\\n\\n```text\\n---\\nid: version-1.0.0-hello\\ntitle: hello\\noriginal_id: hello\\n---\\nHello world !\\n```\\n\\nHowever, if there are no changes to `hello.md` when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, `versioned_docs/version-2.0.0/hello.md` will not exist.\\n\\nThis can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit `versioned_docs/version-1.0.0/hello.md` or manually add `versioned_docs/version-2.0.0/hello.md`. This could potentially lead to unwanted bugs. Here is a [real scenario in Jest](https://github.com/facebook/jest/pull/6758#issuecomment-408274413).\\n\\nIn addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where [renaming docs breaks links in old versions](https://github.com/facebook/docusaurus/issues/845).\\n\\nFor Docusaurus 2, **every time we cut a new version, we will instead take a snapshot of all the docs**. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.\\n\\n### Translation\\n\\nDocusaurus allows for easy translation functionality by using [Crowdin](https://crowdin.com/). Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that **English** is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.\\n\\nFor Docusaurus 2, **we will not assume English is the default language**. When a user enables internationalization, they have to set a default language in `siteConfig.js`. We will then assume that all the files in `docs` are written in that language.\\n\\nIn addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.\\n\\n## Customizability\\n\\n### Layout\\n\\nThe current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site\'s appearance to their wishes.\\n\\nFor Docusaurus 2, **layout and styling should be controlled by the user**. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by [create-react-app](https://github.com/facebook/create-react-app) and [VuePress](https://vuepress.vuejs.org/), Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using [React Helmet](https://github.com/nfl/react-helmet). Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.\\n\\n### Markdown\\n\\nOur Markdown parsing is currently powered by [Remarkable](https://github.com/jonschlinkert/remarkable). What if the user wants to use [Markdown-it](https://github.com/Markdown-it/Markdown-it) or even [MDX](https://github.com/mdx-js/mdx)? And then there is an issue of which syntax highlighter to use, (e.g: [Prism](https://prismjs.com/) vs [Highlight.js](https://highlightjs.org/)). We should leave these choices open to the user.\\n\\nFor Docusaurus 2, **users can eject and choose their own Markdown parser**. It does not matter if they want to use another Markdown parser such as [Remark](https://github.com/remarkjs/remark), or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the _RAW string of Markdown_. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we\'re still experimenting with different Markdown parsers.\\n\\n### Search\\n\\nOur core search functionality is based on [Algolia](https://www.algolia.com/). There are requests by users to be able to use different search offerings, such as `lunrjs` for offline search.\\n\\nI personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their `DocSearch` is open source. For example, I recently submitted [this PR that enables DocSearch to scrape alternate languages in sitemap](https://github.com/algolia/docsearch-scraper/pull/387).\\n\\nFor Docusaurus 2, **we will allow users to customize the search box**. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.\\n\\n## Stability\\n\\nSoftware is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.\\n\\nFor Docusaurus 2, **we are adding tests as we develop** since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.\\n\\n## Frequently Asked Questions\\n\\n### Will there be any breaking changes?\\n\\nIf you\'ve read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to **minimize the number of breaking changes** and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a **major rewrite and re-architecting** of the codebase.\\n\\nThe exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in `siteConfig.js` and we plan to keep it as lean as possible. For example, the `cleanUrl` siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the `.html` suffix.\\n\\nOur goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on [Discord](https://discord.gg/docusaurus) or [Twitter](https://twitter.com/docusaurus) for questions and help.\\n\\n### When is the release of Docusaurus 2?\\n\\nAs of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.\\n\\nOne thing that I would like to share is that while Docusaurus is part of [Facebook Open Source](https://opensource.fb.com/) and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at [NTU Singapore](https://twitter.com/NTUsg), so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, **we want to make it as awesome as possible**.\\n\\nFor now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the [public repository](https://github.com/facebook/docusaurus). When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned \ud83d\ude09!\\n\\n## Final Thoughts\\n\\nDocusaurus has had a large impact on the open source community as seen from the [many popular projects](https://v1.docusaurus.io/en/users) which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.\\n\\nDocusaurus\' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.\\n\\nWe also want to let people know that **due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.**\\n\\nIf you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we\'re doing, you can support [Docusaurus on Open Collective](https://opencollective.com/Docusaurus).\\n\\n> If you are sponsoring our work on [Open Collective](https://opencollective.com/Docusaurus), we\'ll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.\\n\\nLastly, if you haven\'t done so already, click the **star** and **watch** button on [GitHub](https://github.com/facebook/docusaurus), and follow us on [Twitter](https://twitter.com/docusaurus)."},{"id":"/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","metadata":{"permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","source":"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","title":"How I Converted Profilo to Docusaurus in Under 2 Hours","description":"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d","date":"2018-04-30T00:00:00.000Z","tags":[{"inline":false,"label":"Profilo","permalink":"/blog/tags/profilo"},{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption"}],"readingTime":5.95,"hasTruncateMarker":true,"authors":[{"name":"Christine Abernathy","url":"http://x.com/abernathyca","socials":{"x":"https://x.com/abernathyca"},"imageURL":"https://github.com/caabernathy.png","key":"abernathyca","page":null}],"frontMatter":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","authors":["abernathyca"],"tags":["profilo","adoption"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"},"nextItem":{"title":"Introducing Docusaurus","permalink":"/blog/2017/12/14/introducing-docusaurus"}},"content":"> _\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d_\\n>\\n> _\u2014 Note sent to the Profilo team_\\n\\nThis is the story of the rather short journey it took to create the [Profilo](https://facebookincubator.github.io/profilo/) website using Docusaurus.\\n\\nProfilo, an Android library for collecting performance traces from production, [was announced](https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/) earlier this year. The project was [published on GitHub](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8) with a less than [a handful or Markdown files](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs) to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.\\n\\n\x3c!--truncate--\x3e\\n\\nIn general, when creating a website with Docusaurus you do the following:\\n\\n1. Generate a template website using Docusaurus scripts.\\n1. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).\\n1. Create the website content:\\n 1. Add your docs and any supporting assets.\\n 1. Customize the default landing page provided by Docusaurus to suit your needs.\\n 1. Configure the default site navigation file.\\n1. Publish the website and set up how it will be published for future changes.\\n\\nGiven I had pre-existing Markdown files, I didn\'t have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.\\n\\n## Overview of Steps Taken\\n\\nHere\'s an overview of the steps taken to convert to a website. I\'ll discuss some of the design aspects in a later section.\\n\\n**Design and colors:**\\n\\n1. Got all the desired logo formats from designer. I had to create the _.favicon_ one.\\n1. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!\\n\\n**Initial website setup:**\\n\\n1. Forked the [Profilo project](https://github.com/facebookincubator/profilo/) on GitHub and created a local clone of the fork to set up the website.\\n1. Created the initial Docusaurus website using the [installation instructions](https://v1.docusaurus.io/docs/en/installation.html).\\n1. Deleted the `docs-examples-from-docusaurus` and `website/blog-examples-from-docusaurus` folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.\\n\\n**Content creation:**\\n\\n1. Added metadata to the existing Markdown files found in the `docs` folder, for example:\\n\\n ```md\\n ---\\n id: architecture\\n title: Architecture\\n sidebar_label: Architecture\\n ---\\n ```\\n\\n2. Added the logo assets to the `website/static/img` folder.\\n3. Modified `website/pages/en/index.js`, the landing page, to highlight Profilo features.\\n4. Modified `website/core/Footer.js`, the footer, to simplify it for Profilo.\\n5. Edited `website/siteConfig.js` (website configuration file) to specify the previously chosen primary and secondary colors.\\n6. Modified `website/sidebars.json` that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.\\n7. Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.\\n8. Tested the website locally throughout this phase. (I ran `yarn start` from the `website` folder to start the server.)\\n\\n**Feedback and review changes:**\\n\\n1. Sent a [pull request](https://github.com/facebookincubator/profilo/pull/6) to the project.\\n2. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).\\n3. Updated the colors and updated the PR.\\n4. The PR was then accepted and [merged](https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad). Yay!\\n\\n**Website publishing:**\\n\\n1. Pushed the first website version by running the Docusaurus publish script from the command line:\\n\\n ```bash\\n USE_SSH=true \\\\\\n GIT_USER=caabernathy \\\\\\n CURRENT_BRANCH=master \\\\\\n yarn run publish-gh-pages\\n ```\\n\\n2. Configured CircleCI using the [provided Docusaurus instructions](https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration). There were 2 PRs for this, [the first](https://github.com/facebookincubator/profilo/pull/8)for the initial config and [the second](https://github.com/facebookincubator/profilo/pull/12) to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).\\n\\nThe final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.\\n\\n## Design\\n\\nHere\'s what the initial website looked like when the first pull request was sent out:\\n\\n![The website\'s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar](/img/profilo_blog_post_website_initial.png)\\n\\nMost of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.\\n\\n![Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade](/img/profilo_blog_post_photoshop_color_picker.png)\\n\\nI then took the RGB representation of the color and set it as the baseline color on [Paletton](http://paletton.com/). The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.\\n\\n![Using Paletton to generate a full palette from the red shade selected. There\'s a color wheel showing all hues on the left, and a square showing various shades of red on the right.](/img/profilo_blog_post_palette_website_color_picker.png)\\n\\nThe selected primary and secondary colors were a good jumping off point for designer feedback.\\n\\nThere were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project\'s features.\\n\\nHere\'s what the final website looked like:\\n\\n![The website\'s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.](/img/profilo_blog_post_website_final.png)\\n\\nThis is an example page showing the core content, in this case the Getting Started page:\\n\\n![A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code](/img/profilo_blog_post_website_final_docs.png)\\n\\nThis also shows the sidebar structure that was set up through editing `website/sidebars.json`.\\n\\nLastly, I didn\'t have to worry about handling responsive design. You get this out of the box with Docusaurus!\\n\\n![Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.](/img/profilo_blog_post_android_ios.png)\\n\\n## Final Thoughts\\n\\nThe Profilo engineers were happy to see that they didn\'t have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.\\n\\nThe infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."},{"id":"/2017/12/14/introducing-docusaurus","metadata":{"permalink":"/blog/2017/12/14/introducing-docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx","source":"@site/blog/2017/12-14-introducing-docusaurus.mdx","title":"Introducing Docusaurus","description":"We are very happy to introduce Docusaurus to help you manage one or many open source websites.","date":"2017-12-14T00:00:00.000Z","tags":[{"inline":false,"label":"Documentation","permalink":"/blog/tags/documentation"},{"inline":false,"label":"Blog","permalink":"/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":8.215,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Introducing Docusaurus","authors":"JMarcey","tags":["documentation","blog","docusaurus"]},"unlisted":false,"lastUpdatedAt":1723131342000,"lastUpdatedBy":"Mohammad Bagher Abiyat","prevItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"![](/img/slash-introducing.svg)\\n\\nWe are very happy to introduce [Docusaurus](https://github.com/facebook/docusaurus) to help you manage one or many open source websites.\\n\\nWe created [Docusaurus](https://docusaurus.io) for the following reasons:\\n\\n1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.\\n1. To provide features that many of our open source websites need like blog support, search and versioning.\\n1. To make it easy to push updates, new features, and bug fixes to everyone all at once.\\n1. And, finally, to provide a consistent look and feel across all of our open source projects.\\n\\n\x3c!--truncate--\x3e\\n\\nDocusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can [install](https://v1.docusaurus.io/docs/en/installation.html) it using `npm` or `yarn` via a simple initialization script that [creates a working example website out of the box](https://v1.docusaurus.io/docs/en/site-preparation.html).\\n\\nDocusaurus also provides core website and documentation features out-of-the-box including [blog support](https://v1.docusaurus.io/docs/en/blog.html), [internationalization](https://v1.docusaurus.io/docs/en/translation.html), [search](https://v1.docusaurus.io/docs/en/search.html), and [versioning](https://v1.docusaurus.io/docs/en/versioning.html). While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added.\\n\\n## The Birth of docusaurus\\n\\n![](/img/slash-birth.png)\\n\\nWhen Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings.\\n\\nThe open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well.\\n\\nThe problem with the \\"copy the template to your repo\\" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to \\"copy\\" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.\\n\\nSo we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes.\\n\\nDocusaurus was born!\\n\\nAt Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don\'t have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation.\\n\\n## Getting Up and Running\\n\\n![](/img/slash-up-and-running.png)\\n\\nAt its core, we wanted sites running Docusaurus to be simple to use. With one [installation](https://v1.docusaurus.io/docs/en/installation.html) command and some simple [configuration](https://v1.docusaurus.io/docs/en/site-preparation.html), you can actually have a default running website.\\n\\nWhen you run `docusaurus-init`, you will see a structure similar to:\\n\\n```bash\\nroot-of-repo\\n\u251c\u2500\u2500 docs-examples-from-docusaurus\\n\u2502 \u251c\u2500\u2500 doc1.md\\n\u2502 \u251c\u2500\u2500 doc2.md\\n\u2502 \u251c\u2500\u2500 doc3.md\\n\u2502 \u251c\u2500\u2500 example-doc4.md\\n\u2502 \u2514\u2500\u2500 example-doc5.md\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\\n\u2502 \u251c\u2500\u2500 node_modules\\n\u2502 \u251c\u2500\u2500 package.json\\n\u2502 \u251c\u2500\u2500 pages\\n\u2502 \u251c\u2500\u2500 sidebars.json\\n\u2502 \u251c\u2500\u2500 siteConfig.js\\n\u2502 \u2514\u2500\u2500 static\\n```\\n\\nWith the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your [blog posts](https://v1.docusaurus.io/docs/en/blog.html); `siteConfig.js` is where you make most of the [customizations](https://v1.docusaurus.io/docs/en/site-config.html) for your site; `sidebars.json` is where you maintain the layout and content of the [sidebar](https://v1.docusaurus.io/docs/en/navigation.html) for your documentation; the `pages` folder is where you add [custom](https://v1.docusaurus.io/docs/en/custom-pages.html) pages for your site; the `static` folder is where all of your static assets go (e.g., CSS stylesheets and images); and the `core` folder is where you can customize core components of the site, in this case the footer.\\n\\n## How does Docusaurus work?\\n\\nDocusaurus is written primarily in JavaScript and [React](https://facebook.github.io/react), replacing Jekyll which we used in the old template. We use [Remarkable](https://github.com/jonschlinkert/remarkable) for our Markdown rendering and [highlight.js](https://highlightjs.org/) for our code block syntax highlighting. The core of Docusaurus\' functionality is in the [lib directory](https://github.com/facebookexperimental/Docusaurus/tree/master/lib) of the [Docusaurus repo](https://github.com/facebook/docusaurus/). The general structure looks like:\\n\\n```bash\\nroot-of-Docusaurus\\n\u251c\u2500\u2500 lib\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u251c\u2500\u2500 server\\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\\n\u2502 \u2502 \u251c\u2500\u2500 server.js\\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\\n\u2502 \u251c\u2500\u2500 static\\n\u2502 \u251c\u2500\u2500 build-files.js\\n\u2502 \u251c\u2500\u2500 copy-examples.js\\n\u2502 \u251c\u2500\u2500 generate-feed.js\\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\\n\u2502 \u251c\u2500\u2500 rename-version.js\\n\u2502 \u251c\u2500\u2500 start-server.js\\n\u2502 \u251c\u2500\u2500 versions.js\\n\u2502 \u2514\u2500\u2500 write-translations.js\\n```\\n\\nThe key files here are build-files.js and start-server.js. There are many similarities between these two files: `build-files.js` is used to build the physical artifacts for serving by an external web server. `start-server.js` is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:\\n\\n1. Process your website settings in `siteConfig.js`\\n1. Read the document metadata that exists in all the Markdown files in your docs directory.\\n1. Create a table of contents for your documents based upon the IDs extracted from the metadata.\\n1. Convert the Markdown to HTML, including doing link replacement.\\n1. These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder.\\n1. Repeat 1-3 for blog posts.\\n1. The blog file will go in a build/blog directory of the compiled site.\\n1. Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site.\\n1. Copy images into an build/img directory of the compiled site.\\n1. Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build.\\n1. Create CNAME and sitemap.xml files and add those to build.\\n\\nNote that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts.\\n\\nThe final structure of your compiled site will look similar to:\\n\\n```bash\\nbuild\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 CNAME\\n\u2502 \u251c\u2500\u2500 blog\\n\u2502 \u251c\u2500\u2500 css\\n\u2502 \u251c\u2500\u2500 docs\\n\u2502 \u251c\u2500\u2500 en\\n\u2502 \u251c\u2500\u2500 help.html # custom page\\n\u2502 \u251c\u2500\u2500 img\\n\u2502 \u251c\u2500\u2500 index.html # landing page\\n\u2502 \u251c\u2500\u2500 sitemap.xml\\n\u2502 \u2514\u2500\u2500 users.html # custom page\\n```\\n\\n## Community\\n\\n![](/img/docusaurus.svg)\\n\\nWe welcome your [contributions](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to Docusaurus, whether you want to use it for your own site, you want to [contribute](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to the Docusaurus core or just have questions. Follow us on [GitHub](https://github.com/facebook/docusaurus) and [Twitter](https://twitter.com/docusaurus).\\n\\n## Acknowledgements\\n\\nDocusaurus wouldn\'t exist without the work of the rest of the core Docusaurus team: [Eric Nakagawa](http://twitter.com/ericnakagawa), [Hector Ramos](https://twitter.com/hectorramos), [Eric Vicenti](https://twitter.com/EricVicenti) and [Frank Li](https://github.com/deltice) \u2014 a former intern at Facebook who implemented the core technology and features.\\n\\nSpecial thanks also goes out to our earliest [adopters](https://v1.docusaurus.io/en/users.html) of Docusaurus:\\n\\n- [BuckleScript](https://bucklescript.github.io/)\\n- [FastText](https://fasttext.cc)\\n- [Jest](https://jestjs.io)\\n- [Make It Open](http://makeitopen.com)\\n- [Prettier](https://prettier.io/)\\n- [Reason-react](https://reasonml.github.io/reason-react/)\\n- [React Native](https://facebook.github.io/react-native/)\\n- [Relay](https://facebook.github.io/relay/)\\n\\nWithout their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today.\\n\\n## Resources\\n\\n- [Read our documentation](https://v1.docusaurus.io)\\n- [Follow our Twitter feed](https://twitter.com/docusaurus)\\n- [Follow us on GitHub](https://github.com/facebook/docusaurus)\\n- [About Slash, the Docusaurus mascot](https://v1.docusaurus.io/about-slash.html)"}],"blogListPaginated":[{"items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0"],"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":5,"totalCount":23,"nextPage":"/blog/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/preparing-your-site-for-docusaurus-v3","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2"],"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2022/01/24/docusaurus-2021-recap","/2021/11/21/algolia-docsearch-migration","/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2021/03/09/releasing-docusaurus-i18n","/2021/01/19/docusaurus-2020-recap","/2020/01/07/tribute-to-endi","/2019/12/30/docusaurus-2019-recap","/2018/12/14/Happy-First-Birthday-Slash"],"metadata":{"permalink":"/blog/page/4","page":4,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/page/5","page":5,"postsPerPage":5,"totalPages":5,"totalCount":23,"previousPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"blogTags":{"/blog/tags/release":{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about Docusaurus\' new releases","items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n"],"pages":[{"items":["/releases/3.4","/releases/3.3","/releases/3.2","/releases/3.1","/releases/3.0"],"metadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":5,"totalPages":3,"totalCount":13,"nextPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1"],"metadata":{"permalink":"/blog/tags/release/page/2","page":2,"postsPerPage":5,"totalPages":3,"totalCount":13,"previousPage":"/blog/tags/release","nextPage":"/blog/tags/release/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/release/page/3","page":3,"postsPerPage":5,"totalPages":3,"totalCount":13,"previousPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/maintenance":{"inline":false,"label":"Maintenance","permalink":"/blog/tags/maintenance","items":["/preparing-your-site-for-docusaurus-v3"],"pages":[{"items":["/preparing-your-site-for-docusaurus-v3"],"metadata":{"permalink":"/blog/tags/maintenance","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/recap":{"inline":false,"label":"Recap","permalink":"/blog/tags/recap","description":"Blog posts about Docusaurus\' year recaps","items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"pages":[{"items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"metadata":{"permalink":"/blog/tags/recap","page":1,"postsPerPage":5,"totalPages":1,"totalCount":3,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/search":{"inline":false,"label":"Search","permalink":"/blog/tags/search","items":["/2021/11/21/algolia-docsearch-migration"],"pages":[{"items":["/2021/11/21/algolia-docsearch-migration"],"metadata":{"permalink":"/blog/tags/search","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/beta":{"inline":false,"label":"Beta","permalink":"/blog/tags/beta","items":["/2021/05/12/announcing-docusaurus-two-beta"],"pages":[{"items":["/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/tags/beta","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/i-18-n":{"inline":false,"label":"I18n","permalink":"/blog/tags/i-18-n","items":["/2021/03/09/releasing-docusaurus-i18n"],"pages":[{"items":["/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/i-18-n","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/endi":{"inline":false,"label":"Endi","permalink":"/blog/tags/endi","items":["/2020/01/07/tribute-to-endi"],"pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/endi","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/tribute":{"inline":false,"label":"Tribute","permalink":"/blog/tags/tribute","items":["/2020/01/07/tribute-to-endi"],"pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/tribute","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/birth":{"inline":false,"label":"Birth","permalink":"/blog/tags/birth","items":["/2018/12/14/Happy-First-Birthday-Slash"],"pages":[{"items":["/2018/12/14/Happy-First-Birthday-Slash"],"metadata":{"permalink":"/blog/tags/birth","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/new":{"inline":false,"label":"New","permalink":"/blog/tags/new","items":["/2018/09/11/Towards-Docusaurus-2"],"pages":[{"items":["/2018/09/11/Towards-Docusaurus-2"],"metadata":{"permalink":"/blog/tags/new","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/adoption":{"inline":false,"label":"Adoption","permalink":"/blog/tags/adoption","items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"pages":[{"items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/adoption","page":1,"postsPerPage":5,"totalPages":1,"totalCount":2,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/profilo":{"inline":false,"label":"Profilo","permalink":"/blog/tags/profilo","items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"pages":[{"items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/profilo","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/documentation":{"inline":false,"label":"Documentation","permalink":"/blog/tags/documentation","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/documentation","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/blog":{"inline":false,"label":"Blog","permalink":"/blog/tags/blog","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/docusaurus":{"inline":false,"label":"Docusaurus","permalink":"/blog/tags/docusaurus","items":["/2017/12/14/introducing-docusaurus"],"pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false}},"blogTagsListPath":"/blog/tags","authorsMap":{"JMarcey":{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","page":{"permalink":"/blog/authors/j-marcey"},"socials":{"x":"https://x.com/joelmarcey","github":"https://github.com/JoelMarcey"},"imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},"zpao":{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://x.com/zpao","page":{"permalink":"/blog/authors/zpao"},"socials":{"x":"https://x.com/zpao","github":"https://github.com/zpao"},"imageURL":"https://github.com/zpao.png","key":"zpao"},"slorber":{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","page":{"permalink":"/blog/authors/slorber"},"description":"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\\n","socials":{"x":"https://x.com/sebastienlorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","github":"https://github.com/slorber","newsletter":"https://thisweekinreact.com"},"imageURL":"https://github.com/slorber.png","key":"slorber"},"yangshun":{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","page":{"permalink":"/blog/authors/yangshun"},"socials":{"x":"https://x.com/yangshunz","github":"https://github.com/yangshun"},"imageURL":"https://github.com/yangshun.png","key":"yangshun"},"lex111":{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","page":{"permalink":"/blog/authors/lex-111"},"imageURL":"https://github.com/lex111.png","key":"lex111"},"Josh-Cena":{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","page":{"permalink":"/blog/authors/josh-cena"},"imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},"endiliey":{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},"abernathyca":{"name":"Christine Abernathy","url":"http://x.com/abernathyca","socials":{"x":"https://x.com/abernathyca"},"imageURL":"https://github.com/caabernathy.png","key":"abernathyca","page":null},"shortcuts":{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","socials":{"x":"https://x.com/sh0rtcts","github":"https://github.com/shortcuts"},"imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null}}},"blog-tests":{"blogSidebarTitle":"Recent posts","blogPosts":[{"id":"/2024/07/03/dual-author","metadata":{"permalink":"/tests/blog/2024/07/03/dual-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-dual-author.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-dual-author.mdx","title":"Dual author socials","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"Dual author socials","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"nextItem":{"title":"How multiple authors with socials looks","permalink":"/tests/blog/2024/07/03/multiple-authors"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2024/07/03/multiple-authors","metadata":{"permalink":"/tests/blog/2024/07/03/multiple-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-multiple-authors.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-multiple-authors.mdx","title":"How multiple authors with socials looks","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","stackoverflow":"https://stackoverflow.com/users/82609/sebastien-lorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor","key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"github":"https://github.com/slorber","twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"github":"https://github.com/slorber","twitter":"https://x.com/sebastienlorber"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter"},"key":null,"page":null},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter","q":"https://thisweekinreact.com/newsletter","r":"https://thisweekinreact.com/newsletter","s":"https://thisweekinreact.com/newsletter","t":"https://thisweekinreact.com/newsletter","u":"https://thisweekinreact.com/newsletter","v":"https://thisweekinreact.com/newsletter","w":"https://thisweekinreact.com/newsletter","x":"https://thisweekinreact.com/newsletter","y":"https://thisweekinreact.com/newsletter","z":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"How multiple authors with socials looks","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber","github":"https://github.com/slorber","stackoverflow":"https://stackoverflow.com/users/82609/sebastien-lorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"twitter":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor"},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"github":"https://github.com/slorber","twitter":"https://twitter.com/sebastienlorber","x":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor","socials":{"github":"https://github.com/slorber","twitter":"https://x.com/sebastienlorber"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter"}},{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","socials":{"a":"https://thisweekinreact.com/newsletter","b":"https://thisweekinreact.com/newsletter","c":"https://thisweekinreact.com/newsletter","d":"https://thisweekinreact.com/newsletter","e":"https://thisweekinreact.com/newsletter","f":"https://thisweekinreact.com/newsletter","g":"https://thisweekinreact.com/newsletter","h":"https://thisweekinreact.com/newsletter","i":"https://thisweekinreact.com/newsletter","j":"https://thisweekinreact.com/newsletter","k":"https://thisweekinreact.com/newsletter","l":"https://thisweekinreact.com/newsletter","m":"https://thisweekinreact.com/newsletter","n":"https://thisweekinreact.com/newsletter","o":"https://thisweekinreact.com/newsletter","p":"https://thisweekinreact.com/newsletter","q":"https://thisweekinreact.com/newsletter","r":"https://thisweekinreact.com/newsletter","s":"https://thisweekinreact.com/newsletter","t":"https://thisweekinreact.com/newsletter","u":"https://thisweekinreact.com/newsletter","v":"https://thisweekinreact.com/newsletter","w":"https://thisweekinreact.com/newsletter","x":"https://thisweekinreact.com/newsletter","y":"https://thisweekinreact.com/newsletter","z":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"prevItem":{"title":"Dual author socials","permalink":"/tests/blog/2024/07/03/dual-author"},"nextItem":{"title":"Single author socials","permalink":"/tests/blog/2024/07/03/single-author"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2024/07/03/single-author","metadata":{"permalink":"/tests/blog/2024/07/03/single-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2024-07-03-single-author.mdx","source":"@site/_dogfooding/_blog tests/2024-07-03-single-author.mdx","title":"Single author socials","description":"Content","date":"2024-07-03T00:00:00.000Z","tags":[],"readingTime":1.4,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor editor editor editor editor editor editor","socials":{"x":"https://x.com/sebastienlorber","twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"},"key":null,"page":null}],"frontMatter":{"title":"Single author socials","authors":[{"name":"S\xe9bastien Lorber","imageURL":"https://github.com/slorber.png","title":"Docusaurus Maintainer and This Week In React editor editor editor editor editor editor editor editor editor editor editor editor editor editor","socials":{"x":"https://x.com/sebastienlorber","twitter":"https://twitter.com/sebastienlorber","github":"https://github.com/slorber","linkedin":"https://www.linkedin.com/in/sebastienlorber/","newsletter":"https://thisweekinreact.com/newsletter"}}]},"unlisted":false,"prevItem":{"title":"How multiple authors with socials looks","permalink":"/tests/blog/2024/07/03/multiple-authors"},"nextItem":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/"}},"content":"## Content\\n\\nContent about the blog post"},{"id":"/2023/08/05/","metadata":{"permalink":"/tests/blog/2023/08/05/","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-08-05.mdx","source":"@site/_dogfooding/_blog tests/2023-08-05.mdx","title":"Ensure heading anchor slugs respect GitHub emoji behavior","description":"This is a friendly header","date":"2023-08-05T00:00:00.000Z","tags":[],"readingTime":3.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","date":"2023-08-05T00:00:00.000Z"},"unlisted":false,"prevItem":{"title":"Single author socials","permalink":"/tests/blog/2024/07/03/single-author"},"nextItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"}},"content":"## :smiley: This is a friendly header\\n\\n## \ud83d\ude03 This is a friendly header (real smiley)"},{"id":"/2023/07/19/a","metadata":{"permalink":"/tests/blog/2023/07/19/a","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-a.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-a.mdx","title":"Test if href in feed resolved correctly","description":"absolute full url","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":2.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Test if href in feed resolved correctly"},"unlisted":false,"prevItem":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/"},"nextItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"}},"content":"[absolute full url](https://github.com/facebook/docusaurus)\\n\\n[absolute url with implicit domain name](/tests/blog/2023/07/19/b)\\n\\n[relative url](2023-07-19-b.mdx)"},{"id":"/2023/07/19/b","metadata":{"permalink":"/tests/blog/2023/07/19/b","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-b.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-b.mdx","title":"Test Relative Path","description":"","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":0,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"unlisted":false,"prevItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"},"nextItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"}},"content":""},{"id":"/x/y/z.html","metadata":{"permalink":"/tests/blog/x/y/z.html","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","source":"@site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","title":"A post with html slug","description":"This is a blog post with an html slug!","date":"2022-10-02T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"A post with html slug","tags":["paginated-tag"],"slug":"/x/y/z.html"},"unlisted":false,"prevItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"},"nextItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"}},"content":"This is a blog post with an html slug!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/unlisted-post","metadata":{"permalink":"/tests/blog/unlisted-post","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","source":"@site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","title":"Unlisted blog post","description":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.","date":"2022-08-24T00:00:00.000Z","tags":[{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Visibility","permalink":"/tests/blog/tags/visibility"},{"inline":false,"label":"Unlisted","permalink":"/tests/blog/tags/unlisted"}],"readingTime":4.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Unlisted blog post","unlisted":true,"tags":["blog","visibility","unlisted"],"slug":"/unlisted-post"},"unlisted":true},"content":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.\\n\\nIt is filtered from the sidebar, sitemap, SEO indexation..."},{"id":"/2022/04/20/dup-footnote","metadata":{"permalink":"/tests/blog/2022/04/20/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","title":"First post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-04-20T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"First post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"},"nextItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/22/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/22/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","title":"Second post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-22T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Second post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"},"nextItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/21/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/21/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","title":"Third post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-21T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Third post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"},"nextItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/20/image-only-authors","metadata":{"permalink":"/tests/blog/2022/01/20/image-only-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","source":"@site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","title":"Image-only authors","description":"You can make a compact authors list without author names!","date":"2022-01-20T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":null,"page":null},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":null,"page":null},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":null,"page":null},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":null,"page":null},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":null,"page":null},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":null,"page":null},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png","key":null,"page":null},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":null,"page":null},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png","key":null,"page":null},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":null,"page":null},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png","key":null,"page":null},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":null,"page":null},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png","key":null,"page":null},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":null,"page":null},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":null,"page":null},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":null,"page":null},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":null,"page":null},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":null,"page":null},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":null,"page":null},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png","key":null,"page":null}],"frontMatter":{"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png"},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png"},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png"},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png"},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png"},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png"},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png"},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png"},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png"},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png"},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png"},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png"},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png"},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png"},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png"},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png"},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png"},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png"},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png"}],"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"}},"content":"You can make a compact authors list without author names!"},{"id":"/2021/11/13/dup-title","metadata":{"permalink":"/tests/blog/2021/11/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","title":"Post with duplicate title","description":"I hope I\'m still here","date":"2021-11-13T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"},"nextItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"}},"content":"I hope I\'m still here"},{"id":"/2021/10/08/blog-post-mdx-require-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","title":"Blog post MDX require Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-08T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"readingTime":6.6,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX require Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"},"nextItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\nTest MDX with require calls\\n\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\n\\n<img src={useBaseUrl(\'/img/docusaurus.png\')} />\\n\\n<img src={require(\'../../static/img/docusaurus.png\').default} />\\n\\n<img src={require(\'@site/static/img/docusaurus.png\').default} />"},{"id":"/2021/10/07/blog-post-mdx-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","title":"Blog post MDX Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-07T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],"hide_reading_time":true},"unlisted":false,"prevItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\n## Imports\\n\\nHere are some imports:\\n\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n## Exports\\n\\nHere are some exports:\\n\\nexport const someExport = 42;\\n\\n## Tabs test\\n\\nHere are some tabs:\\n\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n\\nHere are some tabs, inside `mdx-code-block`:\\n\\n```mdx-code-block\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n```"},{"id":"/2021/09/13/dup-title","metadata":{"permalink":"/tests/blog/2021/09/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","title":"Post with duplicate title","description":"See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.","date":"2021-09-13T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"name":"Josh-Cena1","key":null,"page":null},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png","key":null,"page":null},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena","key":null,"page":null},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com","key":null,"page":null}],"frontMatter":{"tags":["paginated-tag"],"authors":[{"name":"Josh-Cena1"},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png"},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena"},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com"}]},"unlisted":false,"prevItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"},"nextItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"}},"content":"See https://github.com/facebook/docusaurus/issues/6059. This one and [2021-11-13-dup-title.md](./2021-11-13-dup-title.mdx) should both show up."},{"id":"/2021/08/23/multiple-authors","metadata":{"permalink":"/tests/blog/2021/08/23/multiple-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","source":"@site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","title":"Multiple authors","description":"You can have multiple authors for one blog post!","date":"2021-08-23T00:00:00.000Z","tags":[{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Long","permalink":"/tests/blog/tags/long"},{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long"},{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"},{"inline":false,"label":"Long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long"}],"readingTime":1.8,"hasTruncateMarker":false,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4","key":null,"page":null}],"frontMatter":{"authors":["slorber",{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4"}],"tags":["blog","docusaurus","paginated-tag","long","long-long","long-long-long","long-long-long-long","long-long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"},"nextItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"}},"content":"You can have multiple authors for one blog post!"},{"id":"/2021/08/22/no-author","metadata":{"permalink":"/tests/blog/2021/08/22/no-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-22-no-author.mdx","source":"@site/_dogfooding/_blog tests/2021-08-22-no-author.mdx","title":"Hmmm!","description":"This is a blog post from an anonymous author!","date":"2021-08-22T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"},"nextItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"This is a blog post from an anonymous author!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/2021/08/21/blog-post-toc-tests","metadata":{"permalink":"/tests/blog/2021/08/21/blog-post-toc-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","title":"Blog TOC FrontMatter tests","description":"{/ truncate /}","date":"2021-08-21T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1.8,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog TOC FrontMatter tests","authors":["slorber"],"toc_min_heading_level":2,"toc_max_heading_level":4,"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"},"nextItem":{"title":"Using twice the blog plugin","permalink":"/tests/blog/2020/08/03/demo/second-blog-intro"}},"content":"{/* truncate */}\\n\\nimport Content from \'@site/_dogfooding/_partials/toc-tests.mdx\';\\n\\n<Content />"},{"id":"/2020/08/03/demo/second-blog-intro","metadata":{"permalink":"/tests/blog/2020/08/03/demo/second-blog-intro","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","source":"@site/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","title":"Using twice the blog plugin","description":"Did you know you can use multiple instances of the same plugin?","date":"2020-08-03T00:00:00.000Z","tags":[{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog"},{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus"}],"readingTime":7,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Using twice the blog plugin","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus"]},"unlisted":false,"prevItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"Did you know you can use multiple instances of the same plugin?\\n\\n{/* truncate */}\\n\\n:::tip\\n\\nUsing twice the blog plugin permits you to create more than one blog on the same Docusaurus website!\\n\\n:::"}],"blogListPaginated":[{"items":["/2024/07/03/dual-author","/2024/07/03/multiple-authors","/2024/07/03/single-author"],"metadata":{"permalink":"/tests/blog","page":1,"postsPerPage":3,"totalPages":7,"totalCount":19,"nextPage":"/tests/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2023/08/05/","/2023/07/19/a","/2023/07/19/b"],"metadata":{"permalink":"/tests/blog/page/2","page":2,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog","nextPage":"/tests/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/x/y/z.html","/2022/04/20/dup-footnote","/2022/01/22/dup-footnote"],"metadata":{"permalink":"/tests/blog/page/3","page":3,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/2","nextPage":"/tests/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2022/01/21/dup-footnote","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/4","page":4,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/3","nextPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/5","page":5,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/4","nextPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/page/6","page":6,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/5","nextPage":"/tests/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/page/7","page":7,"postsPerPage":3,"totalPages":7,"totalCount":19,"previousPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}}],"blogTags":{"/tests/blog/tags/paginated-tag":{"inline":false,"label":"Paginated-tag","permalink":"/tests/blog/tags/paginated-tag","items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title","/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title","/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag","page":1,"postsPerPage":3,"totalPages":4,"totalCount":10,"nextPage":"/tests/blog/tags/paginated-tag/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/2","page":2,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag","nextPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/3","page":3,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/2","nextPage":"/tests/blog/tags/paginated-tag/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/4","page":4,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/blog":{"inline":false,"label":"Blog","permalink":"/tests/blog/tags/blog","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/blog","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/blog/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/blog","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/visibility":{"inline":false,"label":"Visibility","permalink":"/tests/blog/tags/visibility","items":["/unlisted-post"],"pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/visibility","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/unlisted":{"inline":false,"label":"Unlisted","permalink":"/tests/blog/tags/unlisted","items":["/unlisted-post"],"pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/unlisted","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/docusaurus":{"inline":false,"label":"Docusaurus","permalink":"/tests/blog/tags/docusaurus","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/docusaurus","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/docusaurus/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/docusaurus/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/docusaurus","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long":{"inline":false,"label":"Long-long","permalink":"/tests/blog/tags/long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long":{"inline":false,"label":"Long-long-long","permalink":"/tests/blog/tags/long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long":{"inline":false,"label":"Long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long":{"inline":false,"label":"Long","permalink":"/tests/blog/tags/long","items":["/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long-long":{"inline":false,"label":"Long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long","items":["/2021/08/23/multiple-authors"],"pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false}},"blogTagsListPath":"/tests/blog/tags","authorsMap":{"slorber":{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","page":{"permalink":"/tests/blog/authors/slorber"},"imageURL":"https://github.com/slorber.png","key":"slorber"},"ozaki":{"name":"ozaki","page":{"permalink":"/tests/blog/authors/custom/ozaki/permalink"},"key":"ozaki"}}}},"docusaurus-plugin-content-pages":{"default":[{"type":"jsx","permalink":"/","source":"@site/src/pages/index.tsx"},{"type":"mdx","permalink":"/tests","source":"@site/src/pages/tests.mdx","title":"Tests","description":"Docusaurus use some extra plugin instances for testing / dogfooding purpose:","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/tests.mdx","unlisted":false},{"type":"jsx","permalink":"/versions","source":"@site/src/pages/versions.tsx"},{"type":"mdx","permalink":"/examples/markdownPageExample","source":"@site/src/pages/examples/markdownPageExample.mdx","title":"Markdown Page example","description":"Markdown Page example","frontMatter":{"title":"Markdown Page example","description":"Markdown Page example","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx","unlisted":false},{"type":"mdx","permalink":"/examples/noIndex","source":"@site/src/pages/examples/noIndex.mdx","title":"No Index Page example","description":"This page will not be indexed by search engines because it contains the page following page metadata markup:","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/noIndex.mdx","unlisted":false},{"type":"jsx","permalink":"/showcase/","source":"@site/src/pages/showcase/index.tsx"}],"pages-tests":[{"type":"jsx","permalink":"/tests/pages/analytics","source":"@site/_dogfooding/_pages tests/analytics.tsx"},{"type":"mdx","permalink":"/tests/pages/code-block-tests","source":"@site/_dogfooding/_pages tests/code-block-tests.mdx","title":"Code block tests","description":"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/crashTest","source":"@site/_dogfooding/_pages tests/crashTest.tsx"},{"type":"mdx","permalink":"/tests/pages/diagrams","source":"@site/_dogfooding/_pages tests/diagrams.mdx","title":"Diagram Examples","description":"Invalid Diagrams","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/embeds","source":"@site/_dogfooding/_pages tests/embeds.tsx"},{"type":"jsx","permalink":"/tests/pages/error-boundary-tests","source":"@site/_dogfooding/_pages tests/error-boundary-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/head-metadata","source":"@site/_dogfooding/_pages tests/head-metadata.mdx","description":"Head Metadata tests","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/hydration-tests","source":"@site/_dogfooding/_pages tests/hydration-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/","source":"@site/_dogfooding/_pages tests/index.mdx","description":"Page","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/index.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/layout-no-children","source":"@site/_dogfooding/_pages tests/layout-no-children.tsx"},{"type":"jsx","permalink":"/tests/pages/link-tests","source":"@site/_dogfooding/_pages tests/link-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/markdown-tests-md","source":"@site/_dogfooding/_pages tests/markdown-tests-md.md","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-md.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/markdown-tests-mdx","source":"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/navbar-dropdown-tests","source":"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","title":"navbar-dropdown-tests","description":"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/page-toc-tests","source":"@site/_dogfooding/_pages tests/page-toc-tests.mdx","frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/page-toc-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/seo","source":"@site/_dogfooding/_pages tests/seo.md","title":"custom SEO title","description":"custom SEO description","frontMatter":{"title":"custom SEO title","description":"custom SEO description","keywords":["custom","keywords"],"image":"./local-image.png"},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/tabs-tests","source":"@site/_dogfooding/_pages tests/tabs-tests.mdx","title":"Tabs tests","description":"Tabs with dynamic default value","frontMatter":{},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/unlisted","source":"@site/_dogfooding/_pages tests/unlisted.mdx","title":"Unlisted page","description":"This unlisted page should always be directly accessible, but hidden from search engines","frontMatter":{"unlisted":true},"lastUpdatedBy":"Mohammad Bagher Abiyat","lastUpdatedAt":1723131342000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx","unlisted":true},{"type":"jsx","permalink":"/tests/pages/z-index-tests","source":"@site/_dogfooding/_pages tests/z-index-tests.tsx"},{"type":"jsx","permalink":"/tests/pages/react-18/","source":"@site/_dogfooding/_pages tests/react-18/index.tsx"}]},"docusaurus-plugin-debug":{},"docusaurus-plugin-google-gtag":{},"docusaurus-theme-classic":{},"docusaurus-theme-search-algolia":{},"changelog-plugin":{"default":{"blogSidebarTitle":"Changelog","blogPosts":[{"id":"/3.4.0","metadata":{"permalink":"/changelog/3.4.0","source":"@site/changelog/source/3.4.0.md","title":"3.4.0","description":"New Feature","date":"2024-05-31T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Azzedine E.","alias":"Arsero","url":"https://github.com/Arsero","imageURL":"https://github.com/Arsero.png","key":"Arsero","page":null},{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Mahri Ilmedova","alias":"ilmedova","url":"https://github.com/ilmedova","imageURL":"https://github.com/ilmedova.png","key":"ilmedova","page":null},{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},{"name":"Nick Coughlin","alias":"ncoughlin","url":"https://github.com/ncoughlin","imageURL":"https://github.com/ncoughlin.png","key":"ncoughlin","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Petar_mc","alias":"PetarMc1","url":"https://github.com/PetarMc1","imageURL":"https://github.com/PetarMc1.png","key":"PetarMc1","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-31T20:00","authors":["Arsero","CodeDoctorDE","homotechsual","ilmedova","namnguyenthanhwork","ncoughlin","OzakIOne","PetarMc1","revi","slorber","tats-u"]},"unlisted":false,"nextItem":{"title":"3.3.2","permalink":"/changelog/3.3.2"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#10137](https://github.com/facebook/docusaurus/pull/10137) feat(docs, blog): add support for `tags.yml`, predefined list of tags ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-translations`\\n - [#10151](https://github.com/facebook/docusaurus/pull/10151) feat(theme-translations): Added Turkmen (tk) default theme translations ([@ilmedova](https://github.com/ilmedova))\\n - [#10111](https://github.com/facebook/docusaurus/pull/10111) feat(theme-translations): Add Bulgarian default theme translations (bg) ([@PetarMc1](https://github.com/PetarMc1))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9859](https://github.com/facebook/docusaurus/pull/9859) feat(core): hash router option - browse site offline (experimental) ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#10121](https://github.com/facebook/docusaurus/pull/10121) feat(core): site storage config options (experimental) ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#10185](https://github.com/facebook/docusaurus/pull/10185) fix(docs, blog): Markdown link resolution does not support hot reload ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#10178](https://github.com/facebook/docusaurus/pull/10178) fix(theme): SearchPage should respect `contextualSearch: false` setting ([@ncoughlin](https://github.com/ncoughlin))\\n - [#10164](https://github.com/facebook/docusaurus/pull/10164) fix(search): fix algolia search container bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#10168](https://github.com/facebook/docusaurus/pull/10168) fix(mdx-loader): resolve Markdown/MDX links with Remark instead of RegExp ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#10165](https://github.com/facebook/docusaurus/pull/10165) fix(theme-translation): add missing Korean (ko) theme translations ([@revi](https://github.com/revi))\\n - [#10157](https://github.com/facebook/docusaurus/pull/10157) fix(theme-translations): complete Vietnamese theme translations ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- `docusaurus`\\n - [#10145](https://github.com/facebook/docusaurus/pull/10145) fix(core): fix serve workaround regexp ([@slorber](https://github.com/slorber))\\n - [#10142](https://github.com/facebook/docusaurus/pull/10142) fix(core): fix `docusaurus serve` broken for assets when using trailingSlash ([@slorber](https://github.com/slorber))\\n - [#10130](https://github.com/facebook/docusaurus/pull/10130) fix(core): the broken anchor checker should not be sensitive pathname trailing slashes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#10144](https://github.com/facebook/docusaurus/pull/10144) fix(theme): fix announcement bar layout shift due to missing storage key namespace ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#10132](https://github.com/facebook/docusaurus/pull/10132) fix(core): `configurePostCss()` should run after `configureWebpack()` ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`, `docusaurus`\\n - [#10131](https://github.com/facebook/docusaurus/pull/10131) fix(core): codegen should generate unique route prop filenames ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#10118](https://github.com/facebook/docusaurus/pull/10118) fix(theme-translations): fix missing pluralization for label DocCard.categoryDescription.plurals ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#10176](https://github.com/facebook/docusaurus/pull/10176) docs: add community plugin docusaurus-graph ([@Arsero](https://github.com/Arsero))\\n- [#10173](https://github.com/facebook/docusaurus/pull/10173) docs: improve how to use `<details>` ([@tats-u](https://github.com/tats-u))\\n- [#10167](https://github.com/facebook/docusaurus/pull/10167) docs: suggest using `{<...>...</...>}` if don\'t use Markdown in migra\u2026 ([@tats-u](https://github.com/tats-u))\\n- [#10143](https://github.com/facebook/docusaurus/pull/10143) docs: recommend users to remove hast-util-is-element in migration to v3 ([@tats-u](https://github.com/tats-u))\\n- [#10124](https://github.com/facebook/docusaurus/pull/10124) docs: v3 prepare your site blog post should point users to the upgrade guide ([@homotechsual](https://github.com/homotechsual))\\n\\n## :robot: Dependencies\\n\\n- [#10155](https://github.com/facebook/docusaurus/pull/10155) chore(deps): bump peaceiris/actions-gh-pages from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10154](https://github.com/facebook/docusaurus/pull/10154) chore(deps): bump github/codeql-action from 2.13.4 to 3.25.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10112](https://github.com/facebook/docusaurus/pull/10112) chore(deps): bump actions/dependency-review-action from 4.3.1 to 4.3.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 11\\n\\n- Azzedine E. ([@Arsero](https://github.com/Arsero))\\n- CodeDoctor ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n- Mahri Ilmedova ([@ilmedova](https://github.com/ilmedova))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Nguy\u1ec5n Th\xe0nh Nam ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- Nick Coughlin ([@ncoughlin](https://github.com/ncoughlin))\\n- Petar_mc ([@PetarMc1](https://github.com/PetarMc1))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- Yongmin ([@revi](https://github.com/revi))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.3.2","metadata":{"permalink":"/changelog/3.3.2","source":"@site/changelog/source/3.3.2.md","title":"3.3.2","description":"Bug Fix","date":"2024-05-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T20:00","authors":["slorber"]},"unlisted":false,"prevItem":{"title":"3.4.0","permalink":"/changelog/3.4.0"},"nextItem":{"title":"3.3.1","permalink":"/changelog/3.3.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#10103](https://github.com/facebook/docusaurus/pull/10103) fix(core): do not recreate ReactDOM Root, fix React warning on hot reload ([@slorber](https://github.com/slorber))\\n\\n## Committers: 1\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/3.3.1","metadata":{"permalink":"/changelog/3.3.1","source":"@site/changelog/source/3.3.1.md","title":"3.3.1","description":"Failed release","date":"2024-05-03T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T19:00"},"unlisted":false,"prevItem":{"title":"3.3.2","permalink":"/changelog/3.3.2"},"nextItem":{"title":"3.3.0","permalink":"/changelog/3.3.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nFailed release"},{"id":"/3.3.0","metadata":{"permalink":"/changelog/3.3.0","source":"@site/changelog/source/3.3.0.md","title":"3.3.0","description":"New Feature","date":"2024-05-03T18:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Abdullah Saud","alias":"Abdullah-03","url":"https://github.com/Abdullah-03","imageURL":"https://github.com/Abdullah-03.png","key":"Abdullah-03","page":null},{"name":"Andrea Mazzucchelli","alias":"andrmaz","url":"https://github.com/andrmaz","imageURL":"https://github.com/andrmaz.png","key":"andrmaz","page":null},{"name":"Daniel Li","alias":"d4nyll","url":"https://github.com/d4nyll","imageURL":"https://github.com/d4nyll.png","key":"d4nyll","page":null},{"name":"Can Eldem","alias":"eldemcan","url":"https://github.com/eldemcan","imageURL":"https://github.com/eldemcan.png","key":"eldemcan","page":null},{"name":"Guille","alias":"gagdiez","url":"https://github.com/gagdiez","imageURL":"https://github.com/gagdiez.png","key":"gagdiez","page":null},{"name":"H3NR1KE","alias":"h3nr1ke","url":"https://github.com/h3nr1ke","imageURL":"https://github.com/h3nr1ke.png","key":"h3nr1ke","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Alexey Ivanov","alias":"iAdramelk","url":"https://github.com/iAdramelk","imageURL":"https://github.com/iAdramelk.png","key":"iAdramelk","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Kai Hoffman","alias":"kaihoffman","url":"https://github.com/kaihoffman","imageURL":"https://github.com/kaihoffman.png","key":"kaihoffman","page":null},{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Bairui Su","alias":"pearmini","url":"https://github.com/pearmini","imageURL":"https://github.com/pearmini.png","key":"pearmini","page":null},{"name":"Alexander Sandor","alias":"SandPod","url":"https://github.com/SandPod","imageURL":"https://github.com/SandPod.png","key":"SandPod","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tommaso Sotte","alias":"tomsotte","url":"https://github.com/tomsotte","imageURL":"https://github.com/tomsotte.png","key":"tomsotte","page":null},{"name":"Tomy Hsieh","alias":"tomy0000000","url":"https://github.com/tomy0000000","imageURL":"https://github.com/tomy0000000.png","key":"tomy0000000","page":null},{"name":"Virgil993","alias":"Virgil993","url":"https://github.com/Virgil993","imageURL":"https://github.com/Virgil993.png","key":"Virgil993","page":null},{"name":"volcanofr","alias":"volcanofr","url":"https://github.com/volcanofr","imageURL":"https://github.com/volcanofr.png","key":"volcanofr","page":null},{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-05-03T18:00","authors":["Abdullah-03","andrmaz","d4nyll","eldemcan","gagdiez","h3nr1ke","homotechsual","iAdramelk","johnnyreilly","kaihoffman","lebalz","OzakIOne","pearmini","SandPod","slorber","tomsotte","tomy0000000","Virgil993","volcanofr","Zwyx"]},"unlisted":false,"prevItem":{"title":"3.3.1","permalink":"/changelog/3.3.1"},"nextItem":{"title":"3.2.1","permalink":"/changelog/3.2.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-sitemap`\\n - [#10083](https://github.com/facebook/docusaurus/pull/10083) feat: add createSitemapItems hook ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#10064](https://github.com/facebook/docusaurus/pull/10064) feat(core): add new site config option `siteConfig.markdown.anchors.maintainCase` ([@iAdramelk](https://github.com/iAdramelk))\\n- `docusaurus`\\n - [#9767](https://github.com/facebook/docusaurus/pull/9767) feat(cli): docusaurus deploy should support a --target-dir option ([@SandPod](https://github.com/SandPod))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#10042](https://github.com/facebook/docusaurus/pull/10042) feat(core): simplify plugin API, support route.props ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#10032](https://github.com/facebook/docusaurus/pull/10032) feat(pages): add LastUpdateAuthor & LastUpdateTime & editUrl ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-utils`, `docusaurus`\\n - [#10092](https://github.com/facebook/docusaurus/pull/10092) chore: Upgrade svgr / svgo / cssnano ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#10091](https://github.com/facebook/docusaurus/pull/10091) fix(theme): `<Tabs>` props should allow overriding defaults ([@gagdiez](https://github.com/gagdiez))\\n - [#10080](https://github.com/facebook/docusaurus/pull/10080) fix(theme): `<Admonition>` should render properly without heading/icon ([@andrmaz](https://github.com/andrmaz))\\n- `docusaurus`\\n - [#10090](https://github.com/facebook/docusaurus/pull/10090) fix(core): `docusaurus serve` redirects should include the site `/baseUrl/` prefix ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#10079](https://github.com/facebook/docusaurus/pull/10079) fix: handle React v18.3 warnings ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#10070](https://github.com/facebook/docusaurus/pull/10070) fix(theme-translations): add missing theme translations for pt-BR ([@h3nr1ke](https://github.com/h3nr1ke))\\n - [#10051](https://github.com/facebook/docusaurus/pull/10051) fix(theme-translations): correct label for tip admonition in italian ([@tomsotte](https://github.com/tomsotte))\\n- `docusaurus-theme-search-algolia`\\n - [#10048](https://github.com/facebook/docusaurus/pull/10048) fix(algolia): add insights property on Algolia Theme Config object TS definition ([@Virgil993](https://github.com/Virgil993))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#10054](https://github.com/facebook/docusaurus/pull/10054) fix(core): sortRoutes shouldn\'t have a default baseUrl value, this led to a bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#10025](https://github.com/facebook/docusaurus/pull/10025) fix(docs): sidebar item label impact the pagination label of docs ([@Abdullah-03](https://github.com/Abdullah-03))\\n- `docusaurus-utils`\\n - [#10022](https://github.com/facebook/docusaurus/pull/10022) fix(utils): getFileCommitDate should support `log.showSignature=true` ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#10060](https://github.com/facebook/docusaurus/pull/10060) refactor(core): optimize App entrypoint, it should not re-render when navigating ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#10061](https://github.com/facebook/docusaurus/pull/10061) refactor(theme): simplify CSS solution to solve empty search container ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#10023](https://github.com/facebook/docusaurus/pull/10023) refactor(website): refactor showcase components ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#10096](https://github.com/facebook/docusaurus/pull/10096) docs: Fix `d\xe9ja` to `d\xe9j\xe0` in `swizzling.mdx` ([@Zwyx](https://github.com/Zwyx))\\n- [#10093](https://github.com/facebook/docusaurus/pull/10093) docs: Fix dead Typesense links ([@kaihoffman](https://github.com/kaihoffman))\\n- [#10085](https://github.com/facebook/docusaurus/pull/10085) docs: make `ThemedImage` example work out of the box ([@lebalz](https://github.com/lebalz))\\n- [#10082](https://github.com/facebook/docusaurus/pull/10082) docs: add note regarding ts extension for config file. ([@homotechsual](https://github.com/homotechsual))\\n- [#9490](https://github.com/facebook/docusaurus/pull/9490) docs: add troubleshooting steps to migration/upgrade page ([@homotechsual](https://github.com/homotechsual))\\n- [#10056](https://github.com/facebook/docusaurus/pull/10056) docs(search): Algolia troubleshooting section for index configuration problems ([@slorber](https://github.com/slorber))\\n- [#10039](https://github.com/facebook/docusaurus/pull/10039) docs: visit is a named export of unist-util-visit ([@pearmini](https://github.com/pearmini))\\n- [#10020](https://github.com/facebook/docusaurus/pull/10020) docs: Fix wrong path example ([@tomy0000000](https://github.com/tomy0000000))\\n- [#10011](https://github.com/facebook/docusaurus/pull/10011) docs: add stormkit as deployment platform ([@eldemcan](https://github.com/eldemcan))\\n\\n## :robot: Dependencies\\n\\n- [#10097](https://github.com/facebook/docusaurus/pull/10097) chore(deps): bump ejs from 3.1.9 to 3.1.10 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10089](https://github.com/facebook/docusaurus/pull/10089) chore(deps): bump actions/dependency-review-action from 4.2.5 to 4.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10088](https://github.com/facebook/docusaurus/pull/10088) chore(deps): bump preactjs/compressed-size-action from 2.5.0 to 2.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#10034](https://github.com/facebook/docusaurus/pull/10034) chore(deps): bump semver from 7.3.4 to 7.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## :wrench: Maintenance\\n\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-plugin-vercel-analytics`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#10065](https://github.com/facebook/docusaurus/pull/10065) refactor: extract base TS client config + upgrade TS + refactor TS setup ([@slorber](https://github.com/slorber))\\n- Other\\n - [#10063](https://github.com/facebook/docusaurus/pull/10063) test(e2e): TypeCheck website/starter in min/max range of TS versions ([@slorber](https://github.com/slorber))\\n - [#10049](https://github.com/facebook/docusaurus/pull/10049) fix(website): fix website manifest.json name \\"Docusaurus v2\\" to just \\"Docusaurus\\" ([@volcanofr](https://github.com/volcanofr))\\n\\n## Committers: 20\\n\\n- Abdullah Saud ([@Abdullah-03](https://github.com/Abdullah-03))\\n- Alexander Sandor ([@SandPod](https://github.com/SandPod))\\n- Alexey Ivanov ([@iAdramelk](https://github.com/iAdramelk))\\n- Andrea Mazzucchelli ([@andrmaz](https://github.com/andrmaz))\\n- Bairui Su ([@pearmini](https://github.com/pearmini))\\n- Balthasar Hofer ([@lebalz](https://github.com/lebalz))\\n- Can Eldem ([@eldemcan](https://github.com/eldemcan))\\n- Daniel Li ([@d4nyll](https://github.com/d4nyll))\\n- Guille ([@gagdiez](https://github.com/gagdiez))\\n- H3NR1KE ([@h3nr1ke](https://github.com/h3nr1ke))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Kai Hoffman ([@kaihoffman](https://github.com/kaihoffman))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommaso Sotte ([@tomsotte](https://github.com/tomsotte))\\n- Tomy Hsieh ([@tomy0000000](https://github.com/tomy0000000))\\n- Zwyx ([@Zwyx](https://github.com/Zwyx))\\n- [@Virgil993](https://github.com/Virgil993)\\n- [@volcanofr](https://github.com/volcanofr)\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.2.1","metadata":{"permalink":"/changelog/3.2.1","source":"@site/changelog/source/3.2.1.md","title":"3.2.1","description":"Bug Fix","date":"2024-04-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-04-04T20:00","authors":["OzakIOne","slorber"]},"unlisted":false,"prevItem":{"title":"3.3.0","permalink":"/changelog/3.3.0"},"nextItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#10012](https://github.com/facebook/docusaurus/pull/10012) fix(core): fix configurePostCss v3.2 regression ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#9980](https://github.com/facebook/docusaurus/pull/9980) docs: remove old github action description ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10014](https://github.com/facebook/docusaurus/pull/10014) docs(website): fix SEO docs headTags example ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10004](https://github.com/facebook/docusaurus/pull/10004) docs(website): Announce v3.2 on website/homepage ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- [#10006](https://github.com/facebook/docusaurus/pull/10006) chore(deps): bump actions/dependency-review-action from 4.2.4 to 4.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 2\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.2.0","metadata":{"permalink":"/changelog/3.2.0","source":"@site/changelog/source/3.2.0.md","title":"3.2.0","description":"New Feature","date":"2024-03-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Josue [4tro] A","alias":"4troDev","url":"https://github.com/4troDev","imageURL":"https://github.com/4troDev.png","key":"4troDev","page":null},{"name":"Anatoly Kopyl","alias":"anatolykopyl","url":"https://github.com/anatolykopyl","imageURL":"https://github.com/anatolykopyl.png","key":"anatolykopyl","page":null},{"name":"axel7083","alias":"axel7083","url":"https://github.com/axel7083","imageURL":"https://github.com/axel7083.png","key":"axel7083","page":null},{"name":"\u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432","alias":"baradusov","url":"https://github.com/baradusov","imageURL":"https://github.com/baradusov.png","key":"baradusov","page":null},{"name":"Chris Bateman","alias":"chris-bateman","url":"https://github.com/chris-bateman","imageURL":"https://github.com/chris-bateman.png","key":"chris-bateman","page":null},{"name":"Zed Spencer-Milnes","alias":"GingerGeek","url":"https://github.com/GingerGeek","imageURL":"https://github.com/GingerGeek.png","key":"GingerGeek","page":null},{"name":"Hallbj\xf6rn Magn\xfasson","alias":"Hallinn","url":"https://github.com/Hallinn","imageURL":"https://github.com/Hallinn.png","key":"Hallinn","page":null},{"name":"Liviu Ionescu","alias":"ilg-ul","url":"https://github.com/ilg-ul","imageURL":"https://github.com/ilg-ul.png","key":"ilg-ul","page":null},{"name":"n4n5","alias":"Its-Just-Nans","url":"https://github.com/Its-Just-Nans","imageURL":"https://github.com/Its-Just-Nans.png","key":"Its-Just-Nans","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"krinza.eth","alias":"kaymomin","url":"https://github.com/kaymomin","imageURL":"https://github.com/kaymomin.png","key":"kaymomin","page":null},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Rafael Martins","alias":"Rafael-Martins","url":"https://github.com/Rafael-Martins","imageURL":"https://github.com/Rafael-Martins.png","key":"Rafael-Martins","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"suenryu","alias":"Suenaga-Ryuya","url":"https://github.com/Suenaga-Ryuya","imageURL":"https://github.com/Suenaga-Ryuya.png","key":"Suenaga-Ryuya","page":null},{"name":"Fafowora Sunkanmi","alias":"sunkanmii","url":"https://github.com/sunkanmii","imageURL":"https://github.com/sunkanmii.png","key":"sunkanmii","page":null},{"name":"Vahid Naderi","alias":"VahidNaderi","url":"https://github.com/VahidNaderi","imageURL":"https://github.com/VahidNaderi.png","key":"VahidNaderi","page":null},{"name":"Vlad Nestorov","alias":"vlad-nestorov","url":"https://github.com/vlad-nestorov","imageURL":"https://github.com/vlad-nestorov.png","key":"vlad-nestorov","page":null},{"name":"\u7fca\u5c0f\u4e45","alias":"yixiaojiu","url":"https://github.com/yixiaojiu","imageURL":"https://github.com/yixiaojiu.png","key":"yixiaojiu","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-03-29T20:00","authors":["4troDev","anatolykopyl","axel7083","baradusov","chris-bateman","GingerGeek","Hallinn","ilg-ul","Its-Just-Nans","johnnyreilly","Josh-Cena","kaymomin","mxschmitt","Oreoxmt","OzakIOne","Rafael-Martins","slorber","Suenaga-Ryuya","sunkanmii","VahidNaderi","vlad-nestorov","yixiaojiu"]},"unlisted":false,"prevItem":{"title":"3.2.1","permalink":"/changelog/3.2.1"},"nextItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9954](https://github.com/facebook/docusaurus/pull/9954) feat(sitemap): add support for \\"lastmod\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#9912](https://github.com/facebook/docusaurus/pull/9912) feat(blog): add LastUpdateAuthor & LastUpdateTime ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#9931](https://github.com/facebook/docusaurus/pull/9931) feat(core): add new plugin allContentLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9928](https://github.com/facebook/docusaurus/pull/9928) feat(theme-translations) Icelandic (is) ([@Hallinn](https://github.com/Hallinn))\\n- `docusaurus-plugin-content-blog`\\n - [#9886](https://github.com/facebook/docusaurus/pull/9886) feat(blog): allow processing blog posts through a processBlogPosts function ([@OzakIOne](https://github.com/OzakIOne))\\n - [#9838](https://github.com/facebook/docusaurus/pull/9838) feat(blog): add blog pageBasePath plugin option ([@ilg-ul](https://github.com/ilg-ul))\\n- `docusaurus`\\n - [#9681](https://github.com/facebook/docusaurus/pull/9681) feat(swizzle): ask user preferred language if no language CLI option provided ([@yixiaojiu](https://github.com/yixiaojiu))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#9442](https://github.com/facebook/docusaurus/pull/9442) feat(create-docusaurus): ask user for preferred language when no language CLI option provided ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- `docusaurus-plugin-vercel-analytics`\\n - [#9687](https://github.com/facebook/docusaurus/pull/9687) feat(plugin-vercel-analytics): add new vercel analytics plugin ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`\\n - [#9684](https://github.com/facebook/docusaurus/pull/9684) feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials ([@anatolykopyl](https://github.com/anatolykopyl))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#9999](https://github.com/facebook/docusaurus/pull/9999) fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9945](https://github.com/facebook/docusaurus/pull/9945) fix(a11y): move focus algolia-search focus back to search input on Escape ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-plugin-content-blog`\\n - [#9920](https://github.com/facebook/docusaurus/pull/9920) fix(blog): apply trailing slash to blog feed ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`\\n - [#9944](https://github.com/facebook/docusaurus/pull/9944) fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-theme-translations`\\n - [#9915](https://github.com/facebook/docusaurus/pull/9915) fix(theme-translations): complete and modify Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9910](https://github.com/facebook/docusaurus/pull/9910) fix(theme-translations): add Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9872](https://github.com/facebook/docusaurus/pull/9872) fix(theme-translations): complete and improve Spanish theme translations ([@4troDev](https://github.com/4troDev))\\n - [#9812](https://github.com/facebook/docusaurus/pull/9812) fix(i18n): add missing theme translations for fa locale ([@VahidNaderi](https://github.com/VahidNaderi))\\n- `docusaurus-utils`\\n - [#9897](https://github.com/facebook/docusaurus/pull/9897) fix(mdx-loader): mdx-code-block should support CRLF ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9878](https://github.com/facebook/docusaurus/pull/9878) fix(core): fix default i18n calendar used, infer it from locale if possible ([@slorber](https://github.com/slorber))\\n - [#9852](https://github.com/facebook/docusaurus/pull/9852) fix(core): ensure core error boundary is able to render theme layout ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#9861](https://github.com/facebook/docusaurus/pull/9861) fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9851](https://github.com/facebook/docusaurus/pull/9851) fix(theme-classic): should use plurals for category items description ([@baradusov](https://github.com/baradusov))\\n\\n## :running: Performance\\n\\n- `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9975](https://github.com/facebook/docusaurus/pull/9975) refactor(core): improve dev perf, fine-grained site reloads - part 3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#9968](https://github.com/facebook/docusaurus/pull/9968) refactor(core): improve dev perf, fine-grained site reloads - part2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#9903](https://github.com/facebook/docusaurus/pull/9903) refactor(core): improve dev perf, fine-grained site reloads - part1 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#9890](https://github.com/facebook/docusaurus/pull/9890) perf: optimize getFileCommitDate, make it async ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9798](https://github.com/facebook/docusaurus/pull/9798) refactor(core): internalize, simplify and optimize the SSG logic ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9868](https://github.com/facebook/docusaurus/pull/9868) refactor(theme): dates should be formatted on the client-side instead of in nodejs code ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#9669](https://github.com/facebook/docusaurus/pull/9669) refactor(theme): use JSON-LD instead of microdata for blog structured data ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#9839](https://github.com/facebook/docusaurus/pull/9839) refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :memo: Documentation\\n\\n- [#9937](https://github.com/facebook/docusaurus/pull/9937) docs: use official GitHub Action to deploy to GitHub Pages ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- [#9971](https://github.com/facebook/docusaurus/pull/9971) docs: replace VuePress by VitePress on tool comparison section ([@sunkanmii](https://github.com/sunkanmii))\\n- [#9914](https://github.com/facebook/docusaurus/pull/9914) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9913](https://github.com/facebook/docusaurus/pull/9913) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9906](https://github.com/facebook/docusaurus/pull/9906) docs: emphasize \\"index slug\\" convention ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#9877](https://github.com/facebook/docusaurus/pull/9877) docs: fix typos in deployment.mdx ([@Oreoxmt](https://github.com/Oreoxmt))\\n- [#9845](https://github.com/facebook/docusaurus/pull/9845) docs: typo ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9816](https://github.com/facebook/docusaurus/pull/9816) docs: Add docs for Mermaid Component ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n\\n## :robot: Dependencies\\n\\n- [#9981](https://github.com/facebook/docusaurus/pull/9981) chore(deps): bump actions/dependency-review-action from 4.1.3 to 4.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9982](https://github.com/facebook/docusaurus/pull/9982) chore(deps): bump katex from 0.16.8 to 0.16.10 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9983](https://github.com/facebook/docusaurus/pull/9983) chore(deps): bump express from 4.18.2 to 4.19.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9977](https://github.com/facebook/docusaurus/pull/9977) chore(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9958](https://github.com/facebook/docusaurus/pull/9958) chore(deps): bump follow-redirects from 1.15.4 to 1.15.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9892](https://github.com/facebook/docusaurus/pull/9892) chore(deps): bump actions/dependency-review-action from 4.1.2 to 4.1.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9869](https://github.com/facebook/docusaurus/pull/9869) chore(deps): bump actions/dependency-review-action from 4.0.0 to 4.1.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9874](https://github.com/facebook/docusaurus/pull/9874) chore(deps): bump ip from 2.0.0 to 2.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9843](https://github.com/facebook/docusaurus/pull/9843) chore(deps): bump actions/setup-node from 4.0.1 to 4.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9824](https://github.com/facebook/docusaurus/pull/9824) chore(deps): bump treosh/lighthouse-ci-action from 10.1.0 to 11.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9823](https://github.com/facebook/docusaurus/pull/9823) chore(deps): bump marocchino/sticky-pull-request-comment from 2.8.0 to 2.9.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#9972](https://github.com/facebook/docusaurus/pull/9972) refactor(utils): remove duplicated function ([@OzakIOne](https://github.com/OzakIOne))\\n- Other\\n - [#9965](https://github.com/facebook/docusaurus/pull/9965) refactor(website): organise blog posts by year ([@GingerGeek](https://github.com/GingerGeek))\\n - [#9865](https://github.com/facebook/docusaurus/pull/9865) chore(website): update @crowdin/crowdin-api-client ([@chris-bateman](https://github.com/chris-bateman))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`\\n - [#9963](https://github.com/facebook/docusaurus/pull/9963) refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds ([@slorber](https://github.com/slorber))\\n\\n## Committers: 22\\n\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Anatoly Kopyl ([@anatolykopyl](https://github.com/anatolykopyl))\\n- Chris Bateman ([@chris-bateman](https://github.com/chris-bateman))\\n- Fafowora Sunkanmi ([@sunkanmii](https://github.com/sunkanmii))\\n- Hallbj\xf6rn Magn\xfasson ([@Hallinn](https://github.com/Hallinn))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Josue [4tro] A ([@4troDev](https://github.com/4troDev))\\n- Liviu Ionescu ([@ilg-ul](https://github.com/ilg-ul))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Rafael Martins ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vahid Naderi ([@VahidNaderi](https://github.com/VahidNaderi))\\n- Vlad Nestorov ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- Zed Spencer-Milnes ([@GingerGeek](https://github.com/GingerGeek))\\n- axel7083 ([@axel7083](https://github.com/axel7083))\\n- krinza.eth ([@kaymomin](https://github.com/kaymomin))\\n- n4n5 ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- suenryu ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n- \u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432 ([@baradusov](https://github.com/baradusov))\\n- \u7fca\u5c0f\u4e45 ([@yixiaojiu](https://github.com/yixiaojiu))"},{"id":"/3.1.1","metadata":{"permalink":"/changelog/3.1.1","source":"@site/changelog/source/3.1.1.md","title":"3.1.1","description":"Bug Fix","date":"2024-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},{"name":"eitsupi","alias":"eitsupi","url":"https://github.com/eitsupi","imageURL":"https://github.com/eitsupi.png","key":"eitsupi","page":null},{"name":"Jack Robson","alias":"jack-robson","url":"https://github.com/jack-robson","imageURL":"https://github.com/jack-robson.png","key":"jack-robson","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-26T20:00","authors":["dawei-wang","eitsupi","jack-robson","sanjaiyan-dev","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"nextItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#9791](https://github.com/facebook/docusaurus/pull/9791) fix(core): broken links optimization behaves differently than non-optimized logic ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9788](https://github.com/facebook/docusaurus/pull/9788) fix(core): links with target \\"\\\\_blank\\" should no be checked by the broken link checker ([@slorber](https://github.com/slorber))\\n - [#9407](https://github.com/facebook/docusaurus/pull/9407) fix(core): conditionally include `hostname` parameter when using\u2026 ([@jack-robson](https://github.com/jack-robson))\\n- `docusaurus-utils`\\n - [#9776](https://github.com/facebook/docusaurus/pull/9776) fix(mdx-loader): allow spaces before `mdx-code-block` info string ([@eitsupi](https://github.com/eitsupi))\\n- `create-docusaurus`\\n - [#9783](https://github.com/facebook/docusaurus/pull/9783) fix(create-docusaurus): fix typo in init template sample docs ([@dawei-wang](https://github.com/dawei-wang))\\n- `docusaurus-theme-common`\\n - [#9727](https://github.com/facebook/docusaurus/pull/9727) fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-mermaid`\\n - [#9733](https://github.com/facebook/docusaurus/pull/9733) fix: remove old useless mdx typedefs ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#9732](https://github.com/facebook/docusaurus/pull/9732) fix(core): various broken anchor link fixes ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9778](https://github.com/facebook/docusaurus/pull/9778) perf(core): optimize broken links checker ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9470](https://github.com/facebook/docusaurus/pull/9470) polish(theme): MDX images should use async decoding ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n\\n## Committers: 6\\n\\n- Jack Robson ([@jack-robson](https://github.com/jack-robson))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@eitsupi](https://github.com/eitsupi)"},{"id":"/3.1.0","metadata":{"permalink":"/changelog/3.1.0","source":"@site/changelog/source/3.1.0.md","title":"3.1.0","description":"New Feature","date":"2024-01-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"axmmisaka","alias":"axmmisaka","url":"https://github.com/axmmisaka","imageURL":"https://github.com/axmmisaka.png","key":"axmmisaka","page":null},{"name":"c0h1b4","alias":"c0h1b4","url":"https://github.com/c0h1b4","imageURL":"https://github.com/c0h1b4.png","key":"c0h1b4","page":null},{"name":"Janessa Garrow","alias":"jgarrow","url":"https://github.com/jgarrow","imageURL":"https://github.com/jgarrow.png","key":"jgarrow","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-05T20:00","authors":["axmmisaka","c0h1b4","jgarrow","Josh-Cena","OzakIOne","SimenB","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"nextItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9528](https://github.com/facebook/docusaurus/pull/9528) feat(core): make broken link checker detect broken anchors - add `onBrokenAnchors` config ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9674](https://github.com/facebook/docusaurus/pull/9674) feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9671](https://github.com/facebook/docusaurus/pull/9671) feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9624](https://github.com/facebook/docusaurus/pull/9624) feat: siteConfig.markdown.parseFrontMatter hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9610](https://github.com/facebook/docusaurus/pull/9610) feat(core): enable port configuration via environment variable ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#9704](https://github.com/facebook/docusaurus/pull/9704) fix(theme): allow empty code blocks and live playgrounds ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9696](https://github.com/facebook/docusaurus/pull/9696) fix(create-docusaurus): fix init template code blocks, and little improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#9668](https://github.com/facebook/docusaurus/pull/9668) fix(pwa-plugin): upgrade workbox ([@SimenB](https://github.com/SimenB))\\n- `docusaurus`\\n - [#9648](https://github.com/facebook/docusaurus/pull/9648) fix(cli): output help when no conventional config + no subcommand ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#9631](https://github.com/facebook/docusaurus/pull/9631) fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9617](https://github.com/facebook/docusaurus/pull/9617) fix(utils): Markdown link replacement with <> but no spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#9612](https://github.com/facebook/docusaurus/pull/9612) fix(type-aliases): add `title` prop for imported inline SVG React components ([@axmmisaka](https://github.com/axmmisaka))\\n- `docusaurus-plugin-content-blog`\\n - [#9581](https://github.com/facebook/docusaurus/pull/9581) fix(content-blog): add baseUrl for author.image_url ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-translations`\\n - [#9477](https://github.com/facebook/docusaurus/pull/9477) fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) ([@c0h1b4](https://github.com/c0h1b4))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#9335](https://github.com/facebook/docusaurus/pull/9335) refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize ([@jgarrow](https://github.com/jgarrow))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-search-algolia`\\n - [#9604](https://github.com/facebook/docusaurus/pull/9604) chore: add lint autofix CI job ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Janessa Garrow ([@jgarrow](https://github.com/jgarrow))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@c0h1b4](https://github.com/c0h1b4)\\n- axmmisaka ([@axmmisaka](https://github.com/axmmisaka))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.0.1","metadata":{"permalink":"/changelog/3.0.1","source":"@site/changelog/source/3.0.1.md","title":"3.0.1","description":"Bug Fix","date":"2023-11-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},{"name":"MCR Studio","alias":"mcrstudio","url":"https://github.com/mcrstudio","imageURL":"https://github.com/mcrstudio.png","key":"mcrstudio","page":null},{"name":"Nick Gerleman","alias":"NickGerleman","url":"https://github.com/NickGerleman","imageURL":"https://github.com/NickGerleman.png","key":"NickGerleman","page":null},{"name":"reece-white","alias":"reece-white","url":"https://github.com/reece-white","imageURL":"https://github.com/reece-white.png","key":"reece-white","page":null},{"name":"Shreesh Nautiyal","alias":"Shreesh09","url":"https://github.com/Shreesh09","imageURL":"https://github.com/Shreesh09.png","key":"Shreesh09","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-11-30T20:00","authors":["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},"unlisted":false,"prevItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"nextItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-utils`\\n - [#9570](https://github.com/facebook/docusaurus/pull/9570) fix: add v2 retrocompatible support for quoted admonitions ([@slorber](https://github.com/slorber))\\n - [#9535](https://github.com/facebook/docusaurus/pull/9535) fix: v3 admonitions should support v2 title syntax for nested admonitions ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9531](https://github.com/facebook/docusaurus/pull/9531) fix(theme): docs html sidebar items should always be visible ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9530](https://github.com/facebook/docusaurus/pull/9530) fix(theme): fix firefox CSS :has() support bug ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9487](https://github.com/facebook/docusaurus/pull/9487) fix(create-docusaurus): fix readme docusaurus 2 ref ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-debug`\\n - [#9566](https://github.com/facebook/docusaurus/pull/9566) chore(debug-plugin): migrate to a new maintained JSON Viewer ([@mcrstudio](https://github.com/mcrstudio))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9572](https://github.com/facebook/docusaurus/pull/9572) chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx ([@harryzcy](https://github.com/harryzcy))\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#9464](https://github.com/facebook/docusaurus/pull/9464) chore: Upgrade clsx to 2.0.0 ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus`\\n - [#9547](https://github.com/facebook/docusaurus/pull/9547) chore(core): replace `wait-on` dependency with custom lighter code ([@NickGerleman](https://github.com/NickGerleman))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#9529](https://github.com/facebook/docusaurus/pull/9529) chore: ugrade babel dependencies to v7.23.3 ([@reece-white](https://github.com/reece-white))\\n\\n## Committers: 6\\n\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- MCR Studio ([@mcrstudio](https://github.com/mcrstudio))\\n- Nick Gerleman ([@NickGerleman](https://github.com/NickGerleman))\\n- Shreesh Nautiyal ([@Shreesh09](https://github.com/Shreesh09))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@reece-white](https://github.com/reece-white)"},{"id":"/3.0.0","metadata":{"permalink":"/changelog/3.0.0","source":"@site/changelog/source/3.0.0.md","title":"3.0.0","description":"Breaking Change","date":"2023-10-31T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Wan Sim","alias":"0420syj","url":"https://github.com/0420syj","imageURL":"https://github.com/0420syj.png","key":"0420syj","page":null},{"name":"Abhinandan Wadhwa","alias":"abhinandanwadwa","url":"https://github.com/abhinandanwadwa","imageURL":"https://github.com/abhinandanwadwa.png","key":"abhinandanwadwa","page":null},{"name":"Abinash Satapathy","alias":"Abinashbunty","url":"https://github.com/Abinashbunty","imageURL":"https://github.com/Abinashbunty.png","key":"Abinashbunty","page":null},{"name":"Adam Patterson","alias":"adampatterson","url":"https://github.com/adampatterson","imageURL":"https://github.com/adampatterson.png","key":"adampatterson","page":null},{"name":"Adithya Krishna","alias":"adithyaakrishna","url":"https://github.com/adithyaakrishna","imageURL":"https://github.com/adithyaakrishna.png","key":"adithyaakrishna","page":null},{"name":"Hayden Hong","alias":"AFRUITPIE","url":"https://github.com/AFRUITPIE","imageURL":"https://github.com/AFRUITPIE.png","key":"AFRUITPIE","page":null},{"name":"Craigory Coppola","alias":"AgentEnder","url":"https://github.com/AgentEnder","imageURL":"https://github.com/AgentEnder.png","key":"AgentEnder","page":null},{"name":"Akshay Bhalotia","alias":"akshaybhalotia","url":"https://github.com/akshaybhalotia","imageURL":"https://github.com/akshaybhalotia.png","key":"akshaybhalotia","page":null},{"name":"allyw2002","alias":"allyw2002","url":"https://github.com/allyw2002","imageURL":"https://github.com/allyw2002.png","key":"allyw2002","page":null},{"name":"Ahmad Shrif","alias":"amdshrif","url":"https://github.com/amdshrif","imageURL":"https://github.com/amdshrif.png","key":"amdshrif","page":null},{"name":"Ahmed Mustafa Malik","alias":"amm98d","url":"https://github.com/amm98d","imageURL":"https://github.com/amm98d.png","key":"amm98d","page":null},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"Anton Kastritskii","alias":"antonk52","url":"https://github.com/antonk52","imageURL":"https://github.com/antonk52.png","key":"antonk52","page":null},{"name":"Antony Onipko","alias":"antonyoni","url":"https://github.com/antonyoni","imageURL":"https://github.com/antonyoni.png","key":"antonyoni","page":null},{"name":"Aqueeb","alias":"aqueeb","url":"https://github.com/aqueeb","imageURL":"https://github.com/aqueeb.png","key":"aqueeb","page":null},{"name":"Martin Adamko","alias":"attitude","url":"https://github.com/attitude","imageURL":"https://github.com/attitude.png","key":"attitude","page":null},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},{"name":"bitpredator","alias":"bitpredator","url":"https://github.com/bitpredator","imageURL":"https://github.com/bitpredator.png","key":"bitpredator","page":null},{"name":"Joe Williams","alias":"BubbaJoe","url":"https://github.com/BubbaJoe","imageURL":"https://github.com/BubbaJoe.png","key":"BubbaJoe","page":null},{"name":"Dinh Bao Dang","alias":"chillinPanda","url":"https://github.com/chillinPanda","imageURL":"https://github.com/chillinPanda.png","key":"chillinPanda","page":null},{"name":"Bei Chu","alias":"chubei","url":"https://github.com/chubei","imageURL":"https://github.com/chubei.png","key":"chubei","page":null},{"name":"\u521d\u51ac","alias":"chudongvip","url":"https://github.com/chudongvip","imageURL":"https://github.com/chudongvip.png","key":"chudongvip","page":null},{"name":"Ryosuke Igarashi","alias":"cm-igarashi-ryosuke","url":"https://github.com/cm-igarashi-ryosuke","imageURL":"https://github.com/cm-igarashi-ryosuke.png","key":"cm-igarashi-ryosuke","page":null},{"name":"Colin McDonnell","alias":"colinhacks","url":"https://github.com/colinhacks","imageURL":"https://github.com/colinhacks.png","key":"colinhacks","page":null},{"name":"conlacda","alias":"conlacda","url":"https://github.com/conlacda","imageURL":"https://github.com/conlacda.png","key":"conlacda","page":null},{"name":"Dan Dascalescu","alias":"dandv","url":"https://github.com/dandv","imageURL":"https://github.com/dandv.png","key":"dandv","page":null},{"name":"Danilo Woznica","alias":"danilowoz","url":"https://github.com/danilowoz","imageURL":"https://github.com/danilowoz.png","key":"danilowoz","page":null},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},{"name":"David J. Felix","alias":"DavidJFelix","url":"https://github.com/DavidJFelix","imageURL":"https://github.com/DavidJFelix.png","key":"DavidJFelix","page":null},{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},{"name":"Debbie O\'Brien","alias":"debs-obrien","url":"https://github.com/debs-obrien","imageURL":"https://github.com/debs-obrien.png","key":"debs-obrien","page":null},{"name":"Devansu Yadav","alias":"Devansu-Yadav","url":"https://github.com/Devansu-Yadav","imageURL":"https://github.com/Devansu-Yadav.png","key":"Devansu-Yadav","page":null},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Eduardo M\xednguez","alias":"e-minguez","url":"https://github.com/e-minguez","imageURL":"https://github.com/e-minguez.png","key":"e-minguez","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"FlorinaPacurar","alias":"FlorinaPacurar","url":"https://github.com/FlorinaPacurar","imageURL":"https://github.com/FlorinaPacurar.png","key":"FlorinaPacurar","page":null},{"name":"Charles Killer","alias":"Foosballfan","url":"https://github.com/Foosballfan","imageURL":"https://github.com/Foosballfan.png","key":"Foosballfan","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Francesco Ciulla","alias":"FrancescoXX","url":"https://github.com/FrancescoXX","imageURL":"https://github.com/FrancescoXX.png","key":"FrancescoXX","page":null},{"name":"Fredrik Stave","alias":"fredrikstave","url":"https://github.com/fredrikstave","imageURL":"https://github.com/fredrikstave.png","key":"fredrikstave","page":null},{"name":"Fxpby","alias":"fxpby","url":"https://github.com/fxpby","imageURL":"https://github.com/fxpby.png","key":"fxpby","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Alexander Nguyen","alias":"GalexyN","url":"https://github.com/GalexyN","imageURL":"https://github.com/GalexyN.png","key":"GalexyN","page":null},{"name":"Gustav Ton\xe9r","alias":"gazab","url":"https://github.com/gazab","imageURL":"https://github.com/gazab.png","key":"gazab","page":null},{"name":"Eunkwang Shin","alias":"gracefullight","url":"https://github.com/gracefullight","imageURL":"https://github.com/gracefullight.png","key":"gracefullight","page":null},{"name":"Greg Berg\xe9","alias":"gregberge","url":"https://github.com/gregberge","imageURL":"https://github.com/gregberge.png","key":"gregberge","page":null},{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},{"name":"Sujal Gupta","alias":"heysujal","url":"https://github.com/heysujal","imageURL":"https://github.com/heysujal.png","key":"heysujal","page":null},{"name":"Hidde de Vries","alias":"hidde","url":"https://github.com/hidde","imageURL":"https://github.com/hidde.png","key":"hidde","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Hyunseung","alias":"hslee2008","url":"https://github.com/hslee2008","imageURL":"https://github.com/hslee2008.png","key":"hslee2008","page":null},{"name":"Anna","alias":"HumbleDeer","url":"https://github.com/HumbleDeer","imageURL":"https://github.com/HumbleDeer.png","key":"HumbleDeer","page":null},{"name":"Coupy","alias":"HyeokjinKang","url":"https://github.com/HyeokjinKang","imageURL":"https://github.com/HyeokjinKang.png","key":"HyeokjinKang","page":null},{"name":"Jean Humann","alias":"jean-humann","url":"https://github.com/jean-humann","imageURL":"https://github.com/jean-humann.png","key":"jean-humann","page":null},{"name":"Jesper Engberg","alias":"jeengbe","url":"https://github.com/jeengbe","imageURL":"https://github.com/jeengbe.png","key":"jeengbe","page":null},{"name":"John Cao","alias":"jhcao23","url":"https://github.com/jhcao23","imageURL":"https://github.com/jhcao23.png","key":"jhcao23","page":null},{"name":"JJ Style","alias":"jj-style","url":"https://github.com/jj-style","imageURL":"https://github.com/jj-style.png","key":"jj-style","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Viktor Malmedal","alias":"JohnVicke","url":"https://github.com/JohnVicke","imageURL":"https://github.com/JohnVicke.png","key":"JohnVicke","page":null},{"name":"Jorens Merenjanu","alias":"JorensM","url":"https://github.com/JorensM","imageURL":"https://github.com/JorensM.png","key":"JorensM","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Juan Picado","alias":"juanpicado","url":"https://github.com/juanpicado","imageURL":"https://github.com/juanpicado.png","key":"juanpicado","page":null},{"name":"0x24Karthick","alias":"KarthickSakthi","url":"https://github.com/KarthickSakthi","imageURL":"https://github.com/KarthickSakthi.png","key":"KarthickSakthi","page":null},{"name":"Serenus","alias":"Kesyau","url":"https://github.com/Kesyau","imageURL":"https://github.com/Kesyau.png","key":"Kesyau","page":null},{"name":"Naffy Dharni","alias":"knownasnaffy","url":"https://github.com/knownasnaffy","imageURL":"https://github.com/knownasnaffy.png","key":"knownasnaffy","page":null},{"name":"la55u","alias":"la55u","url":"https://github.com/la55u","imageURL":"https://github.com/la55u.png","key":"la55u","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Oleksandr Fediashov","alias":"layershifter","url":"https://github.com/layershifter","imageURL":"https://github.com/layershifter.png","key":"layershifter","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lorenzo Lewis","alias":"lorenzolewis","url":"https://github.com/lorenzolewis","imageURL":"https://github.com/lorenzolewis.png","key":"lorenzolewis","page":null},{"name":"Silvestar Bistrovi\u0107","alias":"maliMirkec","url":"https://github.com/maliMirkec","imageURL":"https://github.com/maliMirkec.png","key":"maliMirkec","page":null},{"name":"Manuel","alias":"manuel-rw","url":"https://github.com/manuel-rw","imageURL":"https://github.com/manuel-rw.png","key":"manuel-rw","page":null},{"name":"Markshawn","alias":"MarkShawn2020","url":"https://github.com/MarkShawn2020","imageURL":"https://github.com/MarkShawn2020.png","key":"MarkShawn2020","page":null},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},{"name":"Michael Remediakis","alias":"mickremedi","url":"https://github.com/mickremedi","imageURL":"https://github.com/mickremedi.png","key":"mickremedi","page":null},{"name":"ModupeD","alias":"ModupeD","url":"https://github.com/ModupeD","imageURL":"https://github.com/ModupeD.png","key":"ModupeD","page":null},{"name":"Mogyuchi","alias":"Mogyuchi","url":"https://github.com/Mogyuchi","imageURL":"https://github.com/Mogyuchi.png","key":"Mogyuchi","page":null},{"name":"Mu-Jing-Tsai","alias":"moojing","url":"https://github.com/moojing","imageURL":"https://github.com/moojing.png","key":"moojing","page":null},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},{"name":"Marco Stroppel","alias":"mstroppel","url":"https://github.com/mstroppel","imageURL":"https://github.com/mstroppel.png","key":"mstroppel","page":null},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},{"name":"Naman Garg","alias":"NamanGarg2075","url":"https://github.com/NamanGarg2075","imageURL":"https://github.com/NamanGarg2075.png","key":"NamanGarg2075","page":null},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},{"name":"Maciek Palmowski","alias":"palmiak","url":"https://github.com/palmiak","imageURL":"https://github.com/palmiak.png","key":"palmiak","page":null},{"name":"Paul Razvan Berg","alias":"PaulRBerg","url":"https://github.com/PaulRBerg","imageURL":"https://github.com/PaulRBerg.png","key":"PaulRBerg","page":null},{"name":"Pinaki Bhattacharjee","alias":"pinakipb2","url":"https://github.com/pinakipb2","imageURL":"https://github.com/pinakipb2.png","key":"pinakipb2","page":null},{"name":"prateekbytes","alias":"prateekbytes","url":"https://github.com/prateekbytes","imageURL":"https://github.com/prateekbytes.png","key":"prateekbytes","page":null},{"name":"qwerzl","alias":"qwerzl","url":"https://github.com/qwerzl","imageURL":"https://github.com/qwerzl.png","key":"qwerzl","page":null},{"name":"Rashid","alias":"rashidmya","url":"https://github.com/rashidmya","imageURL":"https://github.com/rashidmya.png","key":"rashidmya","page":null},{"name":"Kolja","alias":"razzeee","url":"https://github.com/razzeee","imageURL":"https://github.com/razzeee.png","key":"razzeee","page":null},{"name":"Rapha\xebl Barbazza","alias":"rbarbazz","url":"https://github.com/rbarbazz","imageURL":"https://github.com/rbarbazz.png","key":"rbarbazz","page":null},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},{"name":"Chua Chee How","alias":"rojakcoder","url":"https://github.com/rojakcoder","imageURL":"https://github.com/rojakcoder.png","key":"rojakcoder","page":null},{"name":"rsteele6","alias":"rsteele6","url":"https://github.com/rsteele6","imageURL":"https://github.com/rsteele6.png","key":"rsteele6","page":null},{"name":"SADIK KUZU","alias":"sadikkuzu","url":"https://github.com/sadikkuzu","imageURL":"https://github.com/sadikkuzu.png","key":"sadikkuzu","page":null},{"name":"Sainan","alias":"Sainan","url":"https://github.com/Sainan","imageURL":"https://github.com/Sainan.png","key":"Sainan","page":null},{"name":"samatt14","alias":"samatt14","url":"https://github.com/samatt14","imageURL":"https://github.com/samatt14.png","key":"samatt14","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"Alex","alias":"sashashura","url":"https://github.com/sashashura","imageURL":"https://github.com/sashashura.png","key":"sashashura","page":null},{"name":"Marie","alias":"schneegansm","url":"https://github.com/schneegansm","imageURL":"https://github.com/schneegansm.png","key":"schneegansm","page":null},{"name":"Marco Kuper","alias":"scubamaggo","url":"https://github.com/scubamaggo","imageURL":"https://github.com/scubamaggo.png","key":"scubamaggo","page":null},{"name":"Shahriar","alias":"ShahriarKh","url":"https://github.com/ShahriarKh","imageURL":"https://github.com/ShahriarKh.png","key":"ShahriarKh","page":null},{"name":"Shashank Kumar","alias":"shawshankkumar","url":"https://github.com/shawshankkumar","imageURL":"https://github.com/shawshankkumar.png","key":"shawshankkumar","page":null},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},{"name":"Gareth Dwyer","alias":"sixhobbits","url":"https://github.com/sixhobbits","imageURL":"https://github.com/sixhobbits.png","key":"sixhobbits","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Surav Shrestha","alias":"suravshrestha","url":"https://github.com/suravshrestha","imageURL":"https://github.com/suravshrestha.png","key":"suravshrestha","page":null},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},{"name":"Tamal Anwar Chowdhury","alias":"tamalchowdhury","url":"https://github.com/tamalchowdhury","imageURL":"https://github.com/tamalchowdhury.png","key":"tamalchowdhury","page":null},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null},{"name":"James Kerrane","alias":"thatrobotdev","url":"https://github.com/thatrobotdev","imageURL":"https://github.com/thatrobotdev.png","key":"thatrobotdev","page":null},{"name":"thedevwonder","alias":"thedevwonder","url":"https://github.com/thedevwonder","imageURL":"https://github.com/thedevwonder.png","key":"thedevwonder","page":null},{"name":"Andr\xe9s Villanueva","alias":"Villanuevand","url":"https://github.com/Villanuevand","imageURL":"https://github.com/Villanuevand.png","key":"Villanuevand","page":null},{"name":"VinceCYLiao","alias":"VinceCYLiao","url":"https://github.com/VinceCYLiao","imageURL":"https://github.com/VinceCYLiao.png","key":"VinceCYLiao","page":null},{"name":"Waldir Pimenta","alias":"waldyrious","url":"https://github.com/waldyrious","imageURL":"https://github.com/waldyrious.png","key":"waldyrious","page":null},{"name":"Will Ceolin","alias":"wceolin","url":"https://github.com/wceolin","imageURL":"https://github.com/wceolin.png","key":"wceolin","page":null},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},{"name":"Jordan Manley","alias":"werner33","url":"https://github.com/werner33","imageURL":"https://github.com/werner33.png","key":"werner33","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"yosukekato165","alias":"yosukekato165","url":"https://github.com/yosukekato165","imageURL":"https://github.com/yosukekato165.png","key":"yosukekato165","page":null},{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-10-31T20:00","authors":["0420syj","abhinandanwadwa","Abinashbunty","adampatterson","adithyaakrishna","AFRUITPIE","AgentEnder","akshaybhalotia","allyw2002","amdshrif","amm98d","anaclumos","andrewnicols","antonk52","antonyoni","aqueeb","attitude","billy1624","biplavmz","bitpredator","BubbaJoe","chillinPanda","chubei","chudongvip","cm-igarashi-ryosuke","colinhacks","conlacda","dandv","danilowoz","DanRoscigno","DavidJFelix","dawei-wang","debs-obrien","Devansu-Yadav","Djunnni","Dr-Electron","e-minguez","edno","FlorinaPacurar","Foosballfan","forresst","FrancescoXX","fredrikstave","fxpby","gabrielcsapo","GalexyN","gazab","gracefullight","gregberge","harryzcy","heysujal","hidde","homotechsual","hslee2008","HumbleDeer","HyeokjinKang","jean-humann","jeengbe","jhcao23","jj-style","jodyheavener","johnnyreilly","JohnVicke","JorensM","Josh-Cena","juanpicado","KarthickSakthi","Kesyau","knownasnaffy","la55u","lanegoolsby","layershifter","lex111","lorenzolewis","maliMirkec","manuel-rw","MarkShawn2020","mcallisto","mickremedi","ModupeD","Mogyuchi","moojing","mrazauskas","mstroppel","mxschmitt","Mysterious-Dev","NamanGarg2075","ntucker","oluwatobiss","Oreoxmt","OzakIOne","palmiak","PaulRBerg","pinakipb2","prateekbytes","qwerzl","rashidmya","razzeee","rbarbazz","recallwei","rojakcoder","rsteele6","sadikkuzu","Sainan","samatt14","sanjaiyan-dev","sashashura","schneegansm","scubamaggo","ShahriarKh","shawshankkumar","shortcuts","shwaka","sixhobbits","slorber","suravshrestha","sykp241095","tamalchowdhury","tarunrajput","tats-u","thadguidry","thatrobotdev","thedevwonder","Villanuevand","VinceCYLiao","waldyrious","wceolin","webbertakken","werner33","yangshun","yosukekato165","Zwyx"]},"unlisted":false,"prevItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"nextItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#9316](https://github.com/facebook/docusaurus/pull/9316) chore: upgrade syntax highlighting dependencies, `prism-react-renderer` to v2, `react-live` to v4 ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#9348](https://github.com/facebook/docusaurus/pull/9348) chore: update node engine version 18 ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#9310](https://github.com/facebook/docusaurus/pull/9310) chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-tsconfig`, `docusaurus`\\n - [#9258](https://github.com/facebook/docusaurus/pull/9258) feat: Docusaurus v3 upgrades and require TypeScript 5 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9026](https://github.com/facebook/docusaurus/pull/9026) chore: remove facebook template ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9394](https://github.com/facebook/docusaurus/pull/9394) feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives ([@OzakIOne](https://github.com/OzakIOne))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9241](https://github.com/facebook/docusaurus/pull/9241) feat: support bun package manager in `create-docusaurus` ([@colinhacks](https://github.com/colinhacks))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`\\n - [#9152](https://github.com/facebook/docusaurus/pull/9152) feat(theme): add support for meta og locale and alternates ([@FlorinaPacurar](https://github.com/FlorinaPacurar))\\n - [#9028](https://github.com/facebook/docusaurus/pull/9028) feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page ([@slorber](https://github.com/slorber))\\n - [#8915](https://github.com/facebook/docusaurus/pull/8915) feat(theme): add queryString option to localeDropdown ([@wceolin](https://github.com/wceolin))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-validation`\\n - [#9171](https://github.com/facebook/docusaurus/pull/9171) feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9102](https://github.com/facebook/docusaurus/pull/9102) feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) ([@amdshrif](https://github.com/amdshrif))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9097](https://github.com/facebook/docusaurus/pull/9097) feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#9071](https://github.com/facebook/docusaurus/pull/9071) feat(pages): add support for missing SEO front matter + improve SEO docs ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8982](https://github.com/facebook/docusaurus/pull/8982) feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab ([@jj-style](https://github.com/jj-style))\\n - [#8870](https://github.com/facebook/docusaurus/pull/8870) feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8890](https://github.com/facebook/docusaurus/pull/8890) feat(theme): create more generic ThemedComponent util from ThemedImage ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `eslint-plugin`\\n - [#8384](https://github.com/facebook/docusaurus/pull/8384) feat(eslint-plugin): new prefer-docusaurus-heading rule ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`, `eslint-plugin`\\n - [#8156](https://github.com/facebook/docusaurus/pull/8156) feat: add eslint plugin no-html-links ([@JohnVicke](https://github.com/JohnVicke))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#8004](https://github.com/facebook/docusaurus/pull/8004) feat(docs,blog,pages): add support for \\"unlisted\\" front matter - hide md content in production ([@jodyheavener](https://github.com/jodyheavener))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#9446](https://github.com/facebook/docusaurus/pull/9446) fix(theme): fix useWindowSize React hydration issue ([@slorber](https://github.com/slorber))\\n - [#9276](https://github.com/facebook/docusaurus/pull/9276) fix(theme-common): remove useless useSyncExternalStore shim ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9437](https://github.com/facebook/docusaurus/pull/9437) fix(plugin-blog): blog archive should hide unlisted blog posts ([@slorber](https://github.com/slorber))\\n - [#9151](https://github.com/facebook/docusaurus/pull/9151) fix(content-blog): links in feed should be absolute ([@VinceCYLiao](https://github.com/VinceCYLiao))\\n- `docusaurus`\\n - [#9387](https://github.com/facebook/docusaurus/pull/9387) fix(core): log missing errorInfo in React 18 onRecoverableError callback ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#9309](https://github.com/facebook/docusaurus/pull/9309) fix(cli): disable vertical borders of the update notification ([@qwerzl](https://github.com/qwerzl))\\n - [#9112](https://github.com/facebook/docusaurus/pull/9112) fix(core): throw error if build folder already exists on initial clean ([@thedevwonder](https://github.com/thedevwonder))\\n - [#9006](https://github.com/facebook/docusaurus/pull/9006) fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades ([@0420syj](https://github.com/0420syj))\\n - [#7951](https://github.com/facebook/docusaurus/pull/7951) fix(core): make webpack HMR always listen to current location ([@jeengbe](https://github.com/jeengbe))\\n- `docusaurus-mdx-loader`\\n - [#9386](https://github.com/facebook/docusaurus/pull/9386) fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark ([@slorber](https://github.com/slorber))\\n - [#9262](https://github.com/facebook/docusaurus/pull/9262) fix(mdx-loader): improve mdxJsxTextElementToHtml ([@slorber](https://github.com/slorber))\\n - [#9202](https://github.com/facebook/docusaurus/pull/9202) fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior ([@yosukekato165](https://github.com/yosukekato165))\\n - [#9100](https://github.com/facebook/docusaurus/pull/9100) fix(mdx): fix for html multi-line comments ([@slorber](https://github.com/slorber))\\n - [#9091](https://github.com/facebook/docusaurus/pull/9091) fix(mdx-loader): loader error message should display stacktrace if no extra MDX details ([@slorber](https://github.com/slorber))\\n - [#8960](https://github.com/facebook/docusaurus/pull/8960) fix: allow html syntax in MDX v2 with format md ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9385](https://github.com/facebook/docusaurus/pull/9385) fix(theme): avoid rendering empty search container if site has no search plugin ([@slorber](https://github.com/slorber))\\n - [#9183](https://github.com/facebook/docusaurus/pull/9183) fix(theme): make Prism code block language / additionalLanguages case insensitive ([@heysujal](https://github.com/heysujal))\\n - [#9216](https://github.com/facebook/docusaurus/pull/9216) fix(theme): fix typo in swizzle component config ([@sixhobbits](https://github.com/sixhobbits))\\n - [#9093](https://github.com/facebook/docusaurus/pull/9093) fix(theme): support details/summary in CommonMark + add md dogfood test cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9369](https://github.com/facebook/docusaurus/pull/9369) fix(mdx-loader): prevent Open Graph images from being inserted as base64 ([@Zwyx](https://github.com/Zwyx))\\n- `docusaurus-theme-translations`\\n - [#9362](https://github.com/facebook/docusaurus/pull/9362) fix(theme-translations): add Japanese translation for \\"warning\\" ([@tats-u](https://github.com/tats-u))\\n - [#9321](https://github.com/facebook/docusaurus/pull/9321) fix(theme-translations): add missing zh-Hans messages ([@chudongvip](https://github.com/chudongvip))\\n - [#9338](https://github.com/facebook/docusaurus/pull/9338) fix(theme-translations): complete and fix hungarian translations ([@la55u](https://github.com/la55u))\\n - [#9292](https://github.com/facebook/docusaurus/pull/9292) fix(theme-translations): add missing Spanish theme translations ([@Villanuevand](https://github.com/Villanuevand))\\n - [#9021](https://github.com/facebook/docusaurus/pull/9021) fix(theme-transalations): fix Swedish translation of \\"last updated\\" ([@gazab](https://github.com/gazab))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n - [#9269](https://github.com/facebook/docusaurus/pull/9269) fix(theme): improve docs sidebar category caret aria-label accessibility ([@pinakipb2](https://github.com/pinakipb2))\\n- Other\\n - [#9260](https://github.com/facebook/docusaurus/pull/9260) fix(website): fix showcase search input ([@biplavmz](https://github.com/biplavmz))\\n - [#8193](https://github.com/facebook/docusaurus/pull/8193) fix(website): mobile scroll on homepage announcement ([@maliMirkec](https://github.com/maliMirkec))\\n - [#8042](https://github.com/facebook/docusaurus/pull/8042) fix(website): fix blog post social card ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9217](https://github.com/facebook/docusaurus/pull/9217) fix(create-docusaurus): increase Browserslist support query in dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`, `docusaurus`\\n - [#9160](https://github.com/facebook/docusaurus/pull/9160) fix(core): handle single quotes inside file paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`\\n - [#9116](https://github.com/facebook/docusaurus/pull/9116) fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9046](https://github.com/facebook/docusaurus/pull/9046) fix(utils): better handling of code blocks in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8927](https://github.com/facebook/docusaurus/pull/8927) fix(utils): make Markdown link replacement much more rigorous ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7864](https://github.com/facebook/docusaurus/pull/7864) fix(utils): always match exclusion root dirs as complete folder paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7801](https://github.com/facebook/docusaurus/pull/7801) fix(utils): recognize ~~~ as code fences in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#8872](https://github.com/facebook/docusaurus/pull/8872) fix(core): better error logging on SSR/dev failures + log stacktraces and error causes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#8258](https://github.com/facebook/docusaurus/pull/8258) fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as \\"/\\" ([@Djunnni](https://github.com/Djunnni))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8319](https://github.com/facebook/docusaurus/pull/8319) fix(docs,theme): auto-generated category index should not display unlisted content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#8015](https://github.com/facebook/docusaurus/pull/8015) fix(live-codeblock): add error boundary to live code preview ([@rashidmya](https://github.com/rashidmya))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9051](https://github.com/facebook/docusaurus/pull/9051) perf(core): use React 18 startTransition for hydration ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n - [#8081](https://github.com/facebook/docusaurus/pull/8081) perf(core): move scripts to document head + defer ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#8972](https://github.com/facebook/docusaurus/pull/8972) fix: remove useless js-loader in front of mdx-loader ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9438](https://github.com/facebook/docusaurus/pull/9438) refactor(blog-plugin): blog archive reverse ordering of posts ([@slorber](https://github.com/slorber))\\n - [#9184](https://github.com/facebook/docusaurus/pull/9184) fix(theme): change schema.org itemType prop urls from http to https ([@thedevwonder](https://github.com/thedevwonder))\\n- `docusaurus`\\n - [#9381](https://github.com/facebook/docusaurus/pull/9381) feat(core): throw error when official docusaurus dependencies use different versions ([@JorensM](https://github.com/JorensM))\\n- `docusaurus-theme-translations`\\n - [#9302](https://github.com/facebook/docusaurus/pull/9302) chore(theme-translations): complete zh-Hant translations ([@qwerzl](https://github.com/qwerzl))\\n - [#9025](https://github.com/facebook/docusaurus/pull/9025) chore(theme-translations): complete it translations ([@bitpredator](https://github.com/bitpredator))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#9133](https://github.com/facebook/docusaurus/pull/9133) fix(init): change initial site URL to one that is safe for the future ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8150](https://github.com/facebook/docusaurus/pull/8150) fix(theme-classic): polish admonition details, render title-only admonitions ([@attitude](https://github.com/attitude))\\n- `docusaurus-plugin-google-gtag`\\n - [#8143](https://github.com/facebook/docusaurus/pull/8143) refactor(plugin-gtag): update gtag plugin to modern SPA recommendations ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#9452](https://github.com/facebook/docusaurus/pull/9452) docs: v3 upgrade guide should mention MDX v1 compat options ([@slorber](https://github.com/slorber))\\n - [#9430](https://github.com/facebook/docusaurus/pull/9430) docs: update Kinsta deployment documentation ([@palmiak](https://github.com/palmiak))\\n - [#9417](https://github.com/facebook/docusaurus/pull/9417) docs: add Docusaurus v3.0 upgrade guide ([@slorber](https://github.com/slorber))\\n - [#9396](https://github.com/facebook/docusaurus/pull/9396) docs: fix typos in website/docs/i18n/i18n-git.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9397](https://github.com/facebook/docusaurus/pull/9397) docs: fix typos in website/docs/migration/migration-manual.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9388](https://github.com/facebook/docusaurus/pull/9388) docs: fix algolia crowler config template link for v3 ([@slorber](https://github.com/slorber))\\n - [#9377](https://github.com/facebook/docusaurus/pull/9377) docs(deployment): add permissions config to github action file in v2.4.3 ([@chillinPanda](https://github.com/chillinPanda))\\n - [#9333](https://github.com/facebook/docusaurus/pull/9333) docs: \\"Preparing your site for Docusaurus v3\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9330](https://github.com/facebook/docusaurus/pull/9330) docs: \\"Upgrading frontend dependencies with confidence\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9288](https://github.com/facebook/docusaurus/pull/9288) docs: fix bad link for create doc ([@forresst](https://github.com/forresst))\\n - [#9267](https://github.com/facebook/docusaurus/pull/9267) docs: fix typo in docs-introduction ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n - [#9247](https://github.com/facebook/docusaurus/pull/9247) docs: Reword comparison between React authoring and CSS authoring ([@hidde](https://github.com/hidde))\\n - [#9223](https://github.com/facebook/docusaurus/pull/9223) docs: fix grammatical error, rewrite sentence to make clearer ([@thatrobotdev](https://github.com/thatrobotdev))\\n - [#9233](https://github.com/facebook/docusaurus/pull/9233) docs(website): Add a \\"clearAll\\" Feature to site showcase ([@biplavmz](https://github.com/biplavmz))\\n - [#9180](https://github.com/facebook/docusaurus/pull/9180) docs: remove \'import type\' declaration in javascript snippet ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9177](https://github.com/facebook/docusaurus/pull/9177) docs: improve the opening sentence\'s clarity ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9149](https://github.com/facebook/docusaurus/pull/9149) docs: improve yarn deps upgrade command ([@webbertakken](https://github.com/webbertakken))\\n - [#9139](https://github.com/facebook/docusaurus/pull/9139) docs: add Flightcontrol as a deployment option ([@ModupeD](https://github.com/ModupeD))\\n - [#9082](https://github.com/facebook/docusaurus/pull/9082) docs: fix themeConfig.prism.defaultLanguage table api ref docs ([@razzeee](https://github.com/razzeee))\\n - [#9074](https://github.com/facebook/docusaurus/pull/9074) docs: fix filenames in docs/swizzling.mdx ([@shwaka](https://github.com/shwaka))\\n - [#9065](https://github.com/facebook/docusaurus/pull/9065) docs: update link for commonly used languages ([@heysujal](https://github.com/heysujal))\\n - [#9055](https://github.com/facebook/docusaurus/pull/9055) docs: update outdated links in showcase ([@manuel-rw](https://github.com/manuel-rw))\\n - [#9063](https://github.com/facebook/docusaurus/pull/9063) docs: add @markprompt/docusaurus-theme-search ([@schneegansm](https://github.com/schneegansm))\\n - [#9033](https://github.com/facebook/docusaurus/pull/9033) docs: update info for community plugin docusaurus2-graphql-doc-generator ([@edno](https://github.com/edno))\\n - [#9044](https://github.com/facebook/docusaurus/pull/9044) docs: fix prism theme broken link in code blocks docs ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n - [#9043](https://github.com/facebook/docusaurus/pull/9043) docs: fix grammar typo in swizzling.mdx ([@adampatterson](https://github.com/adampatterson))\\n - [#9018](https://github.com/facebook/docusaurus/pull/9018) docs: fix link to rehype ([@Mogyuchi](https://github.com/Mogyuchi))\\n - [#8993](https://github.com/facebook/docusaurus/pull/8993) docs: fix broken link in code blocks docs ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n - [#8975](https://github.com/facebook/docusaurus/pull/8975) docs: update link in md code blocks section ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8976](https://github.com/facebook/docusaurus/pull/8976) docs: update broken links theme configuration page ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8904](https://github.com/facebook/docusaurus/pull/8904) docs: fix broken link to Prism includeLangs.js default list of languages ([@conlacda](https://github.com/conlacda))\\n - [#8951](https://github.com/facebook/docusaurus/pull/8951) docs: mention equivalent config syntaxes ([@thadguidry](https://github.com/thadguidry))\\n - [#8950](https://github.com/facebook/docusaurus/pull/8950) docs: bidirectional link between api config and guide config ([@thadguidry](https://github.com/thadguidry))\\n - [#8953](https://github.com/facebook/docusaurus/pull/8953) docs: mention blog truncating marker edge case ([@allyw2002](https://github.com/allyw2002))\\n - [#8941](https://github.com/facebook/docusaurus/pull/8941) docs: rewrite some docs for mdx v2 ([@slorber](https://github.com/slorber))\\n - [#8943](https://github.com/facebook/docusaurus/pull/8943) docs: mention docusaurus.community site in resources ([@thadguidry](https://github.com/thadguidry))\\n - [#8920](https://github.com/facebook/docusaurus/pull/8920) docs: mdx-js is using v2 for next edition ([@jhcao23](https://github.com/jhcao23))\\n - [#8888](https://github.com/facebook/docusaurus/pull/8888) docs: improve sidebar items custom props docs ([@slorber](https://github.com/slorber))\\n - [#8877](https://github.com/facebook/docusaurus/pull/8877) docs: add \\"permissions.content: write\\" to GH workflow examples ([@e-minguez](https://github.com/e-minguez))\\n - [#8845](https://github.com/facebook/docusaurus/pull/8845) docs: add description on blog post file/folder naming conventions and date extraction patterns ([@rojakcoder](https://github.com/rojakcoder))\\n - [#8865](https://github.com/facebook/docusaurus/pull/8865) docs: correct small grammar error ([@werner33](https://github.com/werner33))\\n - [#8830](https://github.com/facebook/docusaurus/pull/8830) docs: link to mermaid config types ([@PaulRBerg](https://github.com/PaulRBerg))\\n - [#8804](https://github.com/facebook/docusaurus/pull/8804) docs: update suggestion for OSS meta projects ([@antonk52](https://github.com/antonk52))\\n - [#8788](https://github.com/facebook/docusaurus/pull/8788) docs: remove problematic mdx2 anchor id docs for MDX 2 migration ([@slorber](https://github.com/slorber))\\n - [#8780](https://github.com/facebook/docusaurus/pull/8780) docs: fix localhost url without link ([@slorber](https://github.com/slorber))\\n - [#8779](https://github.com/facebook/docusaurus/pull/8779) docs: v2 docs should discourage the usage of a lower-case MDX component (will not work in v3) ([@slorber](https://github.com/slorber))\\n - [#8761](https://github.com/facebook/docusaurus/pull/8761) docs: add mention that themeConfig.footer.copyright supports html strings ([@fxpby](https://github.com/fxpby))\\n - [#8723](https://github.com/facebook/docusaurus/pull/8723) docs: add TypeScript playgrounds to docusaurus.new + Playground page ([@slorber](https://github.com/slorber))\\n - [#8709](https://github.com/facebook/docusaurus/pull/8709) docs: add dark mode version of BrowserStack logo ([@fredrikstave](https://github.com/fredrikstave))\\n - [#8642](https://github.com/facebook/docusaurus/pull/8642) docs: clarify query string behavior ([@homotechsual](https://github.com/homotechsual))\\n - [#8576](https://github.com/facebook/docusaurus/pull/8576) docs(playground): use CodeSandbox cloud sandboxes ([@danilowoz](https://github.com/danilowoz))\\n - [#8543](https://github.com/facebook/docusaurus/pull/8543) docs: add link to pluralization docs ([@homotechsual](https://github.com/homotechsual))\\n - [#8556](https://github.com/facebook/docusaurus/pull/8556) docs: document plugin-content-pages wrapperClassName frontmatter. ([@homotechsual](https://github.com/homotechsual))\\n - [#8548](https://github.com/facebook/docusaurus/pull/8548) docs: fix typo \'validationOptions\' ([@gracefullight](https://github.com/gracefullight))\\n - [#8509](https://github.com/facebook/docusaurus/pull/8509) docs(website): fix broken external links wrongly modified to use the .mdx extension (ex: github README.mdx) ([@Kesyau](https://github.com/Kesyau))\\n - [#8507](https://github.com/facebook/docusaurus/pull/8507) docs: blog + community + dogfood docs should use .mdx extension ([@slorber](https://github.com/slorber))\\n - [#8490](https://github.com/facebook/docusaurus/pull/8490) docs(website): use .mdx extension for every docs ([@slorber](https://github.com/slorber))\\n - [#8484](https://github.com/facebook/docusaurus/pull/8484) docs: `plugin-content-sitemap` -> `plugin-sitemap` ([@chubei](https://github.com/chubei))\\n - [#8454](https://github.com/facebook/docusaurus/pull/8454) fix(docs): Update link for tooljet website(broken) ([@shawshankkumar](https://github.com/shawshankkumar))\\n - [#8443](https://github.com/facebook/docusaurus/pull/8443) docs: fix website home testimonials broken image URLs ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n - [#8438](https://github.com/facebook/docusaurus/pull/8438) docs: add hyperlink to swizzling in Search page ([@dandv](https://github.com/dandv))\\n - [#8431](https://github.com/facebook/docusaurus/pull/8431) docs: add diagrams page to 2.2.0 sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8307](https://github.com/facebook/docusaurus/pull/8307) docs: clarify additionalLanguages with custom language definitions. ([@homotechsual](https://github.com/homotechsual))\\n - [#8390](https://github.com/facebook/docusaurus/pull/8390) docs: changed actions/checkout version from 2 to 3 ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n - [#8262](https://github.com/facebook/docusaurus/pull/8262) docs: fix links to external plugin description ([@scubamaggo](https://github.com/scubamaggo))\\n - [#8375](https://github.com/facebook/docusaurus/pull/8375) docs: add Kinsta to deployment page ([@palmiak](https://github.com/palmiak))\\n - [#8417](https://github.com/facebook/docusaurus/pull/8417) docs: document theme-mermaid in API sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8392](https://github.com/facebook/docusaurus/pull/8392) docs: add i18n guide doc should link to i18n core config doc ([@mcallisto](https://github.com/mcallisto))\\n - [#8388](https://github.com/facebook/docusaurus/pull/8388) docs: point to where commit types are listed ([@dandv](https://github.com/dandv))\\n - [#8352](https://github.com/facebook/docusaurus/pull/8352) docs: actually demo the zero-width space workaround in MDX ([@waldyrious](https://github.com/waldyrious))\\n - [#8363](https://github.com/facebook/docusaurus/pull/8363) docs: fix unclosed admonition code block ([@Zwyx](https://github.com/Zwyx))\\n - [#8364](https://github.com/facebook/docusaurus/pull/8364) docs: autogenerated page comment does not matching dirName in examples ([@HumbleDeer](https://github.com/HumbleDeer))\\n - [#8359](https://github.com/facebook/docusaurus/pull/8359) docs: fix anchor link `#customFields` ([@Zwyx](https://github.com/Zwyx))\\n - [#8320](https://github.com/facebook/docusaurus/pull/8320) docs: remove blog.johnnyreilly.com Google Analytics tag from docs part 2 ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8335](https://github.com/facebook/docusaurus/pull/8335) docs: use Mermaid diagram for routing page ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n - [#8313](https://github.com/facebook/docusaurus/pull/8313) docs: link to migration guide from Blogger to Docusaurus / remove blog.johnnyreilly.com Google Analytics tag from docs ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8292](https://github.com/facebook/docusaurus/pull/8292) docs: document tag types for insertHtmlContent ([@homotechsual](https://github.com/homotechsual))\\n - [#8272](https://github.com/facebook/docusaurus/pull/8272) docs: fix mermaid theme options typo ([@ntucker](https://github.com/ntucker))\\n - [#8209](https://github.com/facebook/docusaurus/pull/8209) docs: removing community resource docusaurus-plugin-relative-paths ([@ShahriarKh](https://github.com/ShahriarKh))\\n - [#8146](https://github.com/facebook/docusaurus/pull/8146) docs(content-docs): add api doc for displayed_sidebar front matter ([@slorber](https://github.com/slorber))\\n - [#8115](https://github.com/facebook/docusaurus/pull/8115) docs: add caveat about using Translate in string contexts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8053](https://github.com/facebook/docusaurus/pull/8053) docs: document usage of docs `frontMatter.custom_edit_url: null` ([@homotechsual](https://github.com/homotechsual))\\n - [#8010](https://github.com/facebook/docusaurus/pull/8010) docs(showcase): add 74 new showcase sites ([@slorber](https://github.com/slorber))\\n - [#7955](https://github.com/facebook/docusaurus/pull/7955) docs: add docusaurus-post-generator to community resource list ([@moojing](https://github.com/moojing))\\n - [#7906](https://github.com/facebook/docusaurus/pull/7906) docs: add TOC heading level options to guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7884](https://github.com/facebook/docusaurus/pull/7884) docs: add baseUrl to example tsconfig ([@Foosballfan](https://github.com/Foosballfan))\\n - [#7835](https://github.com/facebook/docusaurus/pull/7835) docs: update workbox doc link ([@hslee2008](https://github.com/hslee2008))\\n - [#7799](https://github.com/facebook/docusaurus/pull/7799) docs: formally document how admonitions can be customized ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7796](https://github.com/facebook/docusaurus/pull/7796) docs: modify the description of deploying to Netlify ([@Oreoxmt](https://github.com/Oreoxmt))\\n- `docusaurus-logger`\\n - [#9210](https://github.com/facebook/docusaurus/pull/9210) docs: add the missing import logger statement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8047](https://github.com/facebook/docusaurus/pull/8047) docs: improve alt messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8944](https://github.com/facebook/docusaurus/pull/8944) polish(create-docusaurus): add comment in config to mention different ways to declare config + doc link ([@thadguidry](https://github.com/thadguidry))\\n - [#8323](https://github.com/facebook/docusaurus/pull/8323) docs: fix typo \'internalization\' ([@dandv](https://github.com/dandv))\\n- `docusaurus-plugin-ideal-image`\\n - [#8630](https://github.com/facebook/docusaurus/pull/8630) docs: normalize README for ideal-image plugin ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-mdx-loader`\\n - [#8419](https://github.com/facebook/docusaurus/pull/8419) docs: document siteConfig.markdown + better mdx-loader retrocompat ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- Other\\n - [#9440](https://github.com/facebook/docusaurus/pull/9440) chore(deps): bump actions/setup-node from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9441](https://github.com/facebook/docusaurus/pull/9441) chore(deps): bump actions/checkout from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9367](https://github.com/facebook/docusaurus/pull/9367) chore(deps): bump postcss from 8.4.26 to 8.4.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9344](https://github.com/facebook/docusaurus/pull/9344) chore(deps): bump actions/checkout from 4.0.0 to 4.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9298](https://github.com/facebook/docusaurus/pull/9298) chore(deps): bump actions/dependency-review-action from 3.0.8 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9277](https://github.com/facebook/docusaurus/pull/9277) chore(deps): bump actions/checkout from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9251](https://github.com/facebook/docusaurus/pull/9251) chore(deps): bump actions/dependency-review-action from 3.0.7 to 3.0.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9250](https://github.com/facebook/docusaurus/pull/9250) chore(deps): bump marocchino/sticky-pull-request-comment from 2.7.0 to 2.8.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9227](https://github.com/facebook/docusaurus/pull/9227) chore(deps): bump actions/dependency-review-action from 3.0.6 to 3.0.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9174](https://github.com/facebook/docusaurus/pull/9174) chore(deps): bump marocchino/sticky-pull-request-comment from 2.6.2 to 2.7.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9096](https://github.com/facebook/docusaurus/pull/9096) chore(deps): bump semver from 7.3.8 to 7.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9061](https://github.com/facebook/docusaurus/pull/9061) chore(deps): bump github/codeql-action from 2.3.6 to 2.13.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9038](https://github.com/facebook/docusaurus/pull/9038) chore(deps): bump github/codeql-action from 2.3.5 to 2.3.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9039](https://github.com/facebook/docusaurus/pull/9039) chore(deps): bump actions/dependency-review-action from 3.0.4 to 3.0.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9019](https://github.com/facebook/docusaurus/pull/9019) chore(deps): bump github/codeql-action from 2.3.3 to 2.3.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8964](https://github.com/facebook/docusaurus/pull/8964) chore(deps): bump github/codeql-action from 2.3.2 to 2.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8955](https://github.com/facebook/docusaurus/pull/8955) chore(deps): bump github/codeql-action from 2.3.0 to 2.3.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8922](https://github.com/facebook/docusaurus/pull/8922) chore(deps): bump marocchino/sticky-pull-request-comment from 2.5.0 to 2.6.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8923](https://github.com/facebook/docusaurus/pull/8923) chore(deps): bump treosh/lighthouse-ci-action from 9.6.8 to 10.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8924](https://github.com/facebook/docusaurus/pull/8924) chore(deps): bump github/codeql-action from 2.2.12 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8899](https://github.com/facebook/docusaurus/pull/8899) chore(deps): bump github/codeql-action from 2.2.11 to 2.2.12 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8900](https://github.com/facebook/docusaurus/pull/8900) chore(deps): bump actions/checkout from 3.5.0 to 3.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8879](https://github.com/facebook/docusaurus/pull/8879) chore(deps): bump actions/github-script from 6.4.0 to 6.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8878](https://github.com/facebook/docusaurus/pull/8878) chore(deps): bump github/codeql-action from 2.2.9 to 2.2.11 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8836](https://github.com/facebook/docusaurus/pull/8836) chore(deps): bump github/codeql-action from 2.2.7 to 2.2.9 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8837](https://github.com/facebook/docusaurus/pull/8837) chore(deps): bump actions/checkout from 3.4.0 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8797](https://github.com/facebook/docusaurus/pull/8797) chore(deps): bump actions/checkout from 3.3.0 to 3.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8796](https://github.com/facebook/docusaurus/pull/8796) chore(deps): bump actions/dependency-review-action from 3.0.3 to 3.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8795](https://github.com/facebook/docusaurus/pull/8795) chore(deps): bump github/codeql-action from 2.2.6 to 2.2.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8766](https://github.com/facebook/docusaurus/pull/8766) chore(deps): bump treosh/lighthouse-ci-action from 9.3.1 to 9.6.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8767](https://github.com/facebook/docusaurus/pull/8767) chore(deps): bump github/codeql-action from 2.2.5 to 2.2.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8739](https://github.com/facebook/docusaurus/pull/8739) chore(deps): bump github/codeql-action from 2.2.4 to 2.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8663](https://github.com/facebook/docusaurus/pull/8663) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.1 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8662](https://github.com/facebook/docusaurus/pull/8662) chore(deps): bump github/codeql-action from 2.2.2 to 2.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8638](https://github.com/facebook/docusaurus/pull/8638) chore(deps): bump github/codeql-action from 2.2.1 to 2.2.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8624](https://github.com/facebook/docusaurus/pull/8624) chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8604](https://github.com/facebook/docusaurus/pull/8604) chore(deps): bump actions/github-script from 6.3.3 to 6.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8605](https://github.com/facebook/docusaurus/pull/8605) chore(deps): bump github/codeql-action from 2.1.39 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8572](https://github.com/facebook/docusaurus/pull/8572) chore(deps): bump github/codeql-action from 2.1.38 to 2.1.39 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8553](https://github.com/facebook/docusaurus/pull/8553) chore(deps): bump github/codeql-action from 2.1.37 to 2.1.38 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8531](https://github.com/facebook/docusaurus/pull/8531) chore(deps): bump actions/checkout from 3.2.0 to 3.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8532](https://github.com/facebook/docusaurus/pull/8532) chore(deps): bump actions/dependency-review-action from 3.0.2 to 3.0.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8533](https://github.com/facebook/docusaurus/pull/8533) chore(deps): bump actions/setup-node from 3.5.1 to 3.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8496](https://github.com/facebook/docusaurus/pull/8496) chore(deps): bump jakepartusch/wait-for-netlify-action from 1.3 to 1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8464](https://github.com/facebook/docusaurus/pull/8464) chore(deps): bump actions/dependency-review-action from 3.0.1 to 3.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8440](https://github.com/facebook/docusaurus/pull/8440) chore(deps): bump github/codeql-action from 2.1.36 to 2.1.37 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8435](https://github.com/facebook/docusaurus/pull/8435) chore(deps): bump github/codeql-action from 2.1.35 to 2.1.36 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8434](https://github.com/facebook/docusaurus/pull/8434) chore(deps): bump actions/checkout from 3.1.0 to 3.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8412](https://github.com/facebook/docusaurus/pull/8412) chore(deps): bump github/codeql-action from 2.1.32 to 2.1.35 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8385](https://github.com/facebook/docusaurus/pull/8385) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.0 to 2.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8360](https://github.com/facebook/docusaurus/pull/8360) chore(deps): bump actions/dependency-review-action from 3.0.0 to 3.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8341](https://github.com/facebook/docusaurus/pull/8341) chore(deps): bump github/codeql-action from 2.1.31 to 2.1.32 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8340](https://github.com/facebook/docusaurus/pull/8340) chore(deps): bump actions/dependency-review-action from 2.5.1 to 3.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8339](https://github.com/facebook/docusaurus/pull/8339) chore(deps): bump treosh/lighthouse-ci-action from 9.3.0 to 9.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8295](https://github.com/facebook/docusaurus/pull/8295) chore(deps): bump github/codeql-action from 2.1.29 to 2.1.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8271](https://github.com/facebook/docusaurus/pull/8271) chore(deps): bump github/codeql-action from 2.1.28 to 2.1.29 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8270](https://github.com/facebook/docusaurus/pull/8270) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.1 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8240](https://github.com/facebook/docusaurus/pull/8240) chore(deps): bump actions/dependency-review-action from 2.5.0 to 2.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8241](https://github.com/facebook/docusaurus/pull/8241) chore(deps): bump github/codeql-action from 2.1.27 to 2.1.28 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8221](https://github.com/facebook/docusaurus/pull/8221) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.0 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8220](https://github.com/facebook/docusaurus/pull/8220) chore(deps): bump actions/dependency-review-action from 2.4.0 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8219](https://github.com/facebook/docusaurus/pull/8219) chore(deps): bump actions/github-script from 6.3.1 to 6.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8222](https://github.com/facebook/docusaurus/pull/8222) chore(deps): bump actions/setup-node from 3.5.0 to 3.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8200](https://github.com/facebook/docusaurus/pull/8200) chore(deps): bump github/codeql-action from 2.1.26 to 2.1.27 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8199](https://github.com/facebook/docusaurus/pull/8199) chore(deps): bump actions/checkout from 3.0.2 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8169](https://github.com/facebook/docusaurus/pull/8169) chore(deps): bump github/codeql-action from 2.1.22 to 2.1.26 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8170](https://github.com/facebook/docusaurus/pull/8170) chore(deps): bump actions/setup-node from 3.4.1 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8167](https://github.com/facebook/docusaurus/pull/8167) chore(deps): bump actions/github-script from 6.2.0 to 6.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8168](https://github.com/facebook/docusaurus/pull/8168) chore(deps): bump actions/dependency-review-action from 2.1.0 to 2.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8064](https://github.com/facebook/docusaurus/pull/8064) chore: bump react-medium-image-zoom ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8051](https://github.com/facebook/docusaurus/pull/8051) chore(deps): bump github/codeql-action from 2.1.21 to 2.1.22 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8019](https://github.com/facebook/docusaurus/pull/8019) chore(deps): bump actions/github-script from 6.1.1 to 6.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8020](https://github.com/facebook/docusaurus/pull/8020) chore(deps): bump github/codeql-action from 2.1.20 to 2.1.21 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7988](https://github.com/facebook/docusaurus/pull/7988) chore(deps): bump actions/dependency-review-action from 2.0.4 to 2.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7987](https://github.com/facebook/docusaurus/pull/7987) chore(deps): bump github/codeql-action from 2.1.18 to 2.1.20 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7957](https://github.com/facebook/docusaurus/pull/7957) chore(deps): bump actions/github-script from 6.1.0 to 6.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7925](https://github.com/facebook/docusaurus/pull/7925) chore(deps): bump github/codeql-action from 2.1.17 to 2.1.18 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7879](https://github.com/facebook/docusaurus/pull/7879) chore(deps): bump github/codeql-action from 2.1.16 to 2.1.17 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7804](https://github.com/facebook/docusaurus/pull/7804) chore(deps): bump github/codeql-action from 2.1.15 to 2.1.16 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7805](https://github.com/facebook/docusaurus/pull/7805) chore(deps): bump actions/dependency-review-action from 2.0.2 to 2.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7806](https://github.com/facebook/docusaurus/pull/7806) chore(deps): bump actions/setup-node from 3.4.0 to 3.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#9148](https://github.com/facebook/docusaurus/pull/9148) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8749](https://github.com/facebook/docusaurus/pull/8749) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8534](https://github.com/facebook/docusaurus/pull/8534) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8926](https://github.com/facebook/docusaurus/pull/8926) chore: upgrade TypeScript to v5.0 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#8537](https://github.com/facebook/docusaurus/pull/8537) chore: bump dependencies major versions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7993](https://github.com/facebook/docusaurus/pull/7993) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7883](https://github.com/facebook/docusaurus/pull/7883) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7822](https://github.com/facebook/docusaurus/pull/7822) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-pwa`, `docusaurus`, `eslint-plugin`\\n - [#7794](https://github.com/facebook/docusaurus/pull/7794) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-migrate`\\n - [#9400](https://github.com/facebook/docusaurus/pull/9400) chore: remove docusaurus-migrate ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9320](https://github.com/facebook/docusaurus/pull/9320) chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9304](https://github.com/facebook/docusaurus/pull/9304) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n- Other\\n - [#9264](https://github.com/facebook/docusaurus/pull/9264) ci: only install Chromium for Playwright Argos tests ([@mxschmitt](https://github.com/mxschmitt))\\n - [#9245](https://github.com/facebook/docusaurus/pull/9245) chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n - [#8947](https://github.com/facebook/docusaurus/pull/8947) test: add visual regression tests with Argos CI ([@slorber](https://github.com/slorber))\\n - [#8911](https://github.com/facebook/docusaurus/pull/8911) chore: migrate website config to createConfigAsync ([@slorber](https://github.com/slorber))\\n - [#8578](https://github.com/facebook/docusaurus/pull/8578) docs: fix dead anchor for issue reporting guidelines in template ([@Sainan](https://github.com/Sainan))\\n - [#8447](https://github.com/facebook/docusaurus/pull/8447) chore: update lerna to v6.2.0 ([@AgentEnder](https://github.com/AgentEnder))\\n - [#7967](https://github.com/facebook/docusaurus/pull/7967) test: improve e2e verdaccio configuration ([@juanpicado](https://github.com/juanpicado))\\n - [#7863](https://github.com/facebook/docusaurus/pull/7863) docs: publish 2.0.0 release blog post + adapt website for the launch ([@slorber](https://github.com/slorber))\\n - [#7828](https://github.com/facebook/docusaurus/pull/7828) misc: change showcase submission process, use GitHub discussion ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9195](https://github.com/facebook/docusaurus/pull/9195) test(blog-plugin): fix ability to generate proper blog website fixture build snapshot ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#9024](https://github.com/facebook/docusaurus/pull/9024) docs: remove Meta Data Policy footer link on website ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- `docusaurus`\\n - [#8660](https://github.com/facebook/docusaurus/pull/8660) chore: bump update-notifier ([@layershifter](https://github.com/layershifter))\\n\\n## Committers: 132\\n\\n- 0x24Karthick ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- Abhinandan Wadhwa ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n- Abinash Satapathy ([@Abinashbunty](https://github.com/Abinashbunty))\\n- Adam Patterson ([@adampatterson](https://github.com/adampatterson))\\n- Adithya Krishna ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n- Ahmad Shrif ([@amdshrif](https://github.com/amdshrif))\\n- Ahmed Mustafa Malik ([@amm98d](https://github.com/amm98d))\\n- Akshay Bhalotia ([@akshaybhalotia](https://github.com/akshaybhalotia))\\n- Alex ([@sashashura](https://github.com/sashashura))\\n- Alexander Nguyen ([@GalexyN](https://github.com/GalexyN))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Andr\xe9s Villanueva ([@Villanuevand](https://github.com/Villanuevand))\\n- Anna ([@HumbleDeer](https://github.com/HumbleDeer))\\n- Anton Kastritskii ([@antonk52](https://github.com/antonk52))\\n- Antony Onipko ([@antonyoni](https://github.com/antonyoni))\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Aqueeb ([@aqueeb](https://github.com/aqueeb))\\n- Bei Chu ([@chubei](https://github.com/chubei))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Biplav Kumar Mazumdar ([@biplavmz](https://github.com/biplavmz))\\n- Bruce ([@recallwei](https://github.com/recallwei))\\n- Charles Killer ([@Foosballfan](https://github.com/Foosballfan))\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- Chua Chee How ([@rojakcoder](https://github.com/rojakcoder))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Colin McDonnell ([@colinhacks](https://github.com/colinhacks))\\n- Coupy ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n- Craigory Coppola ([@AgentEnder](https://github.com/AgentEnder))\\n- Dan Dascalescu ([@dandv](https://github.com/dandv))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Danilo Woznica ([@danilowoz](https://github.com/danilowoz))\\n- David J. Felix ([@DavidJFelix](https://github.com/DavidJFelix))\\n- Debbie O\'Brien ([@debs-obrien](https://github.com/debs-obrien))\\n- Devansu Yadav ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- Dinh Bao Dang ([@chillinPanda](https://github.com/chillinPanda))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Eduardo M\xednguez ([@e-minguez](https://github.com/e-minguez))\\n- Eunkwang Shin ([@gracefullight](https://github.com/gracefullight))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Francesco Ciulla ([@FrancescoXX](https://github.com/FrancescoXX))\\n- Fredrik Stave ([@fredrikstave](https://github.com/fredrikstave))\\n- Fxpby ([@fxpby](https://github.com/fxpby))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Gareth Dwyer ([@sixhobbits](https://github.com/sixhobbits))\\n- Greg Berg\xe9 ([@gregberge](https://github.com/gregberge))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Gustav Ton\xe9r ([@gazab](https://github.com/gazab))\\n- Hayden Hong ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n- Hidde de Vries ([@hidde](https://github.com/hidde))\\n- Hyunseung ([@hslee2008](https://github.com/hslee2008))\\n- JJ Style ([@jj-style](https://github.com/jj-style))\\n- James Kerrane ([@thatrobotdev](https://github.com/thatrobotdev))\\n- Jean Humann ([@jean-humann](https://github.com/jean-humann))\\n- Jesper Engberg ([@jeengbe](https://github.com/jeengbe))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- Joe Williams ([@BubbaJoe](https://github.com/BubbaJoe))\\n- John Cao ([@jhcao23](https://github.com/jhcao23))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jordan Manley ([@werner33](https://github.com/werner33))\\n- Jorens Merenjanu ([@JorensM](https://github.com/JorensM))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Juan Picado ([@juanpicado](https://github.com/juanpicado))\\n- Kolja ([@razzeee](https://github.com/razzeee))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Lorenzo Lewis ([@lorenzolewis](https://github.com/lorenzolewis))\\n- Maciek Palmowski ([@palmiak](https://github.com/palmiak))\\n- Manuel ([@manuel-rw](https://github.com/manuel-rw))\\n- Marco Kuper ([@scubamaggo](https://github.com/scubamaggo))\\n- Marco Stroppel ([@mstroppel](https://github.com/mstroppel))\\n- Marie ([@schneegansm](https://github.com/schneegansm))\\n- Markshawn ([@MarkShawn2020](https://github.com/MarkShawn2020))\\n- Martin Adamko ([@attitude](https://github.com/attitude))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Michael Remediakis ([@mickremedi](https://github.com/mickremedi))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- ModupeD ([@ModupeD](https://github.com/ModupeD))\\n- Mu-Jing-Tsai ([@moojing](https://github.com/moojing))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Naffy Dharni ([@knownasnaffy](https://github.com/knownasnaffy))\\n- Naman Garg ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Oleksandr Fediashov ([@layershifter](https://github.com/layershifter))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Paul Razvan Berg ([@PaulRBerg](https://github.com/PaulRBerg))\\n- Pinaki Bhattacharjee ([@pinakipb2](https://github.com/pinakipb2))\\n- Rapha\xebl Barbazza ([@rbarbazz](https://github.com/rbarbazz))\\n- Rashid ([@rashidmya](https://github.com/rashidmya))\\n- Ryosuke Igarashi ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n- SADIK KUZU ([@sadikkuzu](https://github.com/sadikkuzu))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Serenus ([@Kesyau](https://github.com/Kesyau))\\n- Shahriar ([@ShahriarKh](https://github.com/ShahriarKh))\\n- Shashank Kumar ([@shawshankkumar](https://github.com/shawshankkumar))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- Silvestar Bistrovi\u0107 ([@maliMirkec](https://github.com/maliMirkec))\\n- Sujal Gupta ([@heysujal](https://github.com/heysujal))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Surav Shrestha ([@suravshrestha](https://github.com/suravshrestha))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Anwar Chowdhury ([@tamalchowdhury](https://github.com/tamalchowdhury))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Viktor Malmedal ([@JohnVicke](https://github.com/JohnVicke))\\n- Waldir Pimenta ([@waldyrious](https://github.com/waldyrious))\\n- Wan Sim ([@0420syj](https://github.com/0420syj))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Will Ceolin ([@wceolin](https://github.com/wceolin))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zwyx ([@Zwyx](https://github.com/Zwyx))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@FlorinaPacurar](https://github.com/FlorinaPacurar)\\n- [@Mogyuchi](https://github.com/Mogyuchi)\\n- [@Sainan](https://github.com/Sainan)\\n- [@VinceCYLiao](https://github.com/VinceCYLiao)\\n- [@allyw2002](https://github.com/allyw2002)\\n- [@bitpredator](https://github.com/bitpredator)\\n- [@conlacda](https://github.com/conlacda)\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@la55u](https://github.com/la55u)\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@prateekbytes](https://github.com/prateekbytes)\\n- [@qwerzl](https://github.com/qwerzl)\\n- [@rsteele6](https://github.com/rsteele6)\\n- [@samatt14](https://github.com/samatt14)\\n- [@thedevwonder](https://github.com/thedevwonder)\\n- [@yosukekato165](https://github.com/yosukekato165)\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))\\n- \u521d\u51ac ([@chudongvip](https://github.com/chudongvip))"},{"id":"/2.4.3","metadata":{"permalink":"/changelog/2.4.3","source":"@site/changelog/source/2.4.3.md","title":"2.4.3","description":"Bug Fix","date":"2023-09-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T20:00","authors":["homotechsual","ori-shalom","slorber","TheCatLady"]},"unlisted":false,"prevItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"nextItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`\\n - [#9107](https://github.com/facebook/docusaurus/pull/9107) fix(content-docs): sidebar generator should return customProps for doc items ([@TheCatLady](https://github.com/TheCatLady))\\n- `docusaurus-theme-classic`\\n - [#9108](https://github.com/facebook/docusaurus/pull/9108) feat(theme-classic): add description & keywords microdata to blog posts ([@TheCatLady](https://github.com/TheCatLady))\\n - [#9099](https://github.com/facebook/docusaurus/pull/9099) fix(theme): only set classname on ul elements if they have an existing class ([@homotechsual](https://github.com/homotechsual))\\n - [#9243](https://github.com/facebook/docusaurus/pull/9243) fix(theme-common): ThemedComponent should display something when JS is disabled ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9130](https://github.com/facebook/docusaurus/pull/9130) fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash ([@ori-shalom](https://github.com/ori-shalom))\\n\\n## Committers: 4\\n\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@TheCatLady](https://github.com/TheCatLady)"},{"id":"/2.4.2","metadata":{"permalink":"/changelog/2.4.2","source":"@site/changelog/source/2.4.2.md","title":"2.4.2","description":"Bad npm publish, please use 2.4.3","date":"2023-09-20T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T19:00"},"unlisted":false,"prevItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"nextItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.4.3"},{"id":"/2.4.1","metadata":{"permalink":"/changelog/2.4.1","source":"@site/changelog/source/2.4.1.md","title":"2.4.1","description":"Bug Fix","date":"2023-05-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"MetuMortis","alias":"LiberaTeMetuMortis","url":"https://github.com/LiberaTeMetuMortis","imageURL":"https://github.com/LiberaTeMetuMortis.png","key":"LiberaTeMetuMortis","page":null},{"name":"Aleksandr Vladykin","alias":"morsko1","url":"https://github.com/morsko1","imageURL":"https://github.com/morsko1.png","key":"morsko1","page":null},{"name":"Sachin Nanayakkara","alias":"SACHINnANYAKKARA","url":"https://github.com/SACHINnANYAKKARA","imageURL":"https://github.com/SACHINnANYAKKARA.png","key":"SACHINnANYAKKARA","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-05-15T20:00","authors":["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},"unlisted":false,"prevItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"nextItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8971](https://github.com/facebook/docusaurus/pull/8971) fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8933](https://github.com/facebook/docusaurus/pull/8933) fix(theme-translations): fix Turkish translation for aria label \\"Enter key\\" ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- `docusaurus`\\n - [#8908](https://github.com/facebook/docusaurus/pull/8908) fix(core): Correct yarn upgrade command for yarn 2.x ([@andrewnicols](https://github.com/andrewnicols))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8909](https://github.com/facebook/docusaurus/pull/8909) fix(theme): add \\\\_\\\\_ prefix to technical anchors, search crawlers (Algolia) should ignore them ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8906](https://github.com/facebook/docusaurus/pull/8906) fix(theme-common): fix collapsible component with prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n - [#8873](https://github.com/facebook/docusaurus/pull/8873) fix(theme-common): fix confusing theme error message: bad sidebar id suggestions ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#8874](https://github.com/facebook/docusaurus/pull/8874) fix(utils): handle Markdown links with spaces to route correctly ([@morsko1](https://github.com/morsko1))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8842](https://github.com/facebook/docusaurus/pull/8842) fix(theme-translations): remove redundant navigation text in aria label ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`\\n - [#8831](https://github.com/facebook/docusaurus/pull/8831) fix(create): add missing await ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#8862](https://github.com/facebook/docusaurus/pull/8862) refactor(theme): expose copy, success and word-wrap icons as standalone components ([@armano2](https://github.com/armano2))\\n\\n## Committers: 7\\n\\n- Aleksandr Vladykin ([@morsko1](https://github.com/morsko1))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Armano ([@armano2](https://github.com/armano2))\\n- MetuMortis ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- Sachin Nanayakkara ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))"},{"id":"/2.4.0","metadata":{"permalink":"/changelog/2.4.0","source":"@site/changelog/source/2.4.0.md","title":"2.4.0","description":"New Feature","date":"2023-03-23T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anas","alias":"Anasqx","url":"https://github.com/Anasqx","imageURL":"https://github.com/Anasqx.png","key":"Anasqx","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},{"name":"Dewansh Thakur","alias":"dewanshDT","url":"https://github.com/dewanshDT","imageURL":"https://github.com/dewanshDT.png","key":"dewanshDT","page":null},{"name":"Petter Dr\xf8nnen","alias":"dr0nn1","url":"https://github.com/dr0nn1","imageURL":"https://github.com/dr0nn1.png","key":"dr0nn1","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kagan","alias":"kagankan","url":"https://github.com/kagankan","imageURL":"https://github.com/kagankan.png","key":"kagankan","page":null},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},{"name":"Moritz St\xfcckler","alias":"pReya","url":"https://github.com/pReya","imageURL":"https://github.com/pReya.png","key":"pReya","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tanner Dolby","alias":"tannerdolby","url":"https://github.com/tannerdolby","imageURL":"https://github.com/tannerdolby.png","key":"tannerdolby","page":null},{"name":"TrueQAP","alias":"trueqap","url":"https://github.com/trueqap","imageURL":"https://github.com/trueqap.png","key":"trueqap","page":null},{"name":"Vishruta Patil","alias":"Vishruta-Patil","url":"https://github.com/Vishruta-Patil","imageURL":"https://github.com/Vishruta-Patil.png","key":"Vishruta-Patil","page":null},{"name":"Davide Donadio","alias":"ZarakiKanzaki","url":"https://github.com/ZarakiKanzaki","imageURL":"https://github.com/ZarakiKanzaki.png","key":"ZarakiKanzaki","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-03-23T20:00","authors":["Anasqx","armano2","biplavmz","dewanshDT","dr0nn1","Josh-Cena","kagankan","Mysterious-Dev","pReya","slorber","tannerdolby","trueqap","Vishruta-Patil","ZarakiKanzaki"]},"unlisted":false,"prevItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"nextItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#8236](https://github.com/facebook/docusaurus/pull/8236) feat(content-docs): add support for sidebar item category/link descriptions in generated index page ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- `docusaurus-theme-classic`\\n - [#8708](https://github.com/facebook/docusaurus/pull/8708) feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark ([@slorber](https://github.com/slorber))\\n - [#8616](https://github.com/facebook/docusaurus/pull/8616) feat(theme): add ability to translate navbar+footer logo alt text ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#8690](https://github.com/facebook/docusaurus/pull/8690) feat(npm-to-yarn): add support for PnPm and custom converters ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#8677](https://github.com/facebook/docusaurus/pull/8677) feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8674](https://github.com/facebook/docusaurus/pull/8674) feat(theme-classic): respect `prefers-reduced-motion: reduce` mediaquery, bump Infima to alpha.43 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8668](https://github.com/facebook/docusaurus/pull/8668) feat(theme-translations): add Hungarian theme translations ([@trueqap](https://github.com/trueqap))\\n - [#8631](https://github.com/facebook/docusaurus/pull/8631) feat(theme-translations): add Norwegian (Bokm\xe5l) theme translation ([@dr0nn1](https://github.com/dr0nn1))\\n- `docusaurus-theme-common`\\n - [#8656](https://github.com/facebook/docusaurus/pull/8656) feat(theme-common): allow passing a string for details summary ([@pReya](https://github.com/pReya))\\n- `docusaurus-plugin-google-gtag`\\n - [#8620](https://github.com/facebook/docusaurus/pull/8620) feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#8803](https://github.com/facebook/docusaurus/pull/8803) fix(theme): codeblock buttons should be kept on the right when using RTL locale ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n - [#8615](https://github.com/facebook/docusaurus/pull/8615) fix(theme): improve color toggle when using dark navbar ([@dewanshDT](https://github.com/dewanshDT))\\n - [#8699](https://github.com/facebook/docusaurus/pull/8699) fix(theme-classic): fix tab focus bug in dropdown (#8697) ([@kagankan](https://github.com/kagankan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8801](https://github.com/facebook/docusaurus/pull/8801) fix(theme): allow tabs children to be falsy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#8757](https://github.com/facebook/docusaurus/pull/8757) fix(search): search page should react to querystring changes + cleanup/refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8746](https://github.com/facebook/docusaurus/pull/8746) fix(core): baseUrl error banner link anchor case ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8744](https://github.com/facebook/docusaurus/pull/8744) fix(theme-translations): fix wrong arabic words (tip/next) ([@Anasqx](https://github.com/Anasqx))\\n\\n## :nail_care: Polish\\n\\n- `create-docusaurus`\\n - [#8712](https://github.com/facebook/docusaurus/pull/8712) polish(create-docusaurus): the starter template should use a navbar item \\"docSidebar\\" instead of \\"doc\\" (less fragile on updates) ([@biplavmz](https://github.com/biplavmz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8735](https://github.com/facebook/docusaurus/pull/8735) polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API ([@tannerdolby](https://github.com/tannerdolby))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8736](https://github.com/facebook/docusaurus/pull/8736) polish(core): better styling for error screens ([@tannerdolby](https://github.com/tannerdolby))\\n\\n## Committers: 14\\n\\n- Anas ([@Anasqx](https://github.com/Anasqx))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Davide Donadio ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- Dewansh Thakur ([@dewanshDT](https://github.com/dewanshDT))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kagan ([@kagankan](https://github.com/kagankan))\\n- Moritz St\xfcckler ([@pReya](https://github.com/pReya))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Petter Dr\xf8nnen ([@dr0nn1](https://github.com/dr0nn1))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tanner Dolby ([@tannerdolby](https://github.com/tannerdolby))\\n- TrueQAP ([@trueqap](https://github.com/trueqap))\\n- Vishruta Patil ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n- [@biplavmz](https://github.com/biplavmz)"},{"id":"/2.3.1","metadata":{"permalink":"/changelog/2.3.1","source":"@site/changelog/source/2.3.1.md","title":"2.3.1","description":"Bug Fix","date":"2023-02-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"S\xe9bastien Castiel","alias":"scastiel","url":"https://github.com/scastiel","imageURL":"https://github.com/scastiel.png","key":"scastiel","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-02-03T20:00","authors":["Josh-Cena","scastiel","slorber"]},"unlisted":false,"prevItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"nextItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#8628](https://github.com/facebook/docusaurus/pull/8628) fix(theme-common): fix issue in tab scroll position restoration on tab click ([@slorber](https://github.com/slorber))\\n - [#8619](https://github.com/facebook/docusaurus/pull/8619) fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop ([@slorber](https://github.com/slorber))\\n - [#8618](https://github.com/facebook/docusaurus/pull/8618) fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8593](https://github.com/facebook/docusaurus/pull/8593) fix(theme-classic): allow rendering single tab item ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#8606](https://github.com/facebook/docusaurus/pull/8606) fix(utils): handle CRLF when parsing MDX imports ([@scastiel](https://github.com/scastiel))\\n- `docusaurus-preset-classic`\\n - [#8597](https://github.com/facebook/docusaurus/pull/8597) fix(preset-classic): install the right plugin for googleTagManager ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8614](https://github.com/facebook/docusaurus/pull/8614) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#8610](https://github.com/facebook/docusaurus/pull/8610) chore(deps): bump eta from 1.12.3 to 2.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 3\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Castiel ([@scastiel](https://github.com/scastiel))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.3.0","metadata":{"permalink":"/changelog/2.3.0","source":"@site/changelog/source/2.3.0.md","title":"2.3.0","description":"New Feature","date":"2023-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Danny Kim","alias":"0916dhkim","url":"https://github.com/0916dhkim","imageURL":"https://github.com/0916dhkim.png","key":"0916dhkim","page":null},{"name":"Riccardo","alias":"3v0k4","url":"https://github.com/3v0k4","imageURL":"https://github.com/3v0k4.png","key":"3v0k4","page":null},{"name":"Denis Al-Khelali","alias":"denis-alkhelali","url":"https://github.com/denis-alkhelali","imageURL":"https://github.com/denis-alkhelali.png","key":"denis-alkhelali","page":null},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},{"name":"Frieder Bluemle","alias":"friederbluemle","url":"https://github.com/friederbluemle","imageURL":"https://github.com/friederbluemle.png","key":"friederbluemle","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},{"name":"Lachlan Heywood","alias":"lachieh","url":"https://github.com/lachieh","imageURL":"https://github.com/lachieh.png","key":"lachieh","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Matija Sirk","alias":"MatijaSi","url":"https://github.com/MatijaSi","imageURL":"https://github.com/MatijaSi.png","key":"MatijaSi","page":null},{"name":"Muhammad Hammad","alias":"mhnaeem","url":"https://github.com/mhnaeem","imageURL":"https://github.com/mhnaeem.png","key":"mhnaeem","page":null},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},{"name":"\u5b8b\u9526\u4e30","alias":"SJFCS","url":"https://github.com/SJFCS","imageURL":"https://github.com/SJFCS.png","key":"SJFCS","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},{"name":"Thomas.CA","alias":"Thomascogez","url":"https://github.com/Thomascogez","imageURL":"https://github.com/Thomascogez.png","key":"Thomascogez","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-01-26T20:00","authors":["0916dhkim","3v0k4","denis-alkhelali","Djunnni","friederbluemle","johnnyreilly","Josh-Cena","JoshuaKGoldberg","lachieh","lanegoolsby","MatijaSi","mhnaeem","mturoci","SJFCS","slorber","stnor","Thomascogez"]},"unlisted":false,"prevItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"nextItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#8541](https://github.com/facebook/docusaurus/pull/8541) feat(theme-translations): default translations for Slovenian (sl-SI) ([@MatijaSi](https://github.com/MatijaSi))\\n- `docusaurus-plugin-content-blog`\\n - [#8378](https://github.com/facebook/docusaurus/pull/8378) feat(blog): add options.createFeedItems to filter/limit/transform feed items ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8225](https://github.com/facebook/docusaurus/pull/8225) feat(theme-classic): store selected tab in query string. ([@mturoci](https://github.com/mturoci))\\n- `docusaurus`\\n - [#8397](https://github.com/facebook/docusaurus/pull/8397) feat(core): deploy CLI - add support for git url \\"insteadOf\\": use \'remote get-url\' to determine source repo url ([@friederbluemle](https://github.com/friederbluemle))\\n- `docusaurus-theme-search-algolia`\\n - [#8428](https://github.com/facebook/docusaurus/pull/8428) feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls\\n- `docusaurus-plugin-google-tag-manager`\\n - [#8470](https://github.com/facebook/docusaurus/pull/8470) feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#8303](https://github.com/facebook/docusaurus/pull/8303) fix(mdx-loader): support nested admonitions\\n - [#8282](https://github.com/facebook/docusaurus/pull/8282) fix(mermaid): fix Mermaid integration for v9.2 release\\n- `docusaurus-theme-common`\\n - [#8539](https://github.com/facebook/docusaurus/pull/8539) fix(algolia): make search footer respect searchPagePath ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#8538](https://github.com/facebook/docusaurus/pull/8538) fix(core): avoid hash collision when generating chunk names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8481](https://github.com/facebook/docusaurus/pull/8481) fix(core): explicitly define CopyWebpackPlugin toType: \'dir\' ([@Thomascogez](https://github.com/Thomascogez))\\n - [#8342](https://github.com/facebook/docusaurus/pull/8342) fix(core): normalize input for poll option ([@mhnaeem](https://github.com/mhnaeem))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-search-algolia`\\n - [#8462](https://github.com/facebook/docusaurus/pull/8462) fix(search-algolia): pass custom transformItems function to SearchBar ([@mturoci](https://github.com/mturoci))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8486](https://github.com/facebook/docusaurus/pull/8486) fix(theme): refactor Tabs, make groupId + queryString work fine together ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#8463](https://github.com/facebook/docusaurus/pull/8463) fix(theme-classic): content container grow to take all the available space ([@Djunnni](https://github.com/Djunnni))\\n - [#8328](https://github.com/facebook/docusaurus/pull/8328) fix(theme): preserve sidebar height on collapse ([@0916dhkim](https://github.com/0916dhkim))\\n - [#8350](https://github.com/facebook/docusaurus/pull/8350) fix(theme): forward className prop in theme-classic\'s Heading ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `docusaurus-theme-translations`\\n - [#8424](https://github.com/facebook/docusaurus/pull/8424) fix(translations): typo in lastUpdatedAtBy Vietnamese translation ([@slorber](https://github.com/slorber))\\n - [#8289](https://github.com/facebook/docusaurus/pull/8289) fix(theme-translations): complete Turkish theme translations\\n - [#8406](https://github.com/facebook/docusaurus/pull/8406) fix(translations): complete farsi theme translations\\n - [#8450](https://github.com/facebook/docusaurus/pull/8450) fix(theme-translations): complete Vietnamese theme translations\\n - [#8525](https://github.com/facebook/docusaurus/pull/8525) chore(theme-translations): complete pl translations\\n- `docusaurus-plugin-content-blog`\\n - [#8381](https://github.com/facebook/docusaurus/pull/8381) fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#8275](https://github.com/facebook/docusaurus/pull/8275) fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- `docusaurus-utils`\\n - [#8314](https://github.com/facebook/docusaurus/pull/8314) fix(utils): allow partially backticked markdown h1 contentTitles ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#8279](https://github.com/facebook/docusaurus/pull/8279) fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-translations`\\n - [#8423](https://github.com/facebook/docusaurus/pull/8423) fix(translations): complete Chinese theme translations ([@SJFCS](https://github.com/SJFCS))\\n - [#8312](https://github.com/facebook/docusaurus/pull/8312) fix(theme-translations): complete Swedish theme translations ([@stnor](https://github.com/stnor))\\n- `eslint-plugin`\\n - [#8281](https://github.com/facebook/docusaurus/pull/8281) feat(eslint-plugin): add plugin to exported configs ([@lachieh](https://github.com/lachieh))\\n\\n## Committers: 16\\n\\n- Danny Kim ([@0916dhkim](https://github.com/0916dhkim))\\n- Denis Al-Khelali ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Frieder Bluemle ([@friederbluemle](https://github.com/friederbluemle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lachlan Heywood ([@lachieh](https://github.com/lachieh))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Matija Sirk ([@MatijaSi](https://github.com/MatijaSi))\\n- Muhammad Hammad ([@mhnaeem](https://github.com/mhnaeem))\\n- Riccardo ([@3v0k4](https://github.com/3v0k4))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thomas.CA ([@Thomascogez](https://github.com/Thomascogez))\\n- [@mturoci](https://github.com/mturoci)\\n- \u5b8b\u9526\u4e30 ([@SJFCS](https://github.com/SJFCS))"},{"id":"/2.2.0","metadata":{"permalink":"/changelog/2.2.0","source":"@site/changelog/source/2.2.0.md","title":"2.2.0","description":"New Feature","date":"2022-10-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adnan Hashmi","alias":"adnanhashmi09","url":"https://github.com/adnanhashmi09","imageURL":"https://github.com/adnanhashmi09.png","key":"adnanhashmi09","page":null},{"name":"Johan Fagerberg","alias":"birjj","url":"https://github.com/birjj","imageURL":"https://github.com/birjj.png","key":"birjj","page":null},{"name":"evan","alias":"e-im","url":"https://github.com/e-im","imageURL":"https://github.com/e-im.png","key":"e-im","page":null},{"name":"forgeRW","alias":"forgeRW","url":"https://github.com/forgeRW","imageURL":"https://github.com/forgeRW.png","key":"forgeRW","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jeferson S. Brito","alias":"jeferson-sb","url":"https://github.com/jeferson-sb","imageURL":"https://github.com/jeferson-sb.png","key":"jeferson-sb","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},{"name":"Masahiko Hara","alias":"pasora","url":"https://github.com/pasora","imageURL":"https://github.com/pasora.png","key":"pasora","page":null},{"name":"Pranav Joglekar","alias":"Pranav2612000","url":"https://github.com/Pranav2612000","imageURL":"https://github.com/Pranav2612000.png","key":"Pranav2612000","page":null},{"name":"Ramazan SANCAR","alias":"ramazansancar","url":"https://github.com/ramazansancar","imageURL":"https://github.com/ramazansancar.png","key":"ramazansancar","page":null},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},{"name":"Shanmughapriyan S","alias":"shanpriyan","url":"https://github.com/shanpriyan","imageURL":"https://github.com/shanpriyan.png","key":"shanpriyan","page":null},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Xabier Lahuerta Vazquez","alias":"Xabilahu","url":"https://github.com/Xabilahu","imageURL":"https://github.com/Xabilahu.png","key":"Xabilahu","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-10-29T20:00","authors":["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},"unlisted":false,"prevItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"nextItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-client-redirects`\\n - [#8227](https://github.com/facebook/docusaurus/pull/8227) feat(plugin-client-redirects): keep the query string + hash ([@Xabilahu](https://github.com/Xabilahu))\\n- `docusaurus`\\n - [#8210](https://github.com/facebook/docusaurus/pull/8210) feat(core): add --config param to swizzle command ([@e-im](https://github.com/e-im))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus`\\n - [#7490](https://github.com/facebook/docusaurus/pull/7490) feat: support mermaid code blocks in Markdown ([@sjwall](https://github.com/sjwall))\\n- `docusaurus-types`, `docusaurus`\\n - [#8151](https://github.com/facebook/docusaurus/pull/8151) feat(core): siteConfig.headTags API to render extra tags in document head ([@johnnyreilly](https://github.com/johnnyreilly))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#8250](https://github.com/facebook/docusaurus/pull/8250) fix(ideal-image): do not pass down `img` prop ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`\\n - [#8246](https://github.com/facebook/docusaurus/pull/8246) fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#8234](https://github.com/facebook/docusaurus/pull/8234) fix(plugin-content-docs): fix error message context (error cause) when doc processing fails ([@shanpriyan](https://github.com/shanpriyan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8207](https://github.com/facebook/docusaurus/pull/8207) fix(theme-classic): hamburger menu control navigation by keyboard ([@jeferson-sb](https://github.com/jeferson-sb))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8204](https://github.com/facebook/docusaurus/pull/8204) fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API ([@mturoci](https://github.com/mturoci))\\n - [#8059](https://github.com/facebook/docusaurus/pull/8059) fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8192](https://github.com/facebook/docusaurus/pull/8192) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n- `docusaurus-theme-classic`\\n - [#8174](https://github.com/facebook/docusaurus/pull/8174) fix(theme): announce theme switches ([@mturoci](https://github.com/mturoci))\\n - [#8190](https://github.com/facebook/docusaurus/pull/8190) fix(theme): add more tag names to inline code element set ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8163](https://github.com/facebook/docusaurus/pull/8163) fix(theme): mobile navbar & skipToContent should cover announcementBar ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n - [#8068](https://github.com/facebook/docusaurus/pull/8068) fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-utils`\\n - [#8137](https://github.com/facebook/docusaurus/pull/8137) fix(utils): remove non-ASCII limitation for path normalization ([@birjj](https://github.com/birjj))\\n - [#8158](https://github.com/facebook/docusaurus/pull/8158) fix(content-blog): make RSS feed generation work with slugs with .html extension ([@Pranav2612000](https://github.com/Pranav2612000))\\n- `docusaurus-theme-translations`\\n - [#8105](https://github.com/facebook/docusaurus/pull/8105) fix(theme-translations): complete turkish theme default translations ([@ramazansancar](https://github.com/ramazansancar))\\n - [#8087](https://github.com/facebook/docusaurus/pull/8087) fix(theme-translations): remove extra vi translations ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- `docusaurus-plugin-client-redirects`\\n - [#8067](https://github.com/facebook/docusaurus/pull/8067) fix(redirect): tolerate trailing slash difference if config is undefined ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8253](https://github.com/facebook/docusaurus/pull/8253) chore(theme-translations): complete ru translations ([@lex111](https://github.com/lex111))\\n - [#8243](https://github.com/facebook/docusaurus/pull/8243) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#8075](https://github.com/facebook/docusaurus/pull/8075) fix(theme-translation): complete Japanese theme default translation ([@pasora](https://github.com/pasora))\\n- `docusaurus`\\n - [#8159](https://github.com/facebook/docusaurus/pull/8159) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n - [#8109](https://github.com/facebook/docusaurus/pull/8109) feat(core): prefetch on mobile touchstart ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-theme-classic`\\n - [#8161](https://github.com/facebook/docusaurus/pull/8161) fix(theme): do not show tab content when tabbing over it; show after selection only ([@mturoci](https://github.com/mturoci))\\n - [#8062](https://github.com/facebook/docusaurus/pull/8062) refactor(theme): remove hard-coded tag border-radius ([@homotechsual](https://github.com/homotechsual))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#8066](https://github.com/facebook/docusaurus/pull/8066) fix(core): normalize slashes for url/baseUrl instead of throwing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 22\\n\\n- Adnan Hashmi ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeferson S. Brito ([@jeferson-sb](https://github.com/jeferson-sb))\\n- Johan Fagerberg ([@birjj](https://github.com/birjj))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Masahiko Hara ([@pasora](https://github.com/pasora))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Nguy\u1ec5n Th\xe0nh Nam ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- Pranav Joglekar ([@Pranav2612000](https://github.com/Pranav2612000))\\n- Ramazan SANCAR ([@ramazansancar](https://github.com/ramazansancar))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Shanmughapriyan S ([@shanpriyan](https://github.com/shanpriyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Xabier Lahuerta Vazquez ([@Xabilahu](https://github.com/Xabilahu))\\n- [@forgeRW](https://github.com/forgeRW)\\n- [@mturoci](https://github.com/mturoci)\\n- evan ([@e-im](https://github.com/e-im))"},{"id":"/2.1.0","metadata":{"permalink":"/changelog/2.1.0","source":"@site/changelog/source/2.1.0.md","title":"2.1.0","description":"New Feature","date":"2022-09-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adventure-yunfei","alias":"adventure-yunfei","url":"https://github.com/adventure-yunfei","imageURL":"https://github.com/adventure-yunfei.png","key":"adventure-yunfei","page":null},{"name":"Bagdasar Ovsepyan","alias":"b-ovsepian","url":"https://github.com/b-ovsepian","imageURL":"https://github.com/b-ovsepian.png","key":"b-ovsepian","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kevin \xd8sterkilde","alias":"Kosai106","url":"https://github.com/Kosai106","imageURL":"https://github.com/Kosai106.png","key":"Kosai106","page":null},{"name":"Morgane Dubus","alias":"mdubus","url":"https://github.com/mdubus","imageURL":"https://github.com/mdubus.png","key":"mdubus","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"whiteand","alias":"whiteand","url":"https://github.com/whiteand","imageURL":"https://github.com/whiteand.png","key":"whiteand","page":null},{"name":"Yoni Chechik","alias":"YoniChechik","url":"https://github.com/YoniChechik","imageURL":"https://github.com/YoniChechik.png","key":"YoniChechik","page":null},{"name":"yzhe819","alias":"yzhe819","url":"https://github.com/yzhe819","imageURL":"https://github.com/yzhe819.png","key":"yzhe819","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-09-01T20:00","authors":["adventure-yunfei","b-ovsepian","datlechin","Josh-Cena","Kosai106","mdubus","slorber","whiteand","YoniChechik","yzhe819"]},"unlisted":false,"prevItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"nextItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8008](https://github.com/facebook/docusaurus/pull/8008) feat(theme): ability to use `<DocCardList>` without items prop, on any doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7963](https://github.com/facebook/docusaurus/pull/7963) feat(docs): allow to configure noIndex per doc version ([@slorber](https://github.com/slorber))\\n - [#7949](https://github.com/facebook/docusaurus/pull/7949) feat(plugin-docs): docs sidebar item link: support \\"autoAddBaseUrl\\" attribute ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7953](https://github.com/facebook/docusaurus/pull/7953) feat(theme): adds Ukrainian default theme translations ([@b-ovsepian](https://github.com/b-ovsepian))\\n\\n## :bug: Bug Fix\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-classic`\\n - [#8029](https://github.com/facebook/docusaurus/pull/8029) fix(preset-classic): broken link in \\"unrecognized keys\\" error message ([@mdubus](https://github.com/mdubus))\\n- `docusaurus`\\n - [#7977](https://github.com/facebook/docusaurus/pull/7977) fix(core): preload should support encoded page links ([@adventure-yunfei](https://github.com/adventure-yunfei))\\n - [#7996](https://github.com/facebook/docusaurus/pull/7996) fix(core): CLI command write-translations should extract translations from @docu\u2026 ([@slorber](https://github.com/slorber))\\n - [#7952](https://github.com/facebook/docusaurus/pull/7952) fix(core): allow overriding ssr/dev template meta tags ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#7964](https://github.com/facebook/docusaurus/pull/7964) fix(sitemap): filter all routes with robots meta containing noindex ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7910](https://github.com/facebook/docusaurus/pull/7910) fix(theme-classic): code block line number display with line wrapping ([@yzhe819](https://github.com/yzhe819))\\n - [#7786](https://github.com/facebook/docusaurus/pull/7786) fix: collapse siblings when first category is selected ([@whiteand](https://github.com/whiteand))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#7982](https://github.com/facebook/docusaurus/pull/7982) fix(theme): add aria-label to skip to content link region ([@YoniChechik](https://github.com/YoniChechik))\\n - [#7940](https://github.com/facebook/docusaurus/pull/7940) refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow ([@slorber](https://github.com/slorber))\\n - [#7876](https://github.com/facebook/docusaurus/pull/7876) refactor(theme-classic): make tag text visually certered ([@Kosai106](https://github.com/Kosai106))\\n- `docusaurus-utils`\\n - [#7941](https://github.com/facebook/docusaurus/pull/7941) feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`\\n - [#7942](https://github.com/facebook/docusaurus/pull/7942) feat(theme-classic): use lang attribute in navbar locale dropdown items ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7928](https://github.com/facebook/docusaurus/pull/7928) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`\\n - [#7905](https://github.com/facebook/docusaurus/pull/7905) docs: remove mention of beta ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 10\\n\\n- Bagdasar Ovsepyan ([@b-ovsepian](https://github.com/b-ovsepian))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kevin \xd8sterkilde ([@Kosai106](https://github.com/Kosai106))\\n- Morgane Dubus ([@mdubus](https://github.com/mdubus))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Yoni Chechik ([@YoniChechik](https://github.com/YoniChechik))\\n- [@whiteand](https://github.com/whiteand)\\n- [@yzhe819](https://github.com/yzhe819)\\n- adventure-yunfei ([@adventure-yunfei](https://github.com/adventure-yunfei))"},{"id":"/2.0.1","metadata":{"permalink":"/changelog/2.0.1","source":"@site/changelog/source/2.0.1.md","title":"2.0.1","description":"Fix bad npm publish of 2.0.0","date":"2022-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T20:00","authors":["slorber"]},"unlisted":false,"prevItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"nextItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nFix bad npm publish of 2.0.0\\n\\n## Committers: 1\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0","metadata":{"permalink":"/changelog/2.0.0","source":"@site/changelog/source/2.0.0.md","title":"2.0.0","description":"Bad npm publish, please use 2.0.1","date":"2022-08-01T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T19:00","authors":["Josh-Cena","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"nextItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.0.1\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#7781](https://github.com/facebook/docusaurus/pull/7781) refactor(core): log Docusaurus & Node version before exiting ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 2\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-rc.1","metadata":{"permalink":"/changelog/2.0.0-rc.1","source":"@site/changelog/source/2.0.0-rc.1.md","title":"2.0.0-rc.1","description":"Bug Fix","date":"2022-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"LichLord91","alias":"LichLord91","url":"https://github.com/LichLord91","imageURL":"https://github.com/LichLord91.png","key":"LichLord91","page":null},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},{"name":"Arthur Brugi\xe8re","alias":"RoiArthurB","url":"https://github.com/RoiArthurB","imageURL":"https://github.com/RoiArthurB.png","key":"RoiArthurB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"The Nguyen","alias":"treoden","url":"https://github.com/treoden","imageURL":"https://github.com/treoden.png","key":"treoden","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-14T20:00","authors":["anaclumos","DigiPie","Gary50613","ghostsquad","jeffreyaven","Josh-Cena","LichLord91","recallwei","RoiArthurB","slorber","treoden"]},"unlisted":false,"prevItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"nextItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7776](https://github.com/facebook/docusaurus/pull/7776) fix(core): swizzle --eject js should not copy theme .d.ts files ([@slorber](https://github.com/slorber))\\n - [#7750](https://github.com/facebook/docusaurus/pull/7750) fix(deploy): revert \\"feat(deploy): copy local git config to tmp repo (#7702)\\" ([@ghostsquad](https://github.com/ghostsquad))\\n- `docusaurus-plugin-sitemap`\\n - [#7774](https://github.com/facebook/docusaurus/pull/7774) fix(sitemap): complete gracefully when all pages have noIndex meta ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n - [#7755](https://github.com/facebook/docusaurus/pull/7755) fix(theme-classic): validate options properly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7752](https://github.com/facebook/docusaurus/pull/7752) fix(theme-classic): fix Layout theme height CSS ([@LichLord91](https://github.com/LichLord91))\\n- `docusaurus-migrate`\\n - [#7766](https://github.com/facebook/docusaurus/pull/7766) fix(migrate): import siteConfig with file extension ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#7761](https://github.com/facebook/docusaurus/pull/7761) fix(algolia-search): test for canUseIntersectionObserver ([@RoiArthurB](https://github.com/RoiArthurB))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7762](https://github.com/facebook/docusaurus/pull/7762) chore(theme-translations): complete ko translations ([@anaclumos](https://github.com/anaclumos))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-plugin-content-docs`\\n - [#7706](https://github.com/facebook/docusaurus/pull/7706) docs: release process, versioning, breaking changes, public API surface ([@slorber](https://github.com/slorber))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`\\n - [#7777](https://github.com/facebook/docusaurus/pull/7777) refactor(theme): fix duplicate page metadata usage ([@slorber](https://github.com/slorber))\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Arthur Brugi\xe8re ([@RoiArthurB](https://github.com/RoiArthurB))\\n- Bruce Song ([@recallwei](https://github.com/recallwei))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- The Nguyen ([@treoden](https://github.com/treoden))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- [@LichLord91](https://github.com/LichLord91)\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.22","metadata":{"permalink":"/changelog/2.0.0-beta.22","source":"@site/changelog/source/2.0.0-beta.22.md","title":"2.0.0-beta.22","description":"Breaking Change","date":"2022-07-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Fl\xe1vio Silva","alias":"201flaviosilva","url":"https://github.com/201flaviosilva","imageURL":"https://github.com/201flaviosilva.png","key":"201flaviosilva","page":null},{"name":"7Wate","alias":"7Wate","url":"https://github.com/7Wate","imageURL":"https://github.com/7Wate.png","key":"7Wate","page":null},{"name":"\u8d64\u57ce\u7ed3\u8863","alias":"AkagiYui","url":"https://github.com/AkagiYui","imageURL":"https://github.com/AkagiYui.png","key":"AkagiYui","page":null},{"name":"alewolf","alias":"alewolf","url":"https://github.com/alewolf","imageURL":"https://github.com/alewolf.png","key":"alewolf","page":null},{"name":"Alexander Nestorov","alias":"alexandernst","url":"https://github.com/alexandernst","imageURL":"https://github.com/alexandernst.png","key":"alexandernst","page":null},{"name":"Ahmed Altomy","alias":"Altomy","url":"https://github.com/Altomy","imageURL":"https://github.com/Altomy.png","key":"Altomy","page":null},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},{"name":"Benjamin Cabanes","alias":"bcabanes","url":"https://github.com/bcabanes","imageURL":"https://github.com/bcabanes.png","key":"bcabanes","page":null},{"name":"Ben Myers","alias":"BenDMyers","url":"https://github.com/BenDMyers","imageURL":"https://github.com/BenDMyers.png","key":"BenDMyers","page":null},{"name":"Boulet","alias":"Boulet-","url":"https://github.com/Boulet-","imageURL":"https://github.com/Boulet-.png","key":"Boulet-","page":null},{"name":"Charles Ancheta","alias":"cbebe","url":"https://github.com/cbebe","imageURL":"https://github.com/cbebe.png","key":"cbebe","page":null},{"name":"Clemie McCartney","alias":"clemiee","url":"https://github.com/clemiee","imageURL":"https://github.com/clemiee.png","key":"clemiee","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dharsan B","alias":"DharsanB","url":"https://github.com/DharsanB","imageURL":"https://github.com/DharsanB.png","key":"DharsanB","page":null},{"name":"dht","alias":"dht","url":"https://github.com/dht","imageURL":"https://github.com/dht.png","key":"dht","page":null},{"name":"Diego Fran\xe7a","alias":"difranca","url":"https://github.com/difranca","imageURL":"https://github.com/difranca.png","key":"difranca","page":null},{"name":"dpang314","alias":"dpang314","url":"https://github.com/dpang314","imageURL":"https://github.com/dpang314.png","key":"dpang314","page":null},{"name":"emattia","alias":"emattia","url":"https://github.com/emattia","imageURL":"https://github.com/emattia.png","key":"emattia","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},{"name":"Hyunseung Lee","alias":"HyunseungLee-Travis","url":"https://github.com/HyunseungLee-Travis","imageURL":"https://github.com/HyunseungLee-Travis.png","key":"HyunseungLee-Travis","page":null},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},{"name":"Johnie Hjelm","alias":"johnie","url":"https://github.com/johnie","imageURL":"https://github.com/johnie.png","key":"johnie","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"JP","alias":"jpdriver","url":"https://github.com/jpdriver","imageURL":"https://github.com/jpdriver.png","key":"jpdriver","page":null},{"name":"Joshua Schmitt","alias":"jqshuv","url":"https://github.com/jqshuv","imageURL":"https://github.com/jqshuv.png","key":"jqshuv","page":null},{"name":"K\xfcr\u015fat \u015eim\u015fek","alias":"kursatsmsek","url":"https://github.com/kursatsmsek","imageURL":"https://github.com/kursatsmsek.png","key":"kursatsmsek","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},{"name":"\u674e\u5c0f\u96e8","alias":"metal-young","url":"https://github.com/metal-young","imageURL":"https://github.com/metal-young.png","key":"metal-young","page":null},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},{"name":"pincman","alias":"pincman","url":"https://github.com/pincman","imageURL":"https://github.com/pincman.png","key":"pincman","page":null},{"name":"Redcamel","alias":"redcamel","url":"https://github.com/redcamel","imageURL":"https://github.com/redcamel.png","key":"redcamel","page":null},{"name":"Rein van Haaren","alias":"reinvanhaaren","url":"https://github.com/reinvanhaaren","imageURL":"https://github.com/reinvanhaaren.png","key":"reinvanhaaren","page":null},{"name":"Rudra Sen","alias":"RudraSen2","url":"https://github.com/RudraSen2","imageURL":"https://github.com/RudraSen2.png","key":"RudraSen2","page":null},{"name":"sado","alias":"sado0823","url":"https://github.com/sado0823","imageURL":"https://github.com/sado0823.png","key":"sado0823","page":null},{"name":"Dzung Do","alias":"saosangmo","url":"https://github.com/saosangmo","imageURL":"https://github.com/saosangmo.png","key":"saosangmo","page":null},{"name":"Dima Grossman","alias":"scopsy","url":"https://github.com/scopsy","imageURL":"https://github.com/scopsy.png","key":"scopsy","page":null},{"name":"SheetJSDev","alias":"SheetJSDev","url":"https://github.com/SheetJSDev","imageURL":"https://github.com/SheetJSDev.png","key":"SheetJSDev","page":null},{"name":"Joe Harrison","alias":"sigwinch28","url":"https://github.com/sigwinch28","imageURL":"https://github.com/sigwinch28.png","key":"sigwinch28","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Huy Nguyen","alias":"Smilefounder","url":"https://github.com/Smilefounder","imageURL":"https://github.com/Smilefounder.png","key":"Smilefounder","page":null},{"name":"Steven Serrata","alias":"sserrata","url":"https://github.com/sserrata","imageURL":"https://github.com/sserrata.png","key":"sserrata","page":null},{"name":"Szil\xe1rd D\xf3r\xf3","alias":"szilarddoro","url":"https://github.com/szilarddoro","imageURL":"https://github.com/szilarddoro.png","key":"szilarddoro","page":null},{"name":"Le Thi Van","alias":"vannyle","url":"https://github.com/vannyle","imageURL":"https://github.com/vannyle.png","key":"vannyle","page":null},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-08T20:00","authors":["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"nextItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#7740](https://github.com/facebook/docusaurus/pull/7740) refactor(theme): nest theme icons under subfolder @theme/Icon/\\\\* ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7716](https://github.com/facebook/docusaurus/pull/7716) refactor(theme): split BlogPostItem into smaller theme subcomponents ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7660](https://github.com/facebook/docusaurus/pull/7660) refactor(theme-common): split package into public/internal API entrypoints ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7644](https://github.com/facebook/docusaurus/pull/7644) refactor(docs,theme): split DocItem comp, useDoc hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7642](https://github.com/facebook/docusaurus/pull/7642) refactor: remove \\"error\\" reporting level, move reportMessage to logger ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7152](https://github.com/facebook/docusaurus/pull/7152) refactor: handle all admonitions via JSX component ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#7732](https://github.com/facebook/docusaurus/pull/7732) feat(theme-translations): Dutch translation ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n - [#7715](https://github.com/facebook/docusaurus/pull/7715) feat(theme-translations): Swedish translation ([@johnie](https://github.com/johnie))\\n- `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#7666](https://github.com/facebook/docusaurus/pull/7666) feat(algolia-search): allow translating search modal ([@forresst](https://github.com/forresst))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7643](https://github.com/facebook/docusaurus/pull/7643) feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#7649](https://github.com/facebook/docusaurus/pull/7649) feat(client-redirects): make plugin respect onDuplicateRoutes config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7624](https://github.com/facebook/docusaurus/pull/7624) feat: allow customizing localization path of each locale ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7581](https://github.com/facebook/docusaurus/pull/7581) feat(core): allow opting out of HTML minification ([@alexandernst](https://github.com/alexandernst))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7557](https://github.com/facebook/docusaurus/pull/7557) feat: allow specifying custom target for FooterLogo ([@vannyle](https://github.com/vannyle))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7556](https://github.com/facebook/docusaurus/pull/7556) feat: add admonition type title translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7386](https://github.com/facebook/docusaurus/pull/7386) feat(core): allow customizing the i18n directory path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#7514](https://github.com/facebook/docusaurus/pull/7514) feat(live-codeblock): add support for noInline to interactive code blocks ([@jpdriver](https://github.com/jpdriver))\\n- `docusaurus-plugin-content-docs`\\n - [#7461](https://github.com/facebook/docusaurus/pull/7461) feat(content-docs): last_update front matter ([@dpang314](https://github.com/dpang314))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7727](https://github.com/facebook/docusaurus/pull/7727) fix(theme): show blog post edit link even when no tag & not truncated ([@anaclumos](https://github.com/anaclumos))\\n - [#7659](https://github.com/facebook/docusaurus/pull/7659) fix(theme-classic): expose empty string alt text in navbar logos ([@BenDMyers](https://github.com/BenDMyers))\\n - [#7595](https://github.com/facebook/docusaurus/pull/7595) fix(content-pages): add article wrapper around MDXContent ([@matkoch](https://github.com/matkoch))\\n- `docusaurus-theme-translations`\\n - [#7694](https://github.com/facebook/docusaurus/pull/7694) fix(theme-translations): typo in vi locale ([@saosangmo](https://github.com/saosangmo))\\n- `docusaurus-plugin-content-docs`\\n - [#7638](https://github.com/facebook/docusaurus/pull/7638) fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category ([@slorber](https://github.com/slorber))\\n - [#7634](https://github.com/facebook/docusaurus/pull/7634) fix(content-docs): allow translating doc labels in sidebars.js ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7604](https://github.com/facebook/docusaurus/pull/7604) fix(utils): allow any non-boundary characters in Markdown heading ID ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7593](https://github.com/facebook/docusaurus/pull/7593) fix(cssnano-preset): disable z-index minification ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-theme-common`\\n - [#7551](https://github.com/facebook/docusaurus/pull/7551) fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word ([@slorber](https://github.com/slorber))\\n - [#7485](https://github.com/facebook/docusaurus/pull/7485) fix(theme-classic): inconsistent code block wrapping ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`\\n - [#7521](https://github.com/facebook/docusaurus/pull/7521) fix: make type-checking work in Yarn PnP ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7696](https://github.com/facebook/docusaurus/pull/7696) fix(theme-translations): improve grammar of zh translation ([@AkagiYui](https://github.com/AkagiYui))\\n - [#7691](https://github.com/facebook/docusaurus/pull/7691) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n - [#7683](https://github.com/facebook/docusaurus/pull/7683) chore(theme-translations): complete ar translations ([@Altomy](https://github.com/Altomy))\\n - [#7633](https://github.com/facebook/docusaurus/pull/7633) chore(theme-translations): complete ko translations ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- `docusaurus`\\n - [#7702](https://github.com/facebook/docusaurus/pull/7702) feat(deploy): copy local git config to tmp repo ([@ghostsquad](https://github.com/ghostsquad))\\n - [#7600](https://github.com/facebook/docusaurus/pull/7600) fix: force refresh on chunk preload error ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#7673](https://github.com/facebook/docusaurus/pull/7673) fix(content-docs): format last update date as \\"Jun 19, 2020\\" ([@sigwinch28](https://github.com/sigwinch28))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7671](https://github.com/facebook/docusaurus/pull/7671) refactor(theme-common): rename useDynamicCallback to useEvent ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#7648](https://github.com/facebook/docusaurus/pull/7648) fix(theme-common): make useShallowMemoObject key-order-insensitive ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#7639](https://github.com/facebook/docusaurus/pull/7639) chore(create): update the facebook template with current assets ([@zpao](https://github.com/zpao))\\n - [#7520](https://github.com/facebook/docusaurus/pull/7520) feat: add engines field to templates\' package.json ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7579](https://github.com/facebook/docusaurus/pull/7579) refactor(pwa): simplify registerSW code, fix ESLint errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#7545](https://github.com/facebook/docusaurus/pull/7545) feat(analytics): allow query/hash changes to be sent to GA ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#7739](https://github.com/facebook/docusaurus/pull/7739) docs: swizzle react-live with eject ([@SheetJSDev](https://github.com/SheetJSDev))\\n - [#7723](https://github.com/facebook/docusaurus/pull/7723) docs: add GitHub pages deployment troubleshooting guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7705](https://github.com/facebook/docusaurus/pull/7705) docs: mention MDXContent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7675](https://github.com/facebook/docusaurus/pull/7675) docs: add docusaurus-openapi-docs to resources ([@sserrata](https://github.com/sserrata))\\n - [#7677](https://github.com/facebook/docusaurus/pull/7677) docs: add more info on github cross repo deployment ([@bcabanes](https://github.com/bcabanes))\\n - [#7563](https://github.com/facebook/docusaurus/pull/7563) docs: add awesome-docusaurus resource ([@webbertakken](https://github.com/webbertakken))\\n - [#7665](https://github.com/facebook/docusaurus/pull/7665) docs: add link from every category index page to the guide page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7519](https://github.com/facebook/docusaurus/pull/7519) docs: multiple documentation elaborations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7518](https://github.com/facebook/docusaurus/pull/7518) docs: remove useless front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7512](https://github.com/facebook/docusaurus/pull/7512) docs: update Kent C. Dodds Twitter avatar ([@DharsanB](https://github.com/DharsanB))\\n- `create-docusaurus`\\n - [#7611](https://github.com/facebook/docusaurus/pull/7611) docs: advise using Node 18 in deployment ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7582](https://github.com/facebook/docusaurus/pull/7582) docs: make localhost links clickable ([@dht](https://github.com/dht))\\n- `docusaurus-plugin-client-redirects`\\n - [#7607](https://github.com/facebook/docusaurus/pull/7607) refactor(client-redirects): elaborate documentation, minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7676](https://github.com/facebook/docusaurus/pull/7676) refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7674](https://github.com/facebook/docusaurus/pull/7674) chore: prevent importing theme components with relative paths ([@slorber](https://github.com/slorber))\\n - [#7664](https://github.com/facebook/docusaurus/pull/7664) chore: upgrade Infima to alpha.40 ([@slorber](https://github.com/slorber))\\n- Other\\n - [#7663](https://github.com/facebook/docusaurus/pull/7663) misc: share .vscode/extensions.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7583](https://github.com/facebook/docusaurus/pull/7583) refactor(cli): make the CLI an even thinner wrapper around command functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7547](https://github.com/facebook/docusaurus/pull/7547) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7586](https://github.com/facebook/docusaurus/pull/7586) chore: upgrade to TS 4.7, compile with NodeNext ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 51\\n\\n- 7Wate ([@7Wate](https://github.com/7Wate))\\n- Ahmed Altomy ([@Altomy](https://github.com/Altomy))\\n- Alexander Nestorov ([@alexandernst](https://github.com/alexandernst))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ben Myers ([@BenDMyers](https://github.com/BenDMyers))\\n- Benjamin Cabanes ([@bcabanes](https://github.com/bcabanes))\\n- Boulet ([@Boulet-](https://github.com/Boulet-))\\n- Charles Ancheta ([@cbebe](https://github.com/cbebe))\\n- Clemie McCartney ([@clemiee](https://github.com/clemiee))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- Dharsan B ([@DharsanB](https://github.com/DharsanB))\\n- Diego Fran\xe7a ([@difranca](https://github.com/difranca))\\n- Dima Grossman ([@scopsy](https://github.com/scopsy))\\n- Dzung Do ([@saosangmo](https://github.com/saosangmo))\\n- Fl\xe1vio Silva ([@201flaviosilva](https://github.com/201flaviosilva))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Huy Nguyen ([@Smilefounder](https://github.com/Smilefounder))\\n- Hyunseung Lee ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- JP ([@jpdriver](https://github.com/jpdriver))\\n- Joe Harrison ([@sigwinch28](https://github.com/sigwinch28))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Johnie Hjelm ([@johnie](https://github.com/johnie))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Joshua Schmitt ([@jqshuv](https://github.com/jqshuv))\\n- K\xfcr\u015fat \u015eim\u015fek ([@kursatsmsek](https://github.com/kursatsmsek))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Le Thi Van ([@vannyle](https://github.com/vannyle))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Redcamel ([@redcamel](https://github.com/redcamel))\\n- Rein van Haaren ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n- Rudra Sen ([@RudraSen2](https://github.com/RudraSen2))\\n- Steven Serrata ([@sserrata](https://github.com/sserrata))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Szil\xe1rd D\xf3r\xf3 ([@szilarddoro](https://github.com/szilarddoro))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@SheetJSDev](https://github.com/SheetJSDev)\\n- [@alewolf](https://github.com/alewolf)\\n- [@dpang314](https://github.com/dpang314)\\n- dht ([@dht](https://github.com/dht))\\n- emattia ([@emattia](https://github.com/emattia))\\n- pincman ([@pincman](https://github.com/pincman))\\n- sado ([@sado0823](https://github.com/sado0823))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))\\n- \u674e\u5c0f\u96e8 ([@metal-young](https://github.com/metal-young))\\n- \u8d64\u57ce\u7ed3\u8863 ([@AkagiYui](https://github.com/AkagiYui))"},{"id":"/2.0.0-beta.21","metadata":{"permalink":"/changelog/2.0.0-beta.21","source":"@site/changelog/source/2.0.0-beta.21.md","title":"2.0.0-beta.21","description":"Breaking Change","date":"2022-05-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Benjamin Diolez","alias":"BenDz","url":"https://github.com/BenDz","imageURL":"https://github.com/BenDz.png","key":"BenDz","page":null},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Designatory","alias":"Designatory","url":"https://github.com/Designatory","imageURL":"https://github.com/Designatory.png","key":"Designatory","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},{"name":"Ggicci","alias":"ggicci","url":"https://github.com/ggicci","imageURL":"https://github.com/ggicci.png","key":"ggicci","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},{"name":"Jeremy","alias":"jrmyw92","url":"https://github.com/jrmyw92","imageURL":"https://github.com/jrmyw92.png","key":"jrmyw92","page":null},{"name":"Junjie","alias":"junjieweb","url":"https://github.com/junjieweb","imageURL":"https://github.com/junjieweb.png","key":"junjieweb","page":null},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},{"name":"Akara","alias":"Messiahhh","url":"https://github.com/Messiahhh","imageURL":"https://github.com/Messiahhh.png","key":"Messiahhh","page":null},{"name":"Michael Hughes","alias":"mhughes2k","url":"https://github.com/mhughes2k","imageURL":"https://github.com/mhughes2k.png","key":"mhughes2k","page":null},{"name":"Nitya Narasimhan","alias":"nitya","url":"https://github.com/nitya","imageURL":"https://github.com/nitya.png","key":"nitya","page":null},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Rui Peres","alias":"RuiAAPeres","url":"https://github.com/RuiAAPeres","imageURL":"https://github.com/RuiAAPeres.png","key":"RuiAAPeres","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"James","alias":"Zamiell","url":"https://github.com/Zamiell","imageURL":"https://github.com/Zamiell.png","key":"Zamiell","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-27T20:00","authors":["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"nextItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-pwa`\\n - [#7422](https://github.com/facebook/docusaurus/pull/7422) refactor(pwa): remove reloadPopup option in favor of swizzling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7501](https://github.com/facebook/docusaurus/pull/7501) chore: require Node 16.14 ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-sitemap`\\n - [#7469](https://github.com/facebook/docusaurus/pull/7469) feat(sitemap): allow customizing the output name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7371](https://github.com/facebook/docusaurus/pull/7371) feat(core): support docusaurus.config.cjs as default file name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7500](https://github.com/facebook/docusaurus/pull/7500) feat: make docusaurus serve automatically open in browser ([@Zamiell](https://github.com/Zamiell))\\n - [#7452](https://github.com/facebook/docusaurus/pull/7452) feat: add --no-minify flag to docusaurus start ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-theme-classic`\\n - [#7357](https://github.com/facebook/docusaurus/pull/7357) feat(theme-classic): allow className as option for type: \\"search\\" ([@JPeer264](https://github.com/JPeer264))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7362](https://github.com/facebook/docusaurus/pull/7362) fix: always emit SEO title + og:title meta ([@charleskorn](https://github.com/charleskorn))\\n - [#7453](https://github.com/facebook/docusaurus/pull/7453) fix(core): avoid using logger and fs.readJSON in SSR ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7369](https://github.com/facebook/docusaurus/pull/7369) fix(cli): output correct path when swizzling bare-file component in subfolder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7360](https://github.com/facebook/docusaurus/pull/7360) fix(core): allow githubPort in config validation ([@mhughes2k](https://github.com/mhughes2k))\\n- `docusaurus-plugin-google-gtag`\\n - [#7424](https://github.com/facebook/docusaurus/pull/7424) fix(gtag): send the newly rendered page\'s title instead of the old one\'s ([@ori-shalom](https://github.com/ori-shalom))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#7507](https://github.com/facebook/docusaurus/pull/7507) fix(create-docusaurus): potential security issue with command injection ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7492](https://github.com/facebook/docusaurus/pull/7492) fix(core): always treat error boundary fallback as a callback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7438](https://github.com/facebook/docusaurus/pull/7438) fix(theme-classic): allow nested task lists to preserve the indent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7430](https://github.com/facebook/docusaurus/pull/7430) fix(theme-classic): consistently apply the right active class name for all navbar items ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7411](https://github.com/facebook/docusaurus/pull/7411) fix(theme-classic): autocollapse sidebar categories when navigating with paginator ([@pranabdas](https://github.com/pranabdas))\\n - [#7363](https://github.com/facebook/docusaurus/pull/7363) fix(theme-classic): resolve customCss from site dir ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7464](https://github.com/facebook/docusaurus/pull/7464) fix(utils): fix Markdown link replacement when link text is same as href ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7458](https://github.com/facebook/docusaurus/pull/7458) fix(utils): avoid replacing Markdown links missing the directly next link ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#7392](https://github.com/facebook/docusaurus/pull/7392) fix(mdx-loader): use React.Fragment as fragment factory ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7385](https://github.com/facebook/docusaurus/pull/7385) fix(content-docs): restore functionality when a category only has index page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7493](https://github.com/facebook/docusaurus/pull/7493) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#7474](https://github.com/facebook/docusaurus/pull/7474) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7400](https://github.com/facebook/docusaurus/pull/7400) chore(theme-translations): complete Farsi translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- `docusaurus`\\n - [#7499](https://github.com/facebook/docusaurus/pull/7499) fix: avoid printing period after localhost URL ([@Zamiell](https://github.com/Zamiell))\\n- `create-docusaurus`\\n - [#7374](https://github.com/facebook/docusaurus/pull/7374) refactor(create): clean up logic when prompting for unspecified arguments ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7503](https://github.com/facebook/docusaurus/pull/7503) docs: document MDXComponents scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7497](https://github.com/facebook/docusaurus/pull/7497) docs: link every reference of types in API table to the type definition ([@Zamiell](https://github.com/Zamiell))\\n- [#7407](https://github.com/facebook/docusaurus/pull/7407) docs: add Azure SWA as deployment option ([@nitya](https://github.com/nitya))\\n- [#7390](https://github.com/facebook/docusaurus/pull/7390) fix(website): use react-lite-youtube-embed for lazy YouTube video ([@matkoch](https://github.com/matkoch))\\n\\n## :wrench: Maintenance\\n\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#7477](https://github.com/facebook/docusaurus/pull/7477) refactor: fix a lot of errors in type-aware linting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7447](https://github.com/facebook/docusaurus/pull/7447) refactor(theme-classic): migrate to tsc for build ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `stylelint-copyright`\\n - [#7441](https://github.com/facebook/docusaurus/pull/7441) refactor(stylelint-copyright): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7440](https://github.com/facebook/docusaurus/pull/7440) refactor(cssnano-preset): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7437](https://github.com/facebook/docusaurus/pull/7437) refactor: use TS project references instead of running tsc multiple times ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#7421](https://github.com/facebook/docusaurus/pull/7421) refactor(pwa): migrate client modules to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7415](https://github.com/facebook/docusaurus/pull/7415) refactor(theme-classic): always collocate stylesheets with components in one folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7405](https://github.com/facebook/docusaurus/pull/7405) refactor(core): properly code-split NotFound page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 23\\n\\n- Akara ([@Messiahhh](https://github.com/Messiahhh))\\n- Benjamin Diolez ([@BenDz](https://github.com/BenDz))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- Designatory ([@Designatory](https://github.com/Designatory))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ggicci ([@ggicci](https://github.com/ggicci))\\n- James ([@Zamiell](https://github.com/Zamiell))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeremy ([@jrmyw92](https://github.com/jrmyw92))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Junjie ([@junjieweb](https://github.com/junjieweb))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Michael Hughes ([@mhughes2k](https://github.com/mhughes2k))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Nitya Narasimhan ([@nitya](https://github.com/nitya))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Rui Peres ([@RuiAAPeres](https://github.com/RuiAAPeres))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.20","metadata":{"permalink":"/changelog/2.0.0-beta.20","source":"@site/changelog/source/2.0.0-beta.20.md","title":"2.0.0-beta.20","description":"Bug Fix","date":"2022-05-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Steven Hicks","alias":"pepopowitz","url":"https://github.com/pepopowitz","imageURL":"https://github.com/pepopowitz.png","key":"pepopowitz","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sergey Gromkov","alias":"sgromkov","url":"https://github.com/sgromkov","imageURL":"https://github.com/sgromkov.png","key":"sgromkov","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-05T20:00","authors":["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"nextItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7342](https://github.com/facebook/docusaurus/pull/7342) fix: avoid flash of page scrolling to top on refresh ([@slorber](https://github.com/slorber))\\n - [#7329](https://github.com/facebook/docusaurus/pull/7329) fix(core): inject docusaurus version into SSR as local ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`\\n - [#7341](https://github.com/facebook/docusaurus/pull/7341) fix(theme-classic): properly highlight code block line numbers ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7334](https://github.com/facebook/docusaurus/pull/7334) feat(website): make canary release page display actual canary version name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7343](https://github.com/facebook/docusaurus/pull/7343) docs: add page for create-docusaurus API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7340](https://github.com/facebook/docusaurus/pull/7340) docs: add Yandex Metrika plugin to community plugins ([@sgromkov](https://github.com/sgromkov))\\n- [#7336](https://github.com/facebook/docusaurus/pull/7336) fix(website): fix multiple accessibility issues around color contrast ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7327](https://github.com/facebook/docusaurus/pull/7327) docs: add clarity to versioning behavior ([@pepopowitz](https://github.com/pepopowitz))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sergey Gromkov ([@sgromkov](https://github.com/sgromkov))\\n- Steven Hicks ([@pepopowitz](https://github.com/pepopowitz))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.19","metadata":{"permalink":"/changelog/2.0.0-beta.19","source":"@site/changelog/source/2.0.0-beta.19.md","title":"2.0.0-beta.19","description":"New Feature","date":"2022-05-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aaron Nwabuoku","alias":"aerovulpe","url":"https://github.com/aerovulpe","imageURL":"https://github.com/aerovulpe.png","key":"aerovulpe","page":null},{"name":"AkiraVoid","alias":"AkiraVoid","url":"https://github.com/AkiraVoid","imageURL":"https://github.com/AkiraVoid.png","key":"AkiraVoid","page":null},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},{"name":"apq","alias":"AntonPalmqvist","url":"https://github.com/AntonPalmqvist","imageURL":"https://github.com/AntonPalmqvist.png","key":"AntonPalmqvist","page":null},{"name":"ApsarasX","alias":"ApsarasX","url":"https://github.com/ApsarasX","imageURL":"https://github.com/ApsarasX.png","key":"ApsarasX","page":null},{"name":"chelproc","alias":"chelproc","url":"https://github.com/chelproc","imageURL":"https://github.com/chelproc.png","key":"chelproc","page":null},{"name":"Viktor Chernodub","alias":"chernodub","url":"https://github.com/chernodub","imageURL":"https://github.com/chernodub.png","key":"chernodub","page":null},{"name":"curatorcat.pcc.eth","alias":"CuratorCat","url":"https://github.com/CuratorCat","imageURL":"https://github.com/CuratorCat.png","key":"CuratorCat","page":null},{"name":"Cwen Yin","alias":"cwen0","url":"https://github.com/cwen0","imageURL":"https://github.com/cwen0.png","key":"cwen0","page":null},{"name":"Fusang\u2740","alias":"cxOrz","url":"https://github.com/cxOrz","imageURL":"https://github.com/cxOrz.png","key":"cxOrz","page":null},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},{"name":"Andrei Canta","alias":"deiucanta","url":"https://github.com/deiucanta","imageURL":"https://github.com/deiucanta.png","key":"deiucanta","page":null},{"name":"deployn","alias":"deployn","url":"https://github.com/deployn","imageURL":"https://github.com/deployn.png","key":"deployn","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Chinazaekpere Ngubo","alias":"dr-ngubo","url":"https://github.com/dr-ngubo","imageURL":"https://github.com/dr-ngubo.png","key":"dr-ngubo","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Elias Papavasileiou","alias":"elias-pap","url":"https://github.com/elias-pap","imageURL":"https://github.com/elias-pap.png","key":"elias-pap","page":null},{"name":"Indermohan Singh","alias":"imsingh","url":"https://github.com/imsingh","imageURL":"https://github.com/imsingh.png","key":"imsingh","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"JMW","alias":"JohnnyMcWeed","url":"https://github.com/JohnnyMcWeed","imageURL":"https://github.com/JohnnyMcWeed.png","key":"JohnnyMcWeed","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},{"name":"kgolubic","alias":"kgolubic","url":"https://github.com/kgolubic","imageURL":"https://github.com/kgolubic.png","key":"kgolubic","page":null},{"name":"loic","alias":"layerzzzio","url":"https://github.com/layerzzzio","imageURL":"https://github.com/layerzzzio.png","key":"layerzzzio","page":null},{"name":"Leedom","alias":"leedom92","url":"https://github.com/leedom92","imageURL":"https://github.com/leedom92.png","key":"leedom92","page":null},{"name":"Martin Blom","alias":"LeviticusMB","url":"https://github.com/LeviticusMB","imageURL":"https://github.com/LeviticusMB.png","key":"LeviticusMB","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},{"name":"Karl Ward","alias":"mjau-mjau","url":"https://github.com/mjau-mjau","imageURL":"https://github.com/mjau-mjau.png","key":"mjau-mjau","page":null},{"name":"mehdim","alias":"mxhdx","url":"https://github.com/mxhdx","imageURL":"https://github.com/mxhdx.png","key":"mxhdx","page":null},{"name":"Chau Tran","alias":"nartc","url":"https://github.com/nartc","imageURL":"https://github.com/nartc.png","key":"nartc","page":null},{"name":"Naveen","alias":"naveensrinivasan","url":"https://github.com/naveensrinivasan","imageURL":"https://github.com/naveensrinivasan.png","key":"naveensrinivasan","page":null},{"name":"Pablo Cordon","alias":"pcordon","url":"https://github.com/pcordon","imageURL":"https://github.com/pcordon.png","key":"pcordon","page":null},{"name":"Lenz Weber-Tronic","alias":"phryneas","url":"https://github.com/phryneas","imageURL":"https://github.com/phryneas.png","key":"phryneas","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"redhat123456","alias":"redhat123456","url":"https://github.com/redhat123456","imageURL":"https://github.com/redhat123456.png","key":"redhat123456","page":null},{"name":"rev","alias":"rev4324","url":"https://github.com/rev4324","imageURL":"https://github.com/rev4324.png","key":"rev4324","page":null},{"name":"Zac A","alias":"sandypockets","url":"https://github.com/sandypockets","imageURL":"https://github.com/sandypockets.png","key":"sandypockets","page":null},{"name":"czhen","alias":"shczhen","url":"https://github.com/shczhen","imageURL":"https://github.com/shczhen.png","key":"shczhen","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Evan","alias":"sulu5890","url":"https://github.com/sulu5890","imageURL":"https://github.com/sulu5890.png","key":"sulu5890","page":null},{"name":"surendran82","alias":"surendran82","url":"https://github.com/surendran82","imageURL":"https://github.com/surendran82.png","key":"surendran82","page":null},{"name":"svix-ken","alias":"svix-ken","url":"https://github.com/svix-ken","imageURL":"https://github.com/svix-ken.png","key":"svix-ken","page":null},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},{"name":"Qi Zhang","alias":"zzzhangqi","url":"https://github.com/zzzhangqi","imageURL":"https://github.com/zzzhangqi.png","key":"zzzhangqi","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-04T20:00","authors":["aerovulpe","AkiraVoid","andrewnicols","AntonPalmqvist","ApsarasX","chelproc","chernodub","CuratorCat","cwen0","cxOrz","DanRoscigno","deiucanta","deployn","Dr-Electron","dr-ngubo","duanwilliam","elias-pap","imsingh","jeffreyaven","jodyheavener","JohnnyMcWeed","johnnyreilly","Josh-Cena","kaycebasques","kgolubic","layerzzzio","leedom92","LeviticusMB","lex111","lukasbach","mjau-mjau","mxhdx","nartc","naveensrinivasan","pcordon","phryneas","Pierre-Gilles","redhat123456","rev4324","sandypockets","shczhen","slorber","sulu5890","surendran82","svix-ken","sykp241095","zzzhangqi"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"nextItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7178](https://github.com/facebook/docusaurus/pull/7178) feat(theme-classic): extensible code block magic comment system ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7007](https://github.com/facebook/docusaurus/pull/7007) feat(theme-classic): code block showLineNumbers ([@lex111](https://github.com/lex111))\\n - [#7012](https://github.com/facebook/docusaurus/pull/7012) feat(theme-classic): show blog sidebar on mobile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`, `eslint-plugin`\\n - [#7206](https://github.com/facebook/docusaurus/pull/7206) feat: Docusaurus ESLint plugin to enforce best Docusaurus practices ([@elias-pap](https://github.com/elias-pap))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7231](https://github.com/facebook/docusaurus/pull/7231) feat: allow custom navbarItem types to pass through validation ([@slorber](https://github.com/slorber))\\n - [#7058](https://github.com/facebook/docusaurus/pull/7058) feat(theme-classic): new \'html\' type navbar item ([@lex111](https://github.com/lex111))\\n - [#7079](https://github.com/facebook/docusaurus/pull/7079) feat: allow using pure HTML as label in navbar links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7036](https://github.com/facebook/docusaurus/pull/7036) feat(theme-classic): toggle code wrap button ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6457](https://github.com/facebook/docusaurus/pull/6457) feat(content-docs): draft docs excluded from build & sidebars ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6430](https://github.com/facebook/docusaurus/pull/6430) feat: allow setting calendar for i18n date formatting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#7083](https://github.com/facebook/docusaurus/pull/7083) feat(core): fail-safe global data fetching ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7106](https://github.com/facebook/docusaurus/pull/7106) feat(content-docs): make docs:version command work on localized docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7082](https://github.com/facebook/docusaurus/pull/7082) feat(core): allow plugins to declare custom route context ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7124](https://github.com/facebook/docusaurus/pull/7124) feat(core): allow plugin/preset config to contain false/null ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils`\\n - [#6979](https://github.com/facebook/docusaurus/pull/6979) feat(sitemap): add ignorePatterns option ([@ApsarasX](https://github.com/ApsarasX))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#7257](https://github.com/facebook/docusaurus/pull/7257) refactor: remove long-deprecated routesLoaded lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7277](https://github.com/facebook/docusaurus/pull/7277) refactor(theme-classic): move all sidebar-related config under themeConfig.docs.sidebar ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#7117](https://github.com/facebook/docusaurus/pull/7117) refactor(content-{blog,docs}): unify handling of tags ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7304](https://github.com/facebook/docusaurus/pull/7304) fix(theme-classic): remove breadcrumb items without href from microdata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7179](https://github.com/facebook/docusaurus/pull/7179) fix(theme-classic): do not add microdata item prop to trailing breadcrumb ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7173](https://github.com/facebook/docusaurus/pull/7173) fix(theme-classic): admonition title: disable text-transform on inline code blocks ([@chelproc](https://github.com/chelproc))\\n - [#7048](https://github.com/facebook/docusaurus/pull/7048) fix(theme-classic): add caret for dropdown on mobile ([@lex111](https://github.com/lex111))\\n - [#7025](https://github.com/facebook/docusaurus/pull/7025) fix: make docs page wrapper take full height ([@lex111](https://github.com/lex111))\\n - [#7013](https://github.com/facebook/docusaurus/pull/7013) fix(theme-classic): adjust shadow on code block ([@chernodub](https://github.com/chernodub))\\n - [#7015](https://github.com/facebook/docusaurus/pull/7015) fix(theme-classic): do not add caret for non-collapsible categories ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7294](https://github.com/facebook/docusaurus/pull/7294) fix(\\\\*): make TypeScript realize that each plugin package has a default export ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7285](https://github.com/facebook/docusaurus/pull/7285) fix(core): allow empty static directories ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7180](https://github.com/facebook/docusaurus/pull/7180) fix: pass pollOptions to webpack ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n - [#7184](https://github.com/facebook/docusaurus/pull/7184) fix(core): prevent 404 when accessing /page.html ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7225](https://github.com/facebook/docusaurus/pull/7225) fix: allow swizzling a component\'s parent folder ([@slorber](https://github.com/slorber))\\n - [#7066](https://github.com/facebook/docusaurus/pull/7066) fix(core): all plugin lifecycles should receive translated content ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7233](https://github.com/facebook/docusaurus/pull/7233) fix(content-docs): make category index text translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#7200](https://github.com/facebook/docusaurus/pull/7200) fix(theme-common): do not persist color mode for OS-triggered changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7057](https://github.com/facebook/docusaurus/pull/7057) fix(theme-common): use native scrolling when smooth behavior set in CSS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7033](https://github.com/facebook/docusaurus/pull/7033) fix(theme): only parse HTML- and JSX-style comments in MD code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#7212](https://github.com/facebook/docusaurus/pull/7212) fix(content-blog): make footnote reference DOM ID unique on post listing page ([@AkiraVoid](https://github.com/AkiraVoid))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7187](https://github.com/facebook/docusaurus/pull/7187) fix(core): handle case where package.json is not available at CWD ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#7222](https://github.com/facebook/docusaurus/pull/7222) fix(theme-translations): fix invalid pluralization in cs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7166](https://github.com/facebook/docusaurus/pull/7166) fix(theme-translations): always try all possible locale resolutions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#7164](https://github.com/facebook/docusaurus/pull/7164) fix: adjust spacing for custom search properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-types`, `docusaurus`\\n - [#7143](https://github.com/facebook/docusaurus/pull/7143) fix(sitemap): exclude pages with robots noindex from sitemap ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-types`\\n - [#7078](https://github.com/facebook/docusaurus/pull/7078) fix(create): install types for JS template as well ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7043](https://github.com/facebook/docusaurus/pull/7043) fix(utils): parse Markdown headings with CRLF line break ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7023](https://github.com/facebook/docusaurus/pull/7023) refactor: fix a few places of path handling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#7014](https://github.com/facebook/docusaurus/pull/7014) fix(types): declare history and react-loadable as dependencies ([@sulu5890](https://github.com/sulu5890))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7299](https://github.com/facebook/docusaurus/pull/7299) refactor: minor improvements for breadcrumbs ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#7290](https://github.com/facebook/docusaurus/pull/7290) refactor(create): add i18n config in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7286](https://github.com/facebook/docusaurus/pull/7286) refactor(create): update screenshots in quick start tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7223](https://github.com/facebook/docusaurus/pull/7223) refactor: use generated-index in init templates ([@slorber](https://github.com/slorber))\\n - [#7118](https://github.com/facebook/docusaurus/pull/7118) refactor(create): mention that the edit links can be removed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#7306](https://github.com/facebook/docusaurus/pull/7306) chore: upgrade Infima to alpha.39 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#7291](https://github.com/facebook/docusaurus/pull/7291) feat(types): JSDoc for docusaurus config fields ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7267](https://github.com/facebook/docusaurus/pull/7267) fix(theme-common): allow details to not provide a summary ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7172](https://github.com/facebook/docusaurus/pull/7172) refactor: control base styling of code blocks via CSS vars ([@lex111](https://github.com/lex111))\\n - [#7129](https://github.com/facebook/docusaurus/pull/7129) refactor(theme-classic): fix a few margin inconsistencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7244](https://github.com/facebook/docusaurus/pull/7244) refactor: semantic markup improvement, fix validation warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7183](https://github.com/facebook/docusaurus/pull/7183) refactor: use SVG icon for home breadcrumb ([@Dr-Electron](https://github.com/Dr-Electron))\\n - [#7139](https://github.com/facebook/docusaurus/pull/7139) fix: proper spacing between generated card items on mobiles ([@lex111](https://github.com/lex111))\\n - [#7134](https://github.com/facebook/docusaurus/pull/7134) fix(theme-classic): fix docs sidebar layout shifts when expanding categories ([@slorber](https://github.com/slorber))\\n - [#7068](https://github.com/facebook/docusaurus/pull/7068) refactor(theme-classic): blog mobile secondary menu use consistent styles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7004](https://github.com/facebook/docusaurus/pull/7004) fix(theme-classic): shrink title size on mobile ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-translations`\\n - [#7214](https://github.com/facebook/docusaurus/pull/7214) chore(theme-translations): complete Polish translations ([@rev4324](https://github.com/rev4324))\\n - [#7031](https://github.com/facebook/docusaurus/pull/7031) chore(theme-translations): complete German translations ([@deployn](https://github.com/deployn))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#7218](https://github.com/facebook/docusaurus/pull/7218) fix(cli): always show error stack to unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7142](https://github.com/facebook/docusaurus/pull/7142) refactor(core): lower timeout before rendering progress bar to 200ms ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7103](https://github.com/facebook/docusaurus/pull/7103) fix(core): preserve Interpolate children semantics ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7029](https://github.com/facebook/docusaurus/pull/7029) refactor: console output improvements ([@lex111](https://github.com/lex111))\\n - [#7017](https://github.com/facebook/docusaurus/pull/7017) refactor: remove copyright comment from swizzled components ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7148](https://github.com/facebook/docusaurus/pull/7148) feat(preset-classic, content-docs/client): JSDoc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#7122](https://github.com/facebook/docusaurus/pull/7122) feat(preset-classic): exclude debug plugin routes from sitemap ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#7113](https://github.com/facebook/docusaurus/pull/7113) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7080](https://github.com/facebook/docusaurus/pull/7080) refactor: replace non-prop interface with type; allow plugin lifecycles to have sync type ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#7019](https://github.com/facebook/docusaurus/pull/7019) feat(logger): new \\"url\\" format, add double quotes around paths ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7006](https://github.com/facebook/docusaurus/pull/7006) refactor: split and cleanup theme/DocPage ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7005](https://github.com/facebook/docusaurus/pull/7005) refactor: split DocSidebarItem by item type ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-logger`\\n - [#7305](https://github.com/facebook/docusaurus/pull/7305) docs: update docs for logger, add API docs to website ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#7284](https://github.com/facebook/docusaurus/pull/7284) docs: add a paragraph about SSR as an optimization technique ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7278](https://github.com/facebook/docusaurus/pull/7278) docs: enhance docs about Markdown TOC and metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7271](https://github.com/facebook/docusaurus/pull/7271) docs: specify Node version requirement to a minor ([@DanRoscigno](https://github.com/DanRoscigno))\\n - [#7252](https://github.com/facebook/docusaurus/pull/7252) docs: update gtag docs to reflect what a GA4 tag looks like ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#7240](https://github.com/facebook/docusaurus/pull/7240) docs: add PCC Archive site to showcase ([@CuratorCat](https://github.com/CuratorCat))\\n - [#7239](https://github.com/facebook/docusaurus/pull/7239) docs: add Chaos mesh site to showcase ([@cwen0](https://github.com/cwen0))\\n - [#7235](https://github.com/facebook/docusaurus/pull/7235) docs: add TiDB community books to showcase ([@shczhen](https://github.com/shczhen))\\n - [#7236](https://github.com/facebook/docusaurus/pull/7236) docs: add documentation about pluralization ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7230](https://github.com/facebook/docusaurus/pull/7230) docs: add OSS Insight to showcase ([@sykp241095](https://github.com/sykp241095))\\n - [#7208](https://github.com/facebook/docusaurus/pull/7208) docs: remove mention of \\"template\\" from README installation guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7159](https://github.com/facebook/docusaurus/pull/7159) docs: explain more clearly the purpose of a ref sidebar type ([@andrewnicols](https://github.com/andrewnicols))\\n - [#7126](https://github.com/facebook/docusaurus/pull/7126) docs: multiple documentation improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7123](https://github.com/facebook/docusaurus/pull/7123) refactor(showcase): enforce descriptions with maximum length of 120 characters ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7026](https://github.com/facebook/docusaurus/pull/7026) docs: correct plugin example filename ([@mxhdx](https://github.com/mxhdx))\\n - [#7110](https://github.com/facebook/docusaurus/pull/7110) docs: add a note about additional languages needing to be Prism component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6746](https://github.com/facebook/docusaurus/pull/6746) fix(website): lazy-load YT iframe ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7061](https://github.com/facebook/docusaurus/pull/7061) docs: add docusaurus-plugin-typedoc to resources ([@nartc](https://github.com/nartc))\\n - [#7059](https://github.com/facebook/docusaurus/pull/7059) docs: add firelordjs to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7050](https://github.com/facebook/docusaurus/pull/7050) docs: add import React statement in JSX file example ([@kaycebasques](https://github.com/kaycebasques))\\n - [#7022](https://github.com/facebook/docusaurus/pull/7022) docs: add Easypanel to showcase ([@deiucanta](https://github.com/deiucanta))\\n - [#7016](https://github.com/facebook/docusaurus/pull/7016) docs: consistently use sidebars.js filename ([@leedom92](https://github.com/leedom92))\\n - [#7020](https://github.com/facebook/docusaurus/pull/7020) docs: add Divine WSF and Ghostly to showcase ([@LeviticusMB](https://github.com/LeviticusMB))\\n - [#7000](https://github.com/facebook/docusaurus/pull/7000) docs: remove unnecessary semicolon ([@imsingh](https://github.com/imsingh))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#7081](https://github.com/facebook/docusaurus/pull/7081) docs: fix some casing inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- Other\\n - [#7309](https://github.com/facebook/docusaurus/pull/7309) chore: use \\"Maintenance\\" instead of \\"Internal\\" in changelog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7300](https://github.com/facebook/docusaurus/pull/7300) misc: check doc page by Lighthouse CI ([@lex111](https://github.com/lex111))\\n - [#7266](https://github.com/facebook/docusaurus/pull/7266) misc: add links section to PR template ([@slorber](https://github.com/slorber))\\n - [#7224](https://github.com/facebook/docusaurus/pull/7224) chore: GitHub Actions cancel-in-progress ([@slorber](https://github.com/slorber))\\n - [#7216](https://github.com/facebook/docusaurus/pull/7216) chore: remove netlify-cli from devDependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7211](https://github.com/facebook/docusaurus/pull/7211) chore: replace node 17 with 18 in CI matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7168](https://github.com/facebook/docusaurus/pull/7168) misc: add CI actions/dependency-review-action for security ([@slorber](https://github.com/slorber))\\n - [#6984](https://github.com/facebook/docusaurus/pull/6984) misc: pin actions to a full-length commit SHA ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n - [#7002](https://github.com/facebook/docusaurus/pull/7002) chore: regen examples for 2.0 beta.18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-remark-plugin-npm2yarn`\\n - [#7295](https://github.com/facebook/docusaurus/pull/7295) refactor: use export = syntax for Node utility packages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7293](https://github.com/facebook/docusaurus/pull/7293) refactor(types): move non-core, non-public types out of the types package ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7292](https://github.com/facebook/docusaurus/pull/7292) refactor(core): collocate CLI commands and their option types ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7084](https://github.com/facebook/docusaurus/pull/7084) refactor(core): code cleanup ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#7282](https://github.com/facebook/docusaurus/pull/7282) refactor(core): prefetch/preload refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7273](https://github.com/facebook/docusaurus/pull/7273) refactor(theme-classic): multiple re-arrangements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7268](https://github.com/facebook/docusaurus/pull/7268) refactor(theme-classic): DocPage theme refactors polish ([@slorber](https://github.com/slorber))\\n - [#7269](https://github.com/facebook/docusaurus/pull/7269) refactor: extract useSkipToContent() ([@slorber](https://github.com/slorber))\\n - [#7175](https://github.com/facebook/docusaurus/pull/7175) refactor(theme-classic): split CodeBlock ([@slorber](https://github.com/slorber))\\n - [#7067](https://github.com/facebook/docusaurus/pull/7067) refactor(theme-classic): extract doc-related navbar items\' logic to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7021](https://github.com/facebook/docusaurus/pull/7021) refactor(theme): extract plumbing code of BTT button into theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7270](https://github.com/facebook/docusaurus/pull/7270) refactor(theme-classic): refactor TOC-related theme components ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#7220](https://github.com/facebook/docusaurus/pull/7220) refactor(cli): normalize the application of default option values ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7141](https://github.com/facebook/docusaurus/pull/7141) refactor(core): minor PendingNavigation refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7243](https://github.com/facebook/docusaurus/pull/7243) chore: upgrade Jest to 28; add GitHub-actions reporter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7140](https://github.com/facebook/docusaurus/pull/7140) refactor(content-docs): split version handling into several files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#7194](https://github.com/facebook/docusaurus/pull/7194) fix: fix a few internal declaration semantic errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-theme-translations`, `docusaurus`\\n - [#7186](https://github.com/facebook/docusaurus/pull/7186) refactor: prefer fs.readJSON over readFile.then(JSON.parse) ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#7145](https://github.com/facebook/docusaurus/pull/7145) refactor: unify how MDX content types are represented ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#7138](https://github.com/facebook/docusaurus/pull/7138) chore: upgrade dependencies + upgrade React types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7131](https://github.com/facebook/docusaurus/pull/7131) chore: disable string escaping in snapshots ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7054](https://github.com/facebook/docusaurus/pull/7054) refactor(core): refactor routes generation logic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#7042](https://github.com/facebook/docusaurus/pull/7042) refactor(core): reorganize files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7037](https://github.com/facebook/docusaurus/pull/7037) refactor(core): reorganize functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`\\n - [#7085](https://github.com/facebook/docusaurus/pull/7085) refactor: mark a few client-side packages as side-effect-free ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#4997](https://github.com/facebook/docusaurus/pull/4997) perf(mdx-loader): cache mdx/remark compiler instances ([@phryneas](https://github.com/phryneas))\\n\\n## Committers: 47\\n\\n- Aaron Nwabuoku ([@aerovulpe](https://github.com/aerovulpe))\\n- AkiraVoid ([@AkiraVoid](https://github.com/AkiraVoid))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrei Canta ([@deiucanta](https://github.com/deiucanta))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- ApsarasX ([@ApsarasX](https://github.com/ApsarasX))\\n- Chau Tran ([@nartc](https://github.com/nartc))\\n- Chinazaekpere Ngubo ([@dr-ngubo](https://github.com/dr-ngubo))\\n- Cwen Yin ([@cwen0](https://github.com/cwen0))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Elias Papavasileiou ([@elias-pap](https://github.com/elias-pap))\\n- Evan ([@sulu5890](https://github.com/sulu5890))\\n- Fusang\u2740 ([@cxOrz](https://github.com/cxOrz))\\n- Indermohan Singh ([@imsingh](https://github.com/imsingh))\\n- JMW ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Karl Ward ([@mjau-mjau](https://github.com/mjau-mjau))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Leedom ([@leedom92](https://github.com/leedom92))\\n- Lenz Weber-Tronic ([@phryneas](https://github.com/phryneas))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Martin Blom ([@LeviticusMB](https://github.com/LeviticusMB))\\n- Naveen ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n- Pablo Cordon ([@pcordon](https://github.com/pcordon))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Qi Zhang ([@zzzhangqi](https://github.com/zzzhangqi))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Viktor Chernodub ([@chernodub](https://github.com/chernodub))\\n- Zac A ([@sandypockets](https://github.com/sandypockets))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@chelproc](https://github.com/chelproc)\\n- [@deployn](https://github.com/deployn)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@kgolubic](https://github.com/kgolubic)\\n- [@redhat123456](https://github.com/redhat123456)\\n- [@surendran82](https://github.com/surendran82)\\n- [@svix-ken](https://github.com/svix-ken)\\n- apq ([@AntonPalmqvist](https://github.com/AntonPalmqvist))\\n- curatorcat.pcc.eth ([@CuratorCat](https://github.com/CuratorCat))\\n- czhen ([@shczhen](https://github.com/shczhen))\\n- loic ([@layerzzzio](https://github.com/layerzzzio))\\n- mehdim ([@mxhdx](https://github.com/mxhdx))\\n- rev ([@rev4324](https://github.com/rev4324))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))"},{"id":"/2.0.0-beta.18","metadata":{"permalink":"/changelog/2.0.0-beta.18","source":"@site/changelog/source/2.0.0-beta.18.md","title":"2.0.0-beta.18","description":"New Feature","date":"2022-03-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afonso Jorge Ramos","alias":"afonsojramos","url":"https://github.com/afonsojramos","imageURL":"https://github.com/afonsojramos.png","key":"afonsojramos","page":null},{"name":"Alessandro Festa","alias":"alefesta","url":"https://github.com/alefesta","imageURL":"https://github.com/alefesta.png","key":"alefesta","page":null},{"name":"Alois Klink","alias":"aloisklink","url":"https://github.com/aloisklink","imageURL":"https://github.com/aloisklink.png","key":"aloisklink","page":null},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"Bugo","alias":"dragomano","url":"https://github.com/dragomano","imageURL":"https://github.com/dragomano.png","key":"dragomano","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Kyohei Fukuda","alias":"hand-dot","url":"https://github.com/hand-dot","imageURL":"https://github.com/hand-dot.png","key":"hand-dot","page":null},{"name":"WonChul Heo","alias":"heowc","url":"https://github.com/heowc","imageURL":"https://github.com/heowc.png","key":"heowc","page":null},{"name":"Jadon N","alias":"jadonn","url":"https://github.com/jadonn","imageURL":"https://github.com/jadonn.png","key":"jadonn","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Roberto Vidal","alias":"jrvidal","url":"https://github.com/jrvidal","imageURL":"https://github.com/jrvidal.png","key":"jrvidal","page":null},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"nate contino","alias":"nathan-contino-mongo","url":"https://github.com/nathan-contino-mongo","imageURL":"https://github.com/nathan-contino-mongo.png","key":"nathan-contino-mongo","page":null},{"name":"Odarpi","alias":"odarpi","url":"https://github.com/odarpi","imageURL":"https://github.com/odarpi.png","key":"odarpi","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"Pawel Kowaluk","alias":"pkowaluk","url":"https://github.com/pkowaluk","imageURL":"https://github.com/pkowaluk.png","key":"pkowaluk","page":null},{"name":"Tsz W. TAM","alias":"rccttwd","url":"https://github.com/rccttwd","imageURL":"https://github.com/rccttwd.png","key":"rccttwd","page":null},{"name":"Sam Gutentag","alias":"samgutentag","url":"https://github.com/samgutentag","imageURL":"https://github.com/samgutentag.png","key":"samgutentag","page":null},{"name":"seladb","alias":"seladb","url":"https://github.com/seladb","imageURL":"https://github.com/seladb.png","key":"seladb","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"tae","alias":"taejs","url":"https://github.com/taejs","imageURL":"https://github.com/taejs.png","key":"taejs","page":null},{"name":"Begula","alias":"vedantmgoyal2009","url":"https://github.com/vedantmgoyal2009","imageURL":"https://github.com/vedantmgoyal2009.png","key":"vedantmgoyal2009","page":null},{"name":"Yorkie Liu","alias":"yorkie","url":"https://github.com/yorkie","imageURL":"https://github.com/yorkie.png","key":"yorkie","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-25T20:00","authors":["afonsojramos","alefesta","aloisklink","arifszn","billy1624","datlechin","DigiPie","dragomano","felipecrs","hand-dot","heowc","jadonn","Josh-Cena","jrvidal","kaycebasques","lex111","moonrailgun","nathan-contino-mongo","odarpi","PatelN123","pkowaluk","rccttwd","samgutentag","seladb","slorber","taejs","vedantmgoyal2009","yorkie"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"nextItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6990](https://github.com/facebook/docusaurus/pull/6990) feat: lazy-load external images + ability to customize image display ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#6933](https://github.com/facebook/docusaurus/pull/6933) feat(core,theme): useRouteContext + HtmlClassNameProvider ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6921](https://github.com/facebook/docusaurus/pull/6921) feat(core): allow plugin lifecycles to return relative paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6697](https://github.com/facebook/docusaurus/pull/6697) feat: add SEO microdata for doc breadcrumbs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6842](https://github.com/facebook/docusaurus/pull/6842) feat(theme-classic): MDXContent wrapper component ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6780](https://github.com/facebook/docusaurus/pull/6780) feat(content-docs): allow custom props through _category_.json ([@taejs](https://github.com/taejs))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#6993](https://github.com/facebook/docusaurus/pull/6993) fix(core): prevent useBaseUrl returning /base/base when on /base ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6936](https://github.com/facebook/docusaurus/pull/6936) fix: remove semicolon from HTML output ([@lex111](https://github.com/lex111))\\n - [#6849](https://github.com/facebook/docusaurus/pull/6849) fix(cli): write-heading-id should not generate colliding slugs when not overwriting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6983](https://github.com/facebook/docusaurus/pull/6983) fix(search): bump Infima, fix search issue due to broken CSS selector ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils-validation`\\n - [#6977](https://github.com/facebook/docusaurus/pull/6977) fix(validation): allow non-object params to remark/rehype plugins ([@aloisklink](https://github.com/aloisklink))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6973](https://github.com/facebook/docusaurus/pull/6973) fix(content-docs): suppress git error on multiple occurrences ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-blog`\\n - [#6947](https://github.com/facebook/docusaurus/pull/6947) fix(content-blog): only create archive route if there are blog posts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6918](https://github.com/facebook/docusaurus/pull/6918) fix(content-blog): remove double leading slash in blog-only paginated view ([@heowc](https://github.com/heowc))\\n- `docusaurus-theme-search-algolia`\\n - [#6888](https://github.com/facebook/docusaurus/pull/6888) fix(theme-algolia): declare content-docs as dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6847](https://github.com/facebook/docusaurus/pull/6847) fix: minor Chinese translation fixes ([@rccttwd](https://github.com/rccttwd))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6887](https://github.com/facebook/docusaurus/pull/6887) fix(content-docs): give context about sidebar loading failure ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6997](https://github.com/facebook/docusaurus/pull/6997) fix(validation): improve error messages for a few schemas ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6971](https://github.com/facebook/docusaurus/pull/6971) refactor: improve a11y of dropdown menu ([@lex111](https://github.com/lex111))\\n - [#6987](https://github.com/facebook/docusaurus/pull/6987) refactor(theme-classic): cleanup of code blocks ([@lex111](https://github.com/lex111))\\n - [#6950](https://github.com/facebook/docusaurus/pull/6950) refactor(theme-classic): clean up CSS of doc cards ([@lex111](https://github.com/lex111))\\n - [#6994](https://github.com/facebook/docusaurus/pull/6994) refactor: better external link icon positioning ([@lex111](https://github.com/lex111))\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n - [#6985](https://github.com/facebook/docusaurus/pull/6985) refactor(theme-classic): remove span wrappers from layout links ([@lex111](https://github.com/lex111))\\n - [#6986](https://github.com/facebook/docusaurus/pull/6986) fix(theme-classic): minor code copy button improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6964](https://github.com/facebook/docusaurus/pull/6964) refactor: replace text-based copy code button with icons ([@lex111](https://github.com/lex111))\\n - [#6932](https://github.com/facebook/docusaurus/pull/6932) refactor(theme-classic): little breadcrumbs improvements ([@lex111](https://github.com/lex111))\\n - [#6914](https://github.com/facebook/docusaurus/pull/6914) feat(theme-classic): set aria-expanded on expandable sidebar categories ([@pkowaluk](https://github.com/pkowaluk))\\n - [#6844](https://github.com/facebook/docusaurus/pull/6844) refactor(theme-classic): split sidebar into smaller parts ([@slorber](https://github.com/slorber))\\n - [#6846](https://github.com/facebook/docusaurus/pull/6846) refactor(theme-classic): consistently add span wrapper for layout links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6980](https://github.com/facebook/docusaurus/pull/6980) feat(utils): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6974](https://github.com/facebook/docusaurus/pull/6974) feat(theme-common): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6784](https://github.com/facebook/docusaurus/pull/6784) feat(core): allow configureWebpack to return undefined ([@yorkie](https://github.com/yorkie))\\n - [#6941](https://github.com/facebook/docusaurus/pull/6941) refactor(core): improve error message when a page has no default-export ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6878](https://github.com/facebook/docusaurus/pull/6878) fix(core): ensure stable webpack theme aliases sorting ([@jrvidal](https://github.com/jrvidal))\\n - [#6854](https://github.com/facebook/docusaurus/pull/6854) fix(core): fix swizzle legend typo ([@DigiPie](https://github.com/DigiPie))\\n - [#6850](https://github.com/facebook/docusaurus/pull/6850) fix(core): make plugin lifecycles consistently bound to the plugin instance ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6937](https://github.com/facebook/docusaurus/pull/6937) fix(content-docs): warn when files are not tracked ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n - [#6894](https://github.com/facebook/docusaurus/pull/6894) refactor(theme-classic): split theme footer into smaller components + swizzle config ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#6929](https://github.com/facebook/docusaurus/pull/6929) refactor(core): minor routes type improvement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`\\n - [#6928](https://github.com/facebook/docusaurus/pull/6928) chore(pwa, sitemap, client-redirects, ideal-image): JSDoc for types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#6922](https://github.com/facebook/docusaurus/pull/6922) refactor(content-blog): clean up type definitions; in-code documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6781](https://github.com/facebook/docusaurus/pull/6781) feat(theme-translations): complete Russian translations ([@dragomano](https://github.com/dragomano))\\n - [#6877](https://github.com/facebook/docusaurus/pull/6877) chore(theme-translations): complete Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-plugin-content-blog`\\n - [#6909](https://github.com/facebook/docusaurus/pull/6909) refactor(content-blog): improve error message of authors map validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6860](https://github.com/facebook/docusaurus/pull/6860) fix(create): load entry file after node version checking ([@taejs](https://github.com/taejs))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6988](https://github.com/facebook/docusaurus/pull/6988) docs: fix example admonition syntax ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6978](https://github.com/facebook/docusaurus/pull/6978) docs: npm run tsc -> npx tsc ([@jadonn](https://github.com/jadonn))\\n - [#6952](https://github.com/facebook/docusaurus/pull/6952) docs: add K3ai to showcase ([@alefesta](https://github.com/alefesta))\\n - [#6948](https://github.com/facebook/docusaurus/pull/6948) docs: add pdfme docs to showcase ([@hand-dot](https://github.com/hand-dot))\\n - [#6943](https://github.com/facebook/docusaurus/pull/6943) docs: add SeaORM docs to showcase ([@billy1624](https://github.com/billy1624))\\n - [#6926](https://github.com/facebook/docusaurus/pull/6926) docs: clarify the usage of slug ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6911](https://github.com/facebook/docusaurus/pull/6911) docs: add Reactive Button site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6904](https://github.com/facebook/docusaurus/pull/6904) docs: update image for digital support services ([@PatelN123](https://github.com/PatelN123))\\n - [#6892](https://github.com/facebook/docusaurus/pull/6892) docs: add EduLinks site to showcase ([@odarpi](https://github.com/odarpi))\\n - [#6889](https://github.com/facebook/docusaurus/pull/6889) docs: editorial fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6883](https://github.com/facebook/docusaurus/pull/6883) docs(cli): add info about development on github codespaces ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n - [#6856](https://github.com/facebook/docusaurus/pull/6856) docs: add Reddit Image Fetcher site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6875](https://github.com/facebook/docusaurus/pull/6875) docs: update TRPG Engine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#6871](https://github.com/facebook/docusaurus/pull/6871) docs: mark clutch and gulp as open-source ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6862](https://github.com/facebook/docusaurus/pull/6862) docs: update showcase data ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6837](https://github.com/facebook/docusaurus/pull/6837) docs: add PcapPlusPlus to showcase ([@seladb](https://github.com/seladb))\\n - [#6832](https://github.com/facebook/docusaurus/pull/6832) docs: add Spicetify site to showcase ([@afonsojramos](https://github.com/afonsojramos))\\n - [#6830](https://github.com/facebook/docusaurus/pull/6830) docs: simplify imported code blocks syntax ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- `docusaurus-types`\\n - [#6881](https://github.com/facebook/docusaurus/pull/6881) docs: mention configureWebpack devServer return value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6833](https://github.com/facebook/docusaurus/pull/6833) docs: make tutorial code block directly copyable ([@samgutentag](https://github.com/samgutentag))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6995](https://github.com/facebook/docusaurus/pull/6995) refactor: ensure all types are using index signature instead of Record ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6991](https://github.com/facebook/docusaurus/pull/6991) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `lqip-loader`\\n - [#6992](https://github.com/facebook/docusaurus/pull/6992) refactor(lqip-loader): remove unused palette option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6975](https://github.com/facebook/docusaurus/pull/6975) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#6967](https://github.com/facebook/docusaurus/pull/6967) chore: publish stylelint-copyright again ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6961](https://github.com/facebook/docusaurus/pull/6961) refactor: unify how validateOptions is handled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#6957](https://github.com/facebook/docusaurus/pull/6957) chore(types): remove querystring from dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus`\\n - [#6956](https://github.com/facebook/docusaurus/pull/6956) test: improve test coverage; reorder theme-common files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6955](https://github.com/facebook/docusaurus/pull/6955) refactor(core): move browserContext and docusaurusContext out of client exports ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6944](https://github.com/facebook/docusaurus/pull/6944) chore: migrate Jest and website to SWC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6951](https://github.com/facebook/docusaurus/pull/6951) test: fix Windows test for gitUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6931](https://github.com/facebook/docusaurus/pull/6931) chore: tighten ESLint config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`\\n - [#6924](https://github.com/facebook/docusaurus/pull/6924) refactor(client-redirects): migrate validation to validateOptions lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6916](https://github.com/facebook/docusaurus/pull/6916) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6912](https://github.com/facebook/docusaurus/pull/6912) test: improve test coverage; multiple internal refactors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6910](https://github.com/facebook/docusaurus/pull/6910) refactor: convert Jest infrastructure to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6838](https://github.com/facebook/docusaurus/pull/6838) fix(website): changelog plugin leads to CI bugs on release ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#6908](https://github.com/facebook/docusaurus/pull/6908) chore: do not print prototype in jest snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6906](https://github.com/facebook/docusaurus/pull/6906) refactor: install eslint-plugin-regexp ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#6905](https://github.com/facebook/docusaurus/pull/6905) test: improve test coverage; properly test core client APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6903](https://github.com/facebook/docusaurus/pull/6903) chore: spell-check test files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6902](https://github.com/facebook/docusaurus/pull/6902) test(theme-common): improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6900](https://github.com/facebook/docusaurus/pull/6900) test: enable a few jest eslint rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6898](https://github.com/facebook/docusaurus/pull/6898) refactor: import jest as global; unify import style of some modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6891](https://github.com/facebook/docusaurus/pull/6891) refactor(theme-classic): avoid using clsx class dict with CSS modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6880](https://github.com/facebook/docusaurus/pull/6880) refactor: prefer fs.outputFile to ensureDir + writeFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#6866](https://github.com/facebook/docusaurus/pull/6866) refactor: improve types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#6864](https://github.com/facebook/docusaurus/pull/6864) refactor: remove unnecessary default values normalized during validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus`\\n - [#6861](https://github.com/facebook/docusaurus/pull/6861) refactor: make JS executables included in the tsconfig for editor hints ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6857](https://github.com/facebook/docusaurus/pull/6857) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6852](https://github.com/facebook/docusaurus/pull/6852) refactor: enable a few TS flags ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 28\\n\\n- Afonso Jorge Ramos ([@afonsojramos](https://github.com/afonsojramos))\\n- Alessandro Festa ([@alefesta](https://github.com/alefesta))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Alois Klink ([@aloisklink](https://github.com/aloisklink))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- Begula ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Bugo ([@dragomano](https://github.com/dragomano))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Jadon N ([@jadonn](https://github.com/jadonn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Kyohei Fukuda ([@hand-dot](https://github.com/hand-dot))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Odarpi ([@odarpi](https://github.com/odarpi))\\n- Pawel Kowaluk ([@pkowaluk](https://github.com/pkowaluk))\\n- Roberto Vidal ([@jrvidal](https://github.com/jrvidal))\\n- Sam Gutentag ([@samgutentag](https://github.com/samgutentag))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tsz W. TAM ([@rccttwd](https://github.com/rccttwd))\\n- WonChul Heo ([@heowc](https://github.com/heowc))\\n- Yorkie Liu ([@yorkie](https://github.com/yorkie))\\n- [@seladb](https://github.com/seladb)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- nate contino ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- tae ([@taejs](https://github.com/taejs))"},{"id":"/2.0.0-beta.17","metadata":{"permalink":"/changelog/2.0.0-beta.17","source":"@site/changelog/source/2.0.0-beta.17.md","title":"2.0.0-beta.17","description":"New Feature","date":"2022-03-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alex Nicholls","alias":"anicholls","url":"https://github.com/anicholls","imageURL":"https://github.com/anicholls.png","key":"anicholls","page":null},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},{"name":"David Stotijn","alias":"dstotijn","url":"https://github.com/dstotijn","imageURL":"https://github.com/dstotijn.png","key":"dstotijn","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-03T20:00","authors":["anicholls","arifszn","dmitryvinn","dstotijn","Josh-Cena","PatelN123","slorber","vaibhavshn"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"nextItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6783](https://github.com/facebook/docusaurus/pull/6783) feat: allow blog authors email ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#6827](https://github.com/facebook/docusaurus/pull/6827) fix(theme-classic): restore docusaurus search meta ([@slorber](https://github.com/slorber))\\n - [#6767](https://github.com/facebook/docusaurus/pull/6767) fix(theme-classic): allow code tags containing inline elements to stay inline ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6824](https://github.com/facebook/docusaurus/pull/6824) fix(theme-common): breadcrumbs home bug in docs-only ([@slorber](https://github.com/slorber))\\n - [#6816](https://github.com/facebook/docusaurus/pull/6816) fix(theme-common): docs breadcrumbs not working with baseUrl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6700](https://github.com/facebook/docusaurus/pull/6700) fix(content-docs): always sort autogenerated sidebar items by file/folder name by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6812](https://github.com/facebook/docusaurus/pull/6812) fix(core): remove hash/query when filtering existing files for broken link check ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6779](https://github.com/facebook/docusaurus/pull/6779) fix(mdx-loader): suppress image reading warning in Yarn PnP; log warning instead of error ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6762](https://github.com/facebook/docusaurus/pull/6762) fix(create): update broken SVG paths in templates ([@anicholls](https://github.com/anicholls))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#6826](https://github.com/facebook/docusaurus/pull/6826) refactor(theme-common): unify missing context errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6769](https://github.com/facebook/docusaurus/pull/6769) refactor(theme-classic): use Material icon for language dropdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6792](https://github.com/facebook/docusaurus/pull/6792) fix(mdx-loader): allow image paths to be URL encoded ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6825](https://github.com/facebook/docusaurus/pull/6825) docs: Adds Netlify one click deploy to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6818](https://github.com/facebook/docusaurus/pull/6818) docs: add deploy with vercel button to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6817](https://github.com/facebook/docusaurus/pull/6817) docs: fix broken links ([@PatelN123](https://github.com/PatelN123))\\n - [#6811](https://github.com/facebook/docusaurus/pull/6811) docs: add homepage banner in support of Ukraine ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6813](https://github.com/facebook/docusaurus/pull/6813) docs: mark dyte as opensource in showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6776](https://github.com/facebook/docusaurus/pull/6776) docs: make GitHub actions explanation aligned with the code ([@arifszn](https://github.com/arifszn))\\n - [#6772](https://github.com/facebook/docusaurus/pull/6772) docs: add basic documentation about client modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6815](https://github.com/facebook/docusaurus/pull/6815) fix: consistently use `max-width: 996px` in media queries ([@dstotijn](https://github.com/dstotijn))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6821](https://github.com/facebook/docusaurus/pull/6821) test(content-docs): refactor navigation test snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6768](https://github.com/facebook/docusaurus/pull/6768) test: add TypeScript template to E2E test matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6773](https://github.com/facebook/docusaurus/pull/6773) refactor(utils): categorize functions into separate files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6761](https://github.com/facebook/docusaurus/pull/6761) chore: various internal fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 8\\n\\n- Alex Nicholls ([@anicholls](https://github.com/anicholls))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- David Stotijn ([@dstotijn](https://github.com/dstotijn))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))"},{"id":"/2.0.0-beta.16","metadata":{"permalink":"/changelog/2.0.0-beta.16","source":"@site/changelog/source/2.0.0-beta.16.md","title":"2.0.0-beta.16","description":"New Feature","date":"2022-02-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Gaurish","alias":"apidev234","url":"https://github.com/apidev234","imageURL":"https://github.com/apidev234.png","key":"apidev234","page":null},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"BigDataWriter","alias":"BigDataWriter","url":"https://github.com/BigDataWriter","imageURL":"https://github.com/BigDataWriter.png","key":"BigDataWriter","page":null},{"name":"Clement Demonchy","alias":"cdemonchy-pro","url":"https://github.com/cdemonchy-pro","imageURL":"https://github.com/cdemonchy-pro.png","key":"cdemonchy-pro","page":null},{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},{"name":"CookieJarApps","alias":"CookieJarApps","url":"https://github.com/CookieJarApps","imageURL":"https://github.com/CookieJarApps.png","key":"CookieJarApps","page":null},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},{"name":"Dmitry Vinnik | Meta","alias":"dmitryvinn-fb","url":"https://github.com/dmitryvinn-fb","imageURL":"https://github.com/dmitryvinn-fb.png","key":"dmitryvinn-fb","page":null},{"name":"Everardo J. Barojas M.","alias":"ebarojas","url":"https://github.com/ebarojas","imageURL":"https://github.com/ebarojas.png","key":"ebarojas","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Daniel Kalevski","alias":"kalevski","url":"https://github.com/kalevski","imageURL":"https://github.com/kalevski.png","key":"kalevski","page":null},{"name":"Kishan Gajera","alias":"kgajera","url":"https://github.com/kgajera","imageURL":"https://github.com/kgajera.png","key":"kgajera","page":null},{"name":"Konstantin Tarkus","alias":"koistya","url":"https://github.com/koistya","imageURL":"https://github.com/koistya.png","key":"koistya","page":null},{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Miles Johnson","alias":"milesj","url":"https://github.com/milesj","imageURL":"https://github.com/milesj.png","key":"milesj","page":null},{"name":"Matheus Ricardo Brunelli","alias":"mrbrunelli","url":"https://github.com/mrbrunelli","imageURL":"https://github.com/mrbrunelli.png","key":"mrbrunelli","page":null},{"name":"Naseel Niyas","alias":"NaseelNiyas","url":"https://github.com/NaseelNiyas","imageURL":"https://github.com/NaseelNiyas.png","key":"NaseelNiyas","page":null},{"name":"nick-verida","alias":"nick-verida","url":"https://github.com/nick-verida","imageURL":"https://github.com/nick-verida.png","key":"nick-verida","page":null},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Muhammad Redho Ayassa","alias":"redhoyasa","url":"https://github.com/redhoyasa","imageURL":"https://github.com/redhoyasa.png","key":"redhoyasa","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"Ruben Arushanyan","alias":"Ruben-Arushanyan","url":"https://github.com/Ruben-Arushanyan","imageURL":"https://github.com/Ruben-Arushanyan.png","key":"Ruben-Arushanyan","page":null},{"name":"seyoon20087","alias":"seyoon20087","url":"https://github.com/seyoon20087","imageURL":"https://github.com/seyoon20087.png","key":"seyoon20087","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tamal Web","alias":"tamalweb","url":"https://github.com/tamalweb","imageURL":"https://github.com/tamalweb.png","key":"tamalweb","page":null},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null},{"name":"Daniel Hanke","alias":"thedanielhanke","url":"https://github.com/thedanielhanke","imageURL":"https://github.com/thedanielhanke.png","key":"thedanielhanke","page":null},{"name":"toto6038","alias":"toto6038","url":"https://github.com/toto6038","imageURL":"https://github.com/toto6038.png","key":"toto6038","page":null},{"name":"Matthew Ailes","alias":"vidarc","url":"https://github.com/vidarc","imageURL":"https://github.com/vidarc.png","key":"vidarc","page":null},{"name":"\uc774\uc815\ud658","alias":"winterlood","url":"https://github.com/winterlood","imageURL":"https://github.com/winterlood.png","key":"winterlood","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-02-25T20:00","authors":["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"nextItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-logger`, `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6243](https://github.com/facebook/docusaurus/pull/6243) feat(core): brand new swizzle CLI experience ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6750](https://github.com/facebook/docusaurus/pull/6750) feat(create): new --package-manager option; interactive package manager selection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6610](https://github.com/facebook/docusaurus/pull/6610) feat(create): allow specifying a git clone strategy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6723](https://github.com/facebook/docusaurus/pull/6723) feat: sync color mode between browser tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#6692](https://github.com/facebook/docusaurus/pull/6692) feat(search-algolia): allow disabling search page and configuring path ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6517](https://github.com/facebook/docusaurus/pull/6517) feat(docs,theme-classic): docs breadcrumbs ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6519](https://github.com/facebook/docusaurus/pull/6519) feat(content-docs): sidebar item type \\"html\\" for rendering pure markup ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6593](https://github.com/facebook/docusaurus/pull/6593) feat(content-blog): infer blog post date from git history ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-docs`\\n - [#6619](https://github.com/facebook/docusaurus/pull/6619) feat(content-docs): add custom props front matter ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6452](https://github.com/facebook/docusaurus/pull/6452) feat(content-docs): allow explicitly disabling index page for generated category ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6603](https://github.com/facebook/docusaurus/pull/6603) feat(content-blog): allow customizing blog archive component through option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6221](https://github.com/facebook/docusaurus/pull/6221) feat(content-blog): Allow pagination for BlogTagsPostsPage ([@redhoyasa](https://github.com/redhoyasa))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6752](https://github.com/facebook/docusaurus/pull/6752) chore: upgrade docsearch-react to v3 stable, bump dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#6729](https://github.com/facebook/docusaurus/pull/6729) refactor: make MDX export a flat TOC list instead of tree ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6740](https://github.com/facebook/docusaurus/pull/6740) refactor: remove deprecated Webpack utils & validation escape hatch ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6707](https://github.com/facebook/docusaurus/pull/6707) refactor(theme-classic): bias again search metadata toward Algolia DocSearch ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6758](https://github.com/facebook/docusaurus/pull/6758) fix(theme-common): isSamePath should be case-insensitive ([@slorber](https://github.com/slorber))\\n - [#6748](https://github.com/facebook/docusaurus/pull/6748) fix(theme-classic): temporarily disable toc heading autoscrolling ([@slorber](https://github.com/slorber))\\n - [#6696](https://github.com/facebook/docusaurus/pull/6696) fix(theme-common): do not run useLocationChange when hot reloading ([@lex111](https://github.com/lex111))\\n - [#6490](https://github.com/facebook/docusaurus/pull/6490) fix(theme-classic): do not switch color modes when printing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6749](https://github.com/facebook/docusaurus/pull/6749) fix(theme-classic): fix breadcrumb home link bug with new useHomePageRoute() hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6720](https://github.com/facebook/docusaurus/pull/6720) fix(content-docs): create assets for frontmatter images ([@lebalz](https://github.com/lebalz))\\n - [#6592](https://github.com/facebook/docusaurus/pull/6592) fix(content-docs): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n - [#6477](https://github.com/facebook/docusaurus/pull/6477) fix(content-docs): export versioning utils ([@milesj](https://github.com/milesj))\\n- `docusaurus-mdx-loader`\\n - [#6712](https://github.com/facebook/docusaurus/pull/6712) fix(mdx-loader): make headings containing links properly formatted in ToC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6701](https://github.com/facebook/docusaurus/pull/6701) fix(cli): disable directory listing in serve ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6607](https://github.com/facebook/docusaurus/pull/6607) fix(cli): log error itself on unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6500](https://github.com/facebook/docusaurus/pull/6500) fix(cli): allow passing a list of file names to write-heading-ids ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6496](https://github.com/facebook/docusaurus/pull/6496) fix(core): configValidation should allow inline theme functions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6652](https://github.com/facebook/docusaurus/pull/6652) fix(theme-classic): minor BTT button fixes ([@lex111](https://github.com/lex111))\\n - [#6612](https://github.com/facebook/docusaurus/pull/6612) fix(theme-classic): make Prism additional languages properly server-side rendered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6599](https://github.com/facebook/docusaurus/pull/6599) fix(theme-classic): add docSidebar as allowed item in dropdown ([@homotechsual](https://github.com/homotechsual))\\n - [#6531](https://github.com/facebook/docusaurus/pull/6531) fix(theme-classic): highlight active collapsible doc category properly ([@lex111](https://github.com/lex111))\\n - [#6515](https://github.com/facebook/docusaurus/pull/6515) fix(theme-classic): add key prop for SimpleLinks map ([@kgajera](https://github.com/kgajera))\\n - [#6508](https://github.com/facebook/docusaurus/pull/6508) fix(theme-classic): apply width/height for footer logos without href ([@kgajera](https://github.com/kgajera))\\n- `docusaurus-utils`\\n - [#6617](https://github.com/facebook/docusaurus/pull/6617) fix(utils): convert Markdown links in reference-style links with multiple spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6489](https://github.com/facebook/docusaurus/pull/6489) fix(utils): do not resolve Markdown paths with @site prefix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6478](https://github.com/facebook/docusaurus/pull/6478) fix(utils): Markdown linkification match local paths beginning with http ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6495](https://github.com/facebook/docusaurus/pull/6495) fix(content-docs): render category with no subitems as a normal link ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6755](https://github.com/facebook/docusaurus/pull/6755) refactor: unify error handling behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6679](https://github.com/facebook/docusaurus/pull/6679) feat(create): better detection of package manager preference ([@lex111](https://github.com/lex111))\\n - [#6481](https://github.com/facebook/docusaurus/pull/6481) refactor(init): promote good practices; use site alias ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6745](https://github.com/facebook/docusaurus/pull/6745) fix(content-docs): improve sidebar shorthand normalization error message ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6602](https://github.com/facebook/docusaurus/pull/6602) feat(content-docs): allow omitting enclosing array consistently for category shorthand ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6596](https://github.com/facebook/docusaurus/pull/6596) refactor(content-docs): clean up sidebars logic; validate generator returns ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6586](https://github.com/facebook/docusaurus/pull/6586) refactor(content-docs): read category metadata files before autogenerating ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6730](https://github.com/facebook/docusaurus/pull/6730) refactor: declare all props as interfaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6711](https://github.com/facebook/docusaurus/pull/6711) chore(theme-translations): complete Korean translations ([@revi](https://github.com/revi))\\n - [#6686](https://github.com/facebook/docusaurus/pull/6686) fix(theme-translations): improve Korean translations ([@winterlood](https://github.com/winterlood))\\n - [#6635](https://github.com/facebook/docusaurus/pull/6635) refactor(theme-translation): improve Traditional Chinese translation quality ([@toto6038](https://github.com/toto6038))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#6674](https://github.com/facebook/docusaurus/pull/6674) fix(theme-classic): improve aria label of color mode toggle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6668](https://github.com/facebook/docusaurus/pull/6668) refactor: recommend using data-theme without html element selector ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6622](https://github.com/facebook/docusaurus/pull/6622) refactor(theme-classic): clean up CSS of doc sidebar item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#6644](https://github.com/facebook/docusaurus/pull/6644) fix(core): forward ref to Link\'s anchor element ([@koistya](https://github.com/koistya))\\n - [#6646](https://github.com/facebook/docusaurus/pull/6646) fix(cli): make docusaurus clear also remove .yarn/.cache folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6306](https://github.com/facebook/docusaurus/pull/6306) feat(core): use react-helmet-async ([@seyoon20087](https://github.com/seyoon20087))\\n- `docusaurus-utils-validation`\\n - [#6656](https://github.com/facebook/docusaurus/pull/6656) feat: allow numbers in plugin ID ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `lqip-loader`\\n - [#6650](https://github.com/facebook/docusaurus/pull/6650) refactor(utils): replace hash with contenthash for file loader ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6615](https://github.com/facebook/docusaurus/pull/6615) fix: remove more peer dependency warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6598](https://github.com/facebook/docusaurus/pull/6598) feat: make Markdown images lazy loaded ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6505](https://github.com/facebook/docusaurus/pull/6505) fix(theme-classic): make focused link outlined with JS disabled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#6507](https://github.com/facebook/docusaurus/pull/6507) refactor: improve internal typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6498](https://github.com/facebook/docusaurus/pull/6498) fix: updating peerDependency fields for yarn berry ([@vidarc](https://github.com/vidarc))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#6482](https://github.com/facebook/docusaurus/pull/6482) feat: mark some text labels as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6727](https://github.com/facebook/docusaurus/pull/6727) docs: add Blog Matheus Brunelli site to showcase ([@mrbrunelli](https://github.com/mrbrunelli))\\n - [#6721](https://github.com/facebook/docusaurus/pull/6721) docs: add Butterfly Documentation to showcase ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n - [#6710](https://github.com/facebook/docusaurus/pull/6710) docs(website): Add techharvesting to showcase ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n - [#6708](https://github.com/facebook/docusaurus/pull/6708) docs: add doc for generated-index keyword/image metadata ([@slorber](https://github.com/slorber))\\n - [#6709](https://github.com/facebook/docusaurus/pull/6709) docs(website): fix video responsiveness ([@lex111](https://github.com/lex111))\\n - [#6687](https://github.com/facebook/docusaurus/pull/6687) docs: add deep dive video for Docusaurus ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6704](https://github.com/facebook/docusaurus/pull/6704) docs(website): search doc typo searchParameters ([@slorber](https://github.com/slorber))\\n - [#6682](https://github.com/facebook/docusaurus/pull/6682) docs: add redux-cool site to showcase ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n - [#6677](https://github.com/facebook/docusaurus/pull/6677) docs: add Rivalis to showcase ([@kalevski](https://github.com/kalevski))\\n - [#6676](https://github.com/facebook/docusaurus/pull/6676) docs: add SmartCookieWeb site to showcase ([@CookieJarApps](https://github.com/CookieJarApps))\\n - [#6675](https://github.com/facebook/docusaurus/pull/6675) docs: mention that all official themes are TypeScript-covered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6673](https://github.com/facebook/docusaurus/pull/6673) docs: mention about blog date in front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6672](https://github.com/facebook/docusaurus/pull/6672) refactor(website): extract homepage data from UI; feature text updates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6670](https://github.com/facebook/docusaurus/pull/6670) docs: add CyberDrain Improved Partner Portal (CIPP) to showcase ([@homotechsual](https://github.com/homotechsual))\\n - [#6667](https://github.com/facebook/docusaurus/pull/6667) fix(website): make YT iframe responsive ([@lex111](https://github.com/lex111))\\n - [#6659](https://github.com/facebook/docusaurus/pull/6659) docs: add eli5 video to home page ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n - [#6633](https://github.com/facebook/docusaurus/pull/6633) docs: improve wording of using Markdown file paths ([@BigDataWriter](https://github.com/BigDataWriter))\\n - [#6624](https://github.com/facebook/docusaurus/pull/6624) docs: add Resoto & Some Engineering Inc. to showcase ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6611](https://github.com/facebook/docusaurus/pull/6611) docs: fix bad anchor link syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6591](https://github.com/facebook/docusaurus/pull/6591) docs: improve GitHub Actions example jobs ([@ebarojas](https://github.com/ebarojas))\\n - [#6426](https://github.com/facebook/docusaurus/pull/6426) feat(website): add Tweets section ([@yangshun](https://github.com/yangshun))\\n - [#6532](https://github.com/facebook/docusaurus/pull/6532) docs: add SAP Cloud SDK to showcase ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#6513](https://github.com/facebook/docusaurus/pull/6513) docs: clean up CONTRIBUTING ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6501](https://github.com/facebook/docusaurus/pull/6501) docs: add Cloudflare pages deployment guide ([@apidev234](https://github.com/apidev234))\\n - [#6499](https://github.com/facebook/docusaurus/pull/6499) docs: mention how env vars can be read ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6492](https://github.com/facebook/docusaurus/pull/6492) docs: mention where to find the sitemap ([@tamalweb](https://github.com/tamalweb))\\n - [#6491](https://github.com/facebook/docusaurus/pull/6491) docs: add developers.verida to showcase ([@nick-verida](https://github.com/nick-verida))\\n - [#6414](https://github.com/facebook/docusaurus/pull/6414) feat(website): new plugin to load CHANGELOG and render as blog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6404](https://github.com/facebook/docusaurus/pull/6404) docs: elaborate on Markdown asset linking; document pathname:// protocol ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6484](https://github.com/facebook/docusaurus/pull/6484) docs: remove mention that CDN resources are cached cross-domain ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6429](https://github.com/facebook/docusaurus/pull/6429) refactor: self-host KaTeX assets ([@pranabdas](https://github.com/pranabdas))\\n - [#6483](https://github.com/facebook/docusaurus/pull/6483) docs: mark a lot of website texts as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#6627](https://github.com/facebook/docusaurus/pull/6627) docs: fix presets documentation link ([@thedanielhanke](https://github.com/thedanielhanke))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6759](https://github.com/facebook/docusaurus/pull/6759) refactor(theme-classic): merge CSS files for Heading ([@slorber](https://github.com/slorber))\\n - [#6584](https://github.com/facebook/docusaurus/pull/6584) misc: enable jsx-key eslint rule ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6756](https://github.com/facebook/docusaurus/pull/6756) test: sort migration test FS mock calls ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6609](https://github.com/facebook/docusaurus/pull/6609) refactor(migrate): change internal methods\' parameter style ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6476](https://github.com/facebook/docusaurus/pull/6476) chore: fix Stylelint globs for editor support ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6744](https://github.com/facebook/docusaurus/pull/6744) fix(content-docs): properly display collocated social card image ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6742](https://github.com/facebook/docusaurus/pull/6742) refactor: improve client modules types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#6741](https://github.com/facebook/docusaurus/pull/6741) chore(module-type-aliases): add react as peer dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6658](https://github.com/facebook/docusaurus/pull/6658) refactor(module-aliases): remove react-helmet dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6726](https://github.com/facebook/docusaurus/pull/6726) misc: improve bug report template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6512](https://github.com/facebook/docusaurus/pull/6512) misc: configure linguist behavior to show better language stats ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6487](https://github.com/facebook/docusaurus/pull/6487) chore: fix codesandbox example link + mention npm publish recovery ([@slorber](https://github.com/slorber))\\n - [#6486](https://github.com/facebook/docusaurus/pull/6486) chore: update examples for beta.15 ([@slorber](https://github.com/slorber))\\n - [#6485](https://github.com/facebook/docusaurus/pull/6485) fix(website): bad translate tags without default translation ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6716](https://github.com/facebook/docusaurus/pull/6716) refactor: ensure lodash is default-imported ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-migrate`, `docusaurus`\\n - [#6661](https://github.com/facebook/docusaurus/pull/6661) refactor: convert CLI entry points to ESM; migrate create-docusaurus to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6629](https://github.com/facebook/docusaurus/pull/6629) refactor: move module declarations for non-route components to theme-classic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#6614](https://github.com/facebook/docusaurus/pull/6614) refactor: remove Babel plugins that are included in preset-env ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6605](https://github.com/facebook/docusaurus/pull/6605) chore: fix ESLint warnings, restrict export all syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6583](https://github.com/facebook/docusaurus/pull/6583) refactor(live-codeblock): migrate theme to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6524](https://github.com/facebook/docusaurus/pull/6524) refactor: enforce named capture groups; clean up regexes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#6521](https://github.com/facebook/docusaurus/pull/6521) refactor: mark all functions that import external modules as async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6514](https://github.com/facebook/docusaurus/pull/6514) chore: clean up ESLint config, enable a few rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6511](https://github.com/facebook/docusaurus/pull/6511) refactor(core): convert theme-fallback to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#6506](https://github.com/facebook/docusaurus/pull/6506) test: add test for readOutputHTMLFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-theme-common`\\n - [#6502](https://github.com/facebook/docusaurus/pull/6502) refactor: fix all eslint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus`\\n - [#6474](https://github.com/facebook/docusaurus/pull/6474) test: rename \'fixtures\' to \'**fixtures**\' ([@nschonni](https://github.com/nschonni))\\n\\n## :running: Performance\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6725](https://github.com/facebook/docusaurus/pull/6725) refactor: convert all fs methods to async ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 38\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Balthasar Hofer ([@lebalz](https://github.com/lebalz))\\n- Clement Demonchy ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- CodeDoctor ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n- Daniel Hanke ([@thedanielhanke](https://github.com/thedanielhanke))\\n- Daniel Kalevski ([@kalevski](https://github.com/kalevski))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Dmitry Vinnik | Meta ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Everardo J. Barojas M. ([@ebarojas](https://github.com/ebarojas))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Gaurish ([@apidev234](https://github.com/apidev234))\\n- Hong Yongmin ([@revi](https://github.com/revi))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kishan Gajera ([@kgajera](https://github.com/kgajera))\\n- Konstantin Tarkus ([@koistya](https://github.com/koistya))\\n- Matheus Ricardo Brunelli ([@mrbrunelli](https://github.com/mrbrunelli))\\n- Matthew Ailes ([@vidarc](https://github.com/vidarc))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Miles Johnson ([@milesj](https://github.com/milesj))\\n- Muhammad Redho Ayassa ([@redhoyasa](https://github.com/redhoyasa))\\n- Naseel Niyas ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Ruben Arushanyan ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Web ([@tamalweb](https://github.com/tamalweb))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@BigDataWriter](https://github.com/BigDataWriter)\\n- [@CookieJarApps](https://github.com/CookieJarApps)\\n- [@TheCatLady](https://github.com/TheCatLady)\\n- [@nick-verida](https://github.com/nick-verida)\\n- [@seyoon20087](https://github.com/seyoon20087)\\n- [@toto6038](https://github.com/toto6038)\\n- \uc774\uc815\ud658 ([@winterlood](https://github.com/winterlood))"},{"id":"/2.0.0-beta.15","metadata":{"permalink":"/changelog/2.0.0-beta.15","source":"@site/changelog/source/2.0.0-beta.15.md","title":"2.0.0-beta.15","description":"New Feature","date":"2022-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"\u4e45\u67d3 | JiuRan","alias":"1084350607","url":"https://github.com/1084350607","imageURL":"https://github.com/1084350607.png","key":"1084350607","page":null},{"name":"Abdelrahman Ahmed","alias":"abahmed","url":"https://github.com/abahmed","imageURL":"https://github.com/abahmed.png","key":"abahmed","page":null},{"name":"AJ Rice","alias":"ajrice6713","url":"https://github.com/ajrice6713","imageURL":"https://github.com/ajrice6713.png","key":"ajrice6713","page":null},{"name":"Alexandru Grigoras","alias":"alexgrigoras","url":"https://github.com/alexgrigoras","imageURL":"https://github.com/alexgrigoras.png","key":"alexgrigoras","page":null},{"name":"Filipe Guerra","alias":"alias-mac","url":"https://github.com/alias-mac","imageURL":"https://github.com/alias-mac.png","key":"alias-mac","page":null},{"name":"Amir M. Mohamadi","alias":"amir2mi","url":"https://github.com/amir2mi","imageURL":"https://github.com/amir2mi.png","key":"amir2mi","page":null},{"name":"Anthony McCaigue","alias":"antmcc49","url":"https://github.com/antmcc49","imageURL":"https://github.com/antmcc49.png","key":"antmcc49","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Brendan Nee","alias":"brendannee","url":"https://github.com/brendannee","imageURL":"https://github.com/brendannee.png","key":"brendannee","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"Davide Bianchi","alias":"davidebianchi","url":"https://github.com/davidebianchi","imageURL":"https://github.com/davidebianchi.png","key":"davidebianchi","page":null},{"name":"Edouard Bonlieu","alias":"edouardb","url":"https://github.com/edouardb","imageURL":"https://github.com/edouardb.png","key":"edouardb","page":null},{"name":"Feodor Fitsner","alias":"FeodorFitsner","url":"https://github.com/FeodorFitsner","imageURL":"https://github.com/FeodorFitsner.png","key":"FeodorFitsner","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Chen","alias":"HiChen404","url":"https://github.com/HiChen404","imageURL":"https://github.com/HiChen404.png","key":"HiChen404","page":null},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joseph","alias":"josephriosIO","url":"https://github.com/josephriosIO","imageURL":"https://github.com/josephriosIO.png","key":"josephriosIO","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},{"name":"Jake Witz","alias":"jwitz","url":"https://github.com/jwitz","imageURL":"https://github.com/jwitz.png","key":"jwitz","page":null},{"name":"Kaustubh Kulkarni","alias":"kaustubhk24","url":"https://github.com/kaustubhk24","imageURL":"https://github.com/kaustubhk24.png","key":"kaustubhk24","page":null},{"name":"kuizuo","alias":"kuizuo","url":"https://github.com/kuizuo","imageURL":"https://github.com/kuizuo.png","key":"kuizuo","page":null},{"name":"Minh Pham","alias":"lmpham1","url":"https://github.com/lmpham1","imageURL":"https://github.com/lmpham1.png","key":"lmpham1","page":null},{"name":"Lars Mikkelsen","alias":"ltm","url":"https://github.com/ltm","imageURL":"https://github.com/ltm.png","key":"ltm","page":null},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},{"name":"Sanjay Soundarajan","alias":"megasanjay","url":"https://github.com/megasanjay","imageURL":"https://github.com/megasanjay.png","key":"megasanjay","page":null},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},{"name":"\xd6mer Faruk APLAK","alias":"omeraplak","url":"https://github.com/omeraplak","imageURL":"https://github.com/omeraplak.png","key":"omeraplak","page":null},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Rishi Raj Jain","alias":"rishi-raj-jain","url":"https://github.com/rishi-raj-jain","imageURL":"https://github.com/rishi-raj-jain.png","key":"rishi-raj-jain","page":null},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},{"name":"ruanqizhen","alias":"ruanqizhen","url":"https://github.com/ruanqizhen","imageURL":"https://github.com/ruanqizhen.png","key":"ruanqizhen","page":null},{"name":"sgenoud","alias":"sgenoud","url":"https://github.com/sgenoud","imageURL":"https://github.com/sgenoud.png","key":"sgenoud","page":null},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tapan Chudasama","alias":"tapanchudasama","url":"https://github.com/tapanchudasama","imageURL":"https://github.com/tapanchudasama.png","key":"tapanchudasama","page":null},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"wood3n","alias":"wood3n","url":"https://github.com/wood3n","imageURL":"https://github.com/wood3n.png","key":"wood3n","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-01-26T20:00","authors":["1084350607","abahmed","ajrice6713","alexgrigoras","alias-mac","amir2mi","antmcc49","armano2","brendannee","cerkiewny","davidebianchi","edouardb","FeodorFitsner","gabrielcsapo","HiChen404","homotechsual","jeffreyaven","jodyheavener","johnnyreilly","josephriosIO","Josh-Cena","JoshuaKGoldberg","jwitz","kaustubhk24","kuizuo","lmpham1","ltm","mcallisto","megasanjay","MorookaKotaro","noomorph","nschonni","omeraplak","PatelN123","pranabdas","RDIL","rishi-raj-jain","roydukkey","ruanqizhen","sgenoud","shwaka","slorber","tapanchudasama","vaibhavshn","vandreleal","wood3n"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"nextItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6451](https://github.com/facebook/docusaurus/pull/6451) feat(content-docs): expose isCategoryIndex matcher to customize conventions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5782](https://github.com/facebook/docusaurus/pull/5782) feat(content-docs): displayed_sidebar front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6466](https://github.com/facebook/docusaurus/pull/6466) feat(theme-classic): add stable class for DocSidebarContainer ([@homotechsual](https://github.com/homotechsual))\\n - [#3811](https://github.com/facebook/docusaurus/pull/3811) feat(theme-classic): auto-collapse sibling categories in doc sidebar ([@josephriosIO](https://github.com/josephriosIO))\\n - [#6216](https://github.com/facebook/docusaurus/pull/6216) feat(theme-classic): usable CodeBlock outside markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6416](https://github.com/facebook/docusaurus/pull/6416) feat(content-blog): allow authors list to contain images only ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6415](https://github.com/facebook/docusaurus/pull/6415) feat(content-blog): allow disabling generating archive ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6245](https://github.com/facebook/docusaurus/pull/6245) feat(content-blog): parse date from middle of file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6371](https://github.com/facebook/docusaurus/pull/6371) feat(core, theme-classic): allow overriding htmlLang ([@noomorph](https://github.com/noomorph))\\n- `docusaurus-mdx-loader`\\n - [#6323](https://github.com/facebook/docusaurus/pull/6323) feat(mdx-loader): preserve hash in image src; support GH themed images ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6139](https://github.com/facebook/docusaurus/pull/6139) feat(theme-classic): new navbar item linking to a sidebar ([@lmpham1](https://github.com/lmpham1))\\n - [#6239](https://github.com/facebook/docusaurus/pull/6239) feat(content-docs): allow SEO metadata for category index pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-translations`\\n - [#6173](https://github.com/facebook/docusaurus/pull/6173) feat(ideal-image): allow translating status messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#6155](https://github.com/facebook/docusaurus/pull/6155) feat(ideal-image): new option disableInDev ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6169](https://github.com/facebook/docusaurus/pull/6169) feat(theme-translations): add Italian translations ([@mcallisto](https://github.com/mcallisto))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#6166](https://github.com/facebook/docusaurus/pull/6166) feat: async plugin creator functions ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6165](https://github.com/facebook/docusaurus/pull/6165) feat(core): async docusaurus.config.js creator function ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#6454](https://github.com/facebook/docusaurus/pull/6454) fix(content-blog): generate feed by reading build output ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6468](https://github.com/facebook/docusaurus/pull/6468) fix(init): cd to correct path when installing ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-mdx-loader`\\n - [#4827](https://github.com/facebook/docusaurus/pull/4827) fix: allow links to JSON in .md files to be transformed as asset links ([@antmcc49](https://github.com/antmcc49))\\n- `docusaurus-plugin-content-docs`\\n - [#6435](https://github.com/facebook/docusaurus/pull/6435) fix(content-docs): make getActivePlugin match plugin paths more exactly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6310](https://github.com/facebook/docusaurus/pull/6310) fix: highlight appropriate navItem when browsing generated category index ([@tapanchudasama](https://github.com/tapanchudasama))\\n - [#6202](https://github.com/facebook/docusaurus/pull/6202) fix(content-docs): quotify path when retrieving git history ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6424](https://github.com/facebook/docusaurus/pull/6424) fix(core): fix css url(\\"image.png\\"), use css-loader v6 with esModules: false ([@slorber](https://github.com/slorber))\\n - [#6378](https://github.com/facebook/docusaurus/pull/6378) fix(core): do not coerce webpack warning to string ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6197](https://github.com/facebook/docusaurus/pull/6197) fix(cli): quotify temp path in deploy command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6168](https://github.com/facebook/docusaurus/pull/6168) fix(core): update webpack-dev-server + fix deprecation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-utils`\\n - [#6384](https://github.com/facebook/docusaurus/pull/6384) fix(logger): properly stringify objects for logging ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6338](https://github.com/facebook/docusaurus/pull/6338) fix(core): error boundary should allow no children ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6314](https://github.com/facebook/docusaurus/pull/6314) fix(theme-classic): fix mobile version dropdown label with only one version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6288](https://github.com/facebook/docusaurus/pull/6288) fix(theme-classic): add missing role=region to SkipToContent ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n - [#6213](https://github.com/facebook/docusaurus/pull/6213) refactor(theme-classic): extract common PaginatorNavLink component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6177](https://github.com/facebook/docusaurus/pull/6177) fix(theme-classic): make React elements in pre render correctly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6300](https://github.com/facebook/docusaurus/pull/6300) refactor: move exported type definitions to declaration file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6276](https://github.com/facebook/docusaurus/pull/6276) fix(migrate): migration CLI should correctly migrate gtag options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6244](https://github.com/facebook/docusaurus/pull/6244) fix(content-blog): always convert front matter date as UTC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#6190](https://github.com/facebook/docusaurus/pull/6190) fix(utils): properly escape Windows paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`\\n - [#6469](https://github.com/facebook/docusaurus/pull/6469) fix(module-type-aliases): fix type def for translate params ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#6443](https://github.com/facebook/docusaurus/pull/6443) refactor(mdx-loader): use vfile.path to access Markdown file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6427](https://github.com/facebook/docusaurus/pull/6427) feat(theme-classic): add aria-current to sidebar category link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6391](https://github.com/facebook/docusaurus/pull/6391) refactor(theme-classic): add comments to Prism setup; minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6240](https://github.com/facebook/docusaurus/pull/6240) refactor(theme-classic): use front matter from metadata for BlogPostPage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6419](https://github.com/facebook/docusaurus/pull/6419) feat(core): warn users about hand-modifying generated files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6405](https://github.com/facebook/docusaurus/pull/6405) feat(core): check imported API name when extracting translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6291](https://github.com/facebook/docusaurus/pull/6291) feat(core): improve error message for BrowserOnly; better docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6368](https://github.com/facebook/docusaurus/pull/6368) fix(create-docusaurus): add useBaseUrl for image URLs ([@alias-mac](https://github.com/alias-mac))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#6400](https://github.com/facebook/docusaurus/pull/6400) feat(content-pages): front matter validation, include front matter in metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6339](https://github.com/facebook/docusaurus/pull/6339) feat(mdx-loader): read image dimensions when processing Markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6189](https://github.com/facebook/docusaurus/pull/6189) feat(content-blog): include front matter in loaded content metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6317](https://github.com/facebook/docusaurus/pull/6317) feat(theme-classic): autoscroll TOC with active link ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6303](https://github.com/facebook/docusaurus/pull/6303) test(utils, mdx-loader, core): improve coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#6284](https://github.com/facebook/docusaurus/pull/6284) fix(preset-classic): throw if preset finds GA options in theme config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#6186](https://github.com/facebook/docusaurus/pull/6186) refactor: print trailing new line when outputting JSON ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6296](https://github.com/facebook/docusaurus/pull/6296) docs: add advanced guides ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6459](https://github.com/facebook/docusaurus/pull/6459) docs: add replicad to showcase ([@sgenoud](https://github.com/sgenoud))\\n - [#6334](https://github.com/facebook/docusaurus/pull/6334) docs: 2021 recap blog post ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6458](https://github.com/facebook/docusaurus/pull/6458) docs: add Kuizuo\'s Personal Website to showcase ([@kuizuo](https://github.com/kuizuo))\\n - [#6431](https://github.com/facebook/docusaurus/pull/6431) docs: add Koyeb as a deployment option ([@edouardb](https://github.com/edouardb))\\n - [#6455](https://github.com/facebook/docusaurus/pull/6455) docs: add Sass Fairy to showcase ([@roydukkey](https://github.com/roydukkey))\\n - [#6453](https://github.com/facebook/docusaurus/pull/6453) docs: document embedding generated index in doc page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6450](https://github.com/facebook/docusaurus/pull/6450) docs: split sidebar documentation into sections ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6449](https://github.com/facebook/docusaurus/pull/6449) docs: multiple doc improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6448](https://github.com/facebook/docusaurus/pull/6448) fix(website): update colors correctly when palette is only customized in one color mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6385](https://github.com/facebook/docusaurus/pull/6385) chore: add height/width for front page images ([@nschonni](https://github.com/nschonni))\\n - [#6445](https://github.com/facebook/docusaurus/pull/6445) docs: update showcase data of InfraQL ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#6433](https://github.com/facebook/docusaurus/pull/6433) docs: add kube-green to showcase ([@davidebianchi](https://github.com/davidebianchi))\\n - [#6428](https://github.com/facebook/docusaurus/pull/6428) docs: elaborate on i18n tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6422](https://github.com/facebook/docusaurus/pull/6422) docs: add 404Lab wiki to showcase ([@HiChen404](https://github.com/HiChen404))\\n - [#6420](https://github.com/facebook/docusaurus/pull/6420) fix(website): restore some site CSS in light mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6410](https://github.com/facebook/docusaurus/pull/6410) docs: add SODA for SPARC to showcase ([@megasanjay](https://github.com/megasanjay))\\n - [#6417](https://github.com/facebook/docusaurus/pull/6417) docs: fix accessibility of search modal ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6406](https://github.com/facebook/docusaurus/pull/6406) docs(i18n): add docs for htmlLang config ([@noomorph](https://github.com/noomorph))\\n - [#6393](https://github.com/facebook/docusaurus/pull/6393) docs: update Algolia docs for new DocSearch infra ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6383](https://github.com/facebook/docusaurus/pull/6383) docs: elaborate on different CSS class names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6348](https://github.com/facebook/docusaurus/pull/6348) docs: add KaustubhK24\'s site to showcase ([@kaustubhk24](https://github.com/kaustubhk24))\\n - [#6333](https://github.com/facebook/docusaurus/pull/6333) feat(website): search in showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6344](https://github.com/facebook/docusaurus/pull/6344) fix(website): make ColorGenerator functional ([@shwaka](https://github.com/shwaka))\\n - [#6340](https://github.com/facebook/docusaurus/pull/6340) docs: minor fix in the sample config for ESM ([@pranabdas](https://github.com/pranabdas))\\n - [#6336](https://github.com/facebook/docusaurus/pull/6336) docs: make upgrade guide always show the latest version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6320](https://github.com/facebook/docusaurus/pull/6320) chore: upgrade rehype-katex with ESM support, update docs ([@pranabdas](https://github.com/pranabdas))\\n - [#6335](https://github.com/facebook/docusaurus/pull/6335) docs: add Pglet website to showcase ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n - [#6327](https://github.com/facebook/docusaurus/pull/6327) docs: remove typo bracket ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#6316](https://github.com/facebook/docusaurus/pull/6316) docs: add bandwidth.com to showcase ([@ajrice6713](https://github.com/ajrice6713))\\n - [#6313](https://github.com/facebook/docusaurus/pull/6313) docs: add Refine site to showcase ([@omeraplak](https://github.com/omeraplak))\\n - [#6318](https://github.com/facebook/docusaurus/pull/6318) fix(website): various anchor link fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6308](https://github.com/facebook/docusaurus/pull/6308) fix(website): wrap details in mdx-code-block ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6307](https://github.com/facebook/docusaurus/pull/6307) docs: document MD and JSX interoperability issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6299](https://github.com/facebook/docusaurus/pull/6299) docs: add icodex to showcase ([@wood3n](https://github.com/wood3n))\\n - [#6297](https://github.com/facebook/docusaurus/pull/6297) docs: mention setup in monorepo ([@PatelN123](https://github.com/PatelN123))\\n - [#6293](https://github.com/facebook/docusaurus/pull/6293) docs: remove GraphQL mesh from showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6231](https://github.com/facebook/docusaurus/pull/6231) docs: update showcase images; remove GraphQL Code Generator site ([@PatelN123](https://github.com/PatelN123))\\n - [#6285](https://github.com/facebook/docusaurus/pull/6285) refactor(website): further optimize showcase images ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6281](https://github.com/facebook/docusaurus/pull/6281) docs: Add kwatch to showcase ([@abahmed](https://github.com/abahmed))\\n - [#6280](https://github.com/facebook/docusaurus/pull/6280) docs: elaborate on doc versioning ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6043](https://github.com/facebook/docusaurus/pull/6043) fix(website): resize showcase images, tighten CI check ([@armano2](https://github.com/armano2))\\n - [#6274](https://github.com/facebook/docusaurus/pull/6274) docs: add dyte docs to showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6278](https://github.com/facebook/docusaurus/pull/6278) docs: add Khyron Realm to showcase ([@alexgrigoras](https://github.com/alexgrigoras))\\n - [#6271](https://github.com/facebook/docusaurus/pull/6271) docs: add FlatifyCSS to showcase ([@amir2mi](https://github.com/amir2mi))\\n - [#6275](https://github.com/facebook/docusaurus/pull/6275) fix(website): fix config-tabs breaking after translation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6269](https://github.com/facebook/docusaurus/pull/6269) docs: add Ionic to showcase ([@ltm](https://github.com/ltm))\\n - [#6272](https://github.com/facebook/docusaurus/pull/6272) docs: make tsconfig work OOTB in typescript guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6265](https://github.com/facebook/docusaurus/pull/6265) docs: add Eric JiuRan\'s blog to showcase ([@1084350607](https://github.com/1084350607))\\n - [#6242](https://github.com/facebook/docusaurus/pull/6242) docs(showcase): update oxidizer website url ([@vandreleal](https://github.com/vandreleal))\\n - [#6226](https://github.com/facebook/docusaurus/pull/6226) docs: update showcase data for digital support notes ([@PatelN123](https://github.com/PatelN123))\\n - [#6224](https://github.com/facebook/docusaurus/pull/6224) docs: add TalentBrick to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6223](https://github.com/facebook/docusaurus/pull/6223) docs: normalize CodeBlock highlighting ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6214](https://github.com/facebook/docusaurus/pull/6214) feat(website): improve prism themes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6215](https://github.com/facebook/docusaurus/pull/6215) docs: use BrowserWindow for Markdown demos ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6193](https://github.com/facebook/docusaurus/pull/6193) docs: normalize plugin API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6209](https://github.com/facebook/docusaurus/pull/6209) docs: elaborate on static asset resolution ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6207](https://github.com/facebook/docusaurus/pull/6207) docs: add default value for BrowserWindow URL field ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6206](https://github.com/facebook/docusaurus/pull/6206) docs: fix highlighting of YAML front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6191](https://github.com/facebook/docusaurus/pull/6191) docs: fix react live scope button color in dark mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6188](https://github.com/facebook/docusaurus/pull/6188) docs: add Layer0 to deployment guide ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n - [#6184](https://github.com/facebook/docusaurus/pull/6184) docs: remove mention of \'UA-\' in gtag ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#6181](https://github.com/facebook/docusaurus/pull/6181) docs: add GTFS-to-HTML to showcase ([@brendannee](https://github.com/brendannee))\\n - [#6178](https://github.com/facebook/docusaurus/pull/6178) docs: add Digital Support Notes to showcase ([@PatelN123](https://github.com/PatelN123))\\n - [#6170](https://github.com/facebook/docusaurus/pull/6170) docs: add LabVIEW coding experience to showcase ([@ruanqizhen](https://github.com/ruanqizhen))\\n - [#6164](https://github.com/facebook/docusaurus/pull/6164) docs: fix import module name of theme/Admonition ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6158](https://github.com/facebook/docusaurus/pull/6158) docs: add Astronomer to showcase ([@jwitz](https://github.com/jwitz))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6187](https://github.com/facebook/docusaurus/pull/6187) docs: make installation guide more beginner-friendly ([@PatelN123](https://github.com/PatelN123))\\n- `docusaurus-utils`\\n - [#6204](https://github.com/facebook/docusaurus/pull/6204) docs: recommend highlighting with comments than number range ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6203](https://github.com/facebook/docusaurus/pull/6203) docs: audit grammar issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :house: Internal\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6456](https://github.com/facebook/docusaurus/pull/6456) chore: add cSpell for spell checking ([@nschonni](https://github.com/nschonni))\\n- Other\\n - [#6444](https://github.com/facebook/docusaurus/pull/6444) misc: update nvmrc to 14.17.0 to meet dependency requirements ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6441](https://github.com/facebook/docusaurus/pull/6441) misc: fix stylelint erroring when lint-staged passed ignored file ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6421](https://github.com/facebook/docusaurus/pull/6421) chore: fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6381](https://github.com/facebook/docusaurus/pull/6381) chore(website): set cache-control for static assets ([@nschonni](https://github.com/nschonni))\\n - [#6364](https://github.com/facebook/docusaurus/pull/6364) chore: remove Intl polyfills for Jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6325](https://github.com/facebook/docusaurus/pull/6325) chore: add Dependabot for dependency updates ([@nschonni](https://github.com/nschonni))\\n - [#6328](https://github.com/facebook/docusaurus/pull/6328) chore(ci): upgrade actions/github-script to v5 ([@nschonni](https://github.com/nschonni))\\n - [#6332](https://github.com/facebook/docusaurus/pull/6332) chore(deps): bump follow-redirects from 1.14.5 to 1.14.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#6326](https://github.com/facebook/docusaurus/pull/6326) misc(ci): remove redundant \\"CI: true\\" env ([@nschonni](https://github.com/nschonni))\\n - [#6304](https://github.com/facebook/docusaurus/pull/6304) chore: upgrade to Husky 7 ([@nschonni](https://github.com/nschonni))\\n - [#6222](https://github.com/facebook/docusaurus/pull/6222) test: ensure consistent CSS ordering ([@slorber](https://github.com/slorber))\\n - [#6159](https://github.com/facebook/docusaurus/pull/6159) docs: remove useless comment ([@slorber](https://github.com/slorber))\\n - [#6148](https://github.com/facebook/docusaurus/pull/6148) chore(examples): update examples to 2.0.0-beta.14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6442](https://github.com/facebook/docusaurus/pull/6442) chore: enable stylelint standard config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#6440](https://github.com/facebook/docusaurus/pull/6440) chore: remove some unused dependencies from package.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6436](https://github.com/facebook/docusaurus/pull/6436) refactor(theme-classic): render BlogPostItem as one JSX element ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#6413](https://github.com/facebook/docusaurus/pull/6413) fix(content-pages): declare hide_table_of_contents as boolean ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6399](https://github.com/facebook/docusaurus/pull/6399) refactor: clean up TODO comments ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus`\\n - [#6387](https://github.com/facebook/docusaurus/pull/6387) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6380](https://github.com/facebook/docusaurus/pull/6380) chore: enable a few fixable ESLint rules ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#6377](https://github.com/facebook/docusaurus/pull/6377) refactor: use findAsyncSequential in a few places ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6375](https://github.com/facebook/docusaurus/pull/6375) chore: enable eslint-plugin-jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6373](https://github.com/facebook/docusaurus/pull/6373) chore: enable react/jsx-closing-bracket-location ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-classic`, `stylelint-copyright`\\n - [#6374](https://github.com/facebook/docusaurus/pull/6374) feat(stylelint-copyright): autofix, stricter config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`\\n - [#6372](https://github.com/facebook/docusaurus/pull/6372) chore: add baseline stylelint rules ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#6369](https://github.com/facebook/docusaurus/pull/6369) chore: upgrade lint-staged and globs ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6341](https://github.com/facebook/docusaurus/pull/6341) chore: regenerate yarn.lock ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#6324](https://github.com/facebook/docusaurus/pull/6324) chore: minor typo cleanup ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6286](https://github.com/facebook/docusaurus/pull/6286) misc: convert all internal scripts to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#6287](https://github.com/facebook/docusaurus/pull/6287) refactor: new @docusaurus/plugin-content-docs/client interface ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6279](https://github.com/facebook/docusaurus/pull/6279) refactor(core): use native types from webpack-dev-server ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-content-docs`\\n - [#6277](https://github.com/facebook/docusaurus/pull/6277) refactor(content-docs): make readVersionsMetadata async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6237](https://github.com/facebook/docusaurus/pull/6237) refactor(core): convert serverEntry.js to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6230](https://github.com/facebook/docusaurus/pull/6230) refactor: enforce type import specifiers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-utils`, `docusaurus`\\n - [#6229](https://github.com/facebook/docusaurus/pull/6229) refactor(utils): reorganize functions; move authors file resolution to utils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6225](https://github.com/facebook/docusaurus/pull/6225) refactor(theme-translations): improve typing for update script ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6174](https://github.com/facebook/docusaurus/pull/6174) misc(theme-translations): multiple improvements to the update CLI ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 46\\n\\n- AJ Rice ([@ajrice6713](https://github.com/ajrice6713))\\n- Abdelrahman Ahmed ([@abahmed](https://github.com/abahmed))\\n- Alexandru Grigoras ([@alexgrigoras](https://github.com/alexgrigoras))\\n- Amir M. Mohamadi ([@amir2mi](https://github.com/amir2mi))\\n- Anthony McCaigue ([@antmcc49](https://github.com/antmcc49))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brendan Nee ([@brendannee](https://github.com/brendannee))\\n- Chen ([@HiChen404](https://github.com/HiChen404))\\n- Davide Bianchi ([@davidebianchi](https://github.com/davidebianchi))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Edouard Bonlieu ([@edouardb](https://github.com/edouardb))\\n- Feodor Fitsner ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n- Filipe Guerra ([@alias-mac](https://github.com/alias-mac))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Jake Witz ([@jwitz](https://github.com/jwitz))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joseph ([@josephriosIO](https://github.com/josephriosIO))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kaustubh Kulkarni ([@kaustubhk24](https://github.com/kaustubhk24))\\n- Lars Mikkelsen ([@ltm](https://github.com/ltm))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Minh Pham ([@lmpham1](https://github.com/lmpham1))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Rishi Raj Jain ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n- Sanjay Soundarajan ([@megasanjay](https://github.com/megasanjay))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tapan Chudasama ([@tapanchudasama](https://github.com/tapanchudasama))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@ruanqizhen](https://github.com/ruanqizhen)\\n- [@wood3n](https://github.com/wood3n)\\n- kuizuo ([@kuizuo](https://github.com/kuizuo))\\n- sgenoud ([@sgenoud](https://github.com/sgenoud))\\n- trent ([@roydukkey](https://github.com/roydukkey))\\n- \xd6mer Faruk APLAK ([@omeraplak](https://github.com/omeraplak))\\n- \u4e45\u67d3 | JiuRan ([@1084350607](https://github.com/1084350607))"},{"id":"/2.0.0-beta.14","metadata":{"permalink":"/changelog/2.0.0-beta.14","source":"@site/changelog/source/2.0.0-beta.14.md","title":"2.0.0-beta.14","description":"New Feature","date":"2021-12-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"6543","alias":"6543","url":"https://github.com/6543","imageURL":"https://github.com/6543.png","key":"6543","page":null},{"name":"Christopher Klint","alias":"christopherklint97","url":"https://github.com/christopherklint97","imageURL":"https://github.com/christopherklint97.png","key":"christopherklint97","page":null},{"name":"colton","alias":"cmpadden","url":"https://github.com/cmpadden","imageURL":"https://github.com/cmpadden.png","key":"cmpadden","page":null},{"name":"Drylozu","alias":"Drylozu","url":"https://github.com/Drylozu","imageURL":"https://github.com/Drylozu.png","key":"Drylozu","page":null},{"name":"Jeroen Claassens","alias":"favna","url":"https://github.com/favna","imageURL":"https://github.com/favna.png","key":"favna","page":null},{"name":"Harsh Mishra","alias":"HarshCasper","url":"https://github.com/HarshCasper","imageURL":"https://github.com/HarshCasper.png","key":"HarshCasper","page":null},{"name":"Himanshu","alias":"himanshu007-creator","url":"https://github.com/himanshu007-creator","imageURL":"https://github.com/himanshu007-creator.png","key":"himanshu007-creator","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Kristoffer K.","alias":"merceyz","url":"https://github.com/merceyz","imageURL":"https://github.com/merceyz.png","key":"merceyz","page":null},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},{"name":"\u4e0d\u90d1","alias":"notzheng","url":"https://github.com/notzheng","imageURL":"https://github.com/notzheng.png","key":"notzheng","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ziv","alias":"wewoor","url":"https://github.com/wewoor","imageURL":"https://github.com/wewoor.png","key":"wewoor","page":null},{"name":"Shubhendra Singh Chauhan","alias":"withshubh","url":"https://github.com/withshubh","imageURL":"https://github.com/withshubh.png","key":"withshubh","page":null},{"name":"Wout Vandesompele","alias":"wowtvds","url":"https://github.com/wowtvds","imageURL":"https://github.com/wowtvds.png","key":"wowtvds","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-21T20:00","authors":["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"nextItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6132](https://github.com/facebook/docusaurus/pull/6132) feat(theme-classic): new configuration syntax for a simple footer ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6125](https://github.com/facebook/docusaurus/pull/6125) feat(theme-common): stable classname for code blocks ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5848](https://github.com/facebook/docusaurus/pull/5848) feat(theme-classic): standalone Admonition component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6082](https://github.com/facebook/docusaurus/pull/6082) feat(theme-classic): allow passing additional attributes to tab headings ([@Drylozu](https://github.com/Drylozu))\\n- `docusaurus-plugin-content-blog`\\n - [#6126](https://github.com/facebook/docusaurus/pull/6126) feat(content-blog): support json feed ([@notzheng](https://github.com/notzheng))\\n- `docusaurus`\\n - [#6107](https://github.com/facebook/docusaurus/pull/6107) feat(core): allow plugins to customize/override Webpack devServer config ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#6146](https://github.com/facebook/docusaurus/pull/6146) fix(migrate): do not modify non-MD files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6128](https://github.com/facebook/docusaurus/pull/6128) fix: do not use aria-hidden in heading anchor links ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6124](https://github.com/facebook/docusaurus/pull/6124) fix(content-docs): restore behavior when pagination front matter is null ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6085](https://github.com/facebook/docusaurus/pull/6085) fix(content-docs): getMainDocId should return doc with both versioned or unversioned id ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#6097](https://github.com/facebook/docusaurus/pull/6097) fix: declare missing dependencies ([@merceyz](https://github.com/merceyz))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `lqip-loader`\\n - [#6094](https://github.com/facebook/docusaurus/pull/6094) fix: add missing dependencies on tslib ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6088](https://github.com/facebook/docusaurus/pull/6088) fix(theme-translations): publish theme-translation lib, including typedef ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6053](https://github.com/facebook/docusaurus/pull/6053) feat(theme-classic): allow stylizing doc paginator arrows ([@noomorph](https://github.com/noomorph))\\n - [#6121](https://github.com/facebook/docusaurus/pull/6121) fix(theme-classic): add outline to focused code blocks ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6118](https://github.com/facebook/docusaurus/pull/6118) refactor: remove some useless code ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#5994](https://github.com/facebook/docusaurus/pull/5994) refactor: unify log format with new logger utility ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6119](https://github.com/facebook/docusaurus/pull/6119) fix(create-docusaurus): make initial editUrl functional ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6095](https://github.com/facebook/docusaurus/pull/6095) fix(create-docusaurus): give a clearer message when installation failed ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#6142](https://github.com/facebook/docusaurus/pull/6142) docs: normalize usage of placeholders ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5918](https://github.com/facebook/docusaurus/pull/5918) docs: refactor & refine lifecycle API docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6138](https://github.com/facebook/docusaurus/pull/6138) docs: add Smart Docs to showcase ([@wowtvds](https://github.com/wowtvds))\\n- [#6137](https://github.com/facebook/docusaurus/pull/6137) docs: add ToolJet to showcase ([@withshubh](https://github.com/withshubh))\\n- [#6141](https://github.com/facebook/docusaurus/pull/6141) docs: add WoodpeckerCI to showcase ([@6543](https://github.com/6543))\\n- [#6135](https://github.com/facebook/docusaurus/pull/6135) docs: mention admonition quirks with Prettier ([@yangshun](https://github.com/yangshun))\\n- [#6131](https://github.com/facebook/docusaurus/pull/6131) docs: elaborate on \\"docs-only\\" and \\"blog-only\\" ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- [#6134](https://github.com/facebook/docusaurus/pull/6134) docs: update link to init template README.md ([@cmpadden](https://github.com/cmpadden))\\n- [#6130](https://github.com/facebook/docusaurus/pull/6130) docs: refactor docs sidebar doc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6129](https://github.com/facebook/docusaurus/pull/6129) docs: refactor styling/theming docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6112](https://github.com/facebook/docusaurus/pull/6112) docs: mention that SEO through front matter is better than head tag ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6120](https://github.com/facebook/docusaurus/pull/6120) refactor(website): make deploy preview open next version docs by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6111](https://github.com/facebook/docusaurus/pull/6111) docs: add Molecule website to showcase ([@wewoor](https://github.com/wewoor))\\n- [#6089](https://github.com/facebook/docusaurus/pull/6089) docs: add Enarx website to showcase ([@HarshCasper](https://github.com/HarshCasper))\\n- [#6090](https://github.com/facebook/docusaurus/pull/6090) docs: add sapphire to showcase ([@favna](https://github.com/favna))\\n- [#6091](https://github.com/facebook/docusaurus/pull/6091) docs(showcase): \\"much more pages\\" => \\"many more pages\\" ([@favna](https://github.com/favna))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6144](https://github.com/facebook/docusaurus/pull/6144) fix(theme-classic): fix translation when footer has no links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6143](https://github.com/facebook/docusaurus/pull/6143) test: fix async tests resolved in random order ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6123](https://github.com/facebook/docusaurus/pull/6123) test: use snapshots for sidebar tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6122](https://github.com/facebook/docusaurus/pull/6122) fix(website): fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6080](https://github.com/facebook/docusaurus/pull/6080) chore: add npm and pnpm to E2E tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6092](https://github.com/facebook/docusaurus/pull/6092) misc: ignore some files during npm publish ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 17\\n\\n- 6543 ([@6543](https://github.com/6543))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Christopher Klint ([@christopherklint97](https://github.com/christopherklint97))\\n- Harsh Mishra ([@HarshCasper](https://github.com/HarshCasper))\\n- Himanshu ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- Jeroen Claassens ([@favna](https://github.com/favna))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kristoffer K. ([@merceyz](https://github.com/merceyz))\\n- Shubhendra Singh Chauhan ([@withshubh](https://github.com/withshubh))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Wout Vandesompele ([@wowtvds](https://github.com/wowtvds))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- Ziv ([@wewoor](https://github.com/wewoor))\\n- [@Drylozu](https://github.com/Drylozu)\\n- colton ([@cmpadden](https://github.com/cmpadden))\\n- \u4e0d\u90d1 ([@notzheng](https://github.com/notzheng))"},{"id":"/2.0.0-beta.13","metadata":{"permalink":"/changelog/2.0.0-beta.13","source":"@site/changelog/source/2.0.0-beta.13.md","title":"2.0.0-beta.13","description":"Good npm publish, same code as beta.11","date":"2021-12-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"nextItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nGood npm publish, same code as beta.11"},{"id":"/2.0.0-beta.12","metadata":{"permalink":"/changelog/2.0.0-beta.12","source":"@site/changelog/source/2.0.0-beta.12.md","title":"2.0.0-beta.12","description":"Bad npm publish, use beta.13 instead","date":"2021-12-10T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"nextItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, use beta.13 instead"},{"id":"/2.0.0-beta.11","metadata":{"permalink":"/changelog/2.0.0-beta.11","source":"@site/changelog/source/2.0.0-beta.11.md","title":"2.0.0-beta.11","description":"Bug Fix","date":"2021-12-10T18:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T18:00","authors":["pranabdas","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"nextItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6078](https://github.com/facebook/docusaurus/pull/6078) fix: move docusaurus core back to hard dependencies ([@pranabdas](https://github.com/pranabdas))\\n\\n## Committers: 2\\n\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.10","metadata":{"permalink":"/changelog/2.0.0-beta.10","source":"@site/changelog/source/2.0.0-beta.10.md","title":"2.0.0-beta.10","description":"New Feature","date":"2021-12-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afshin Mehrabani","alias":"afshinm","url":"https://github.com/afshinm","imageURL":"https://github.com/afshinm.png","key":"afshinm","page":null},{"name":"Rohit Agrawal","alias":"agrawal-rohit","url":"https://github.com/agrawal-rohit","imageURL":"https://github.com/agrawal-rohit.png","key":"agrawal-rohit","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Christophe Chaudier","alias":"cchaudier","url":"https://github.com/cchaudier","imageURL":"https://github.com/cchaudier.png","key":"cchaudier","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"chima ilo","alias":"chimailo","url":"https://github.com/chimailo","imageURL":"https://github.com/chimailo.png","key":"chimailo","page":null},{"name":"Shoaib Sajid","alias":"dexbiobot","url":"https://github.com/dexbiobot","imageURL":"https://github.com/dexbiobot.png","key":"dexbiobot","page":null},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},{"name":"Fernando Maia","alias":"fsmaia","url":"https://github.com/fsmaia","imageURL":"https://github.com/fsmaia.png","key":"fsmaia","page":null},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},{"name":"Hemant Sachdeva","alias":"HemantSachdeva","url":"https://github.com/HemantSachdeva","imageURL":"https://github.com/HemantSachdeva.png","key":"HemantSachdeva","page":null},{"name":"Jarar","alias":"JararvisQ","url":"https://github.com/JararvisQ","imageURL":"https://github.com/JararvisQ.png","key":"JararvisQ","page":null},{"name":"Jeff Shillitto","alias":"jeffski","url":"https://github.com/jeffski","imageURL":"https://github.com/jeffski.png","key":"jeffski","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Matej Jellus","alias":"juffalow","url":"https://github.com/juffalow","imageURL":"https://github.com/juffalow.png","key":"juffalow","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Konstantin Popov","alias":"KonstHardy","url":"https://github.com/KonstHardy","imageURL":"https://github.com/KonstHardy.png","key":"KonstHardy","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Ludovico Fischer","alias":"ludofischer","url":"https://github.com/ludofischer","imageURL":"https://github.com/ludofischer.png","key":"ludofischer","page":null},{"name":"Martin \u0160o\u0161i\u0107","alias":"Martinsos","url":"https://github.com/Martinsos","imageURL":"https://github.com/Martinsos.png","key":"Martinsos","page":null},{"name":"Matthijs Groen","alias":"matthijsgroen","url":"https://github.com/matthijsgroen","imageURL":"https://github.com/matthijsgroen.png","key":"matthijsgroen","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"Molly White","alias":"molly","url":"https://github.com/molly","imageURL":"https://github.com/molly.png","key":"molly","page":null},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},{"name":"pal-sig","alias":"pal-sig","url":"https://github.com/pal-sig","imageURL":"https://github.com/pal-sig.png","key":"pal-sig","page":null},{"name":"Patitotective","alias":"Patitotective","url":"https://github.com/Patitotective","imageURL":"https://github.com/Patitotective.png","key":"Patitotective","page":null},{"name":"Patrik M\xe4siar","alias":"patrikmasiar","url":"https://github.com/patrikmasiar","imageURL":"https://github.com/patrikmasiar.png","key":"patrikmasiar","page":null},{"name":"Paul Biggar","alias":"pbiggar","url":"https://github.com/pbiggar","imageURL":"https://github.com/pbiggar.png","key":"pbiggar","page":null},{"name":"Brennan Kinney","alias":"polarathene","url":"https://github.com/polarathene","imageURL":"https://github.com/polarathene.png","key":"polarathene","page":null},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},{"name":"Robin M\xe9tral","alias":"robinmetral","url":"https://github.com/robinmetral","imageURL":"https://github.com/robinmetral.png","key":"robinmetral","page":null},{"name":"Ronny Roeller","alias":"ronnyroeller","url":"https://github.com/ronnyroeller","imageURL":"https://github.com/ronnyroeller.png","key":"ronnyroeller","page":null},{"name":"Ivan Boothe","alias":"rootwork","url":"https://github.com/rootwork","imageURL":"https://github.com/rootwork.png","key":"rootwork","page":null},{"name":"Rey","alias":"rsapkf","url":"https://github.com/rsapkf","imageURL":"https://github.com/rsapkf.png","key":"rsapkf","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Can Olcer","alias":"shafy","url":"https://github.com/shafy","imageURL":"https://github.com/shafy.png","key":"shafy","page":null},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},{"name":"Sharon Koech","alias":"skoech","url":"https://github.com/skoech","imageURL":"https://github.com/skoech.png","key":"skoech","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Soham Shah","alias":"sohamsshah","url":"https://github.com/sohamsshah","imageURL":"https://github.com/sohamsshah.png","key":"sohamsshah","page":null},{"name":"Paden Clayton","alias":"spyke01","url":"https://github.com/spyke01","imageURL":"https://github.com/spyke01.png","key":"spyke01","page":null},{"name":"Stan Kocken","alias":"StanKocken","url":"https://github.com/StanKocken","imageURL":"https://github.com/StanKocken.png","key":"StanKocken","page":null},{"name":"Swalah Amani","alias":"swalahamani","url":"https://github.com/swalahamani","imageURL":"https://github.com/swalahamani.png","key":"swalahamani","page":null},{"name":"Swapnil M Mane","alias":"swapnilmmane","url":"https://github.com/swapnilmmane","imageURL":"https://github.com/swapnilmmane.png","key":"swapnilmmane","page":null},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-09T20:00","authors":["afshinm","agrawal-rohit","armano2","cchaudier","cerkiewny","chimailo","dexbiobot","dsmmcken","duanwilliam","fishmandev","fsmaia","hbulens","HemantSachdeva","JararvisQ","jeffski","Josh-Cena","juffalow","juzhiyuan","KonstHardy","lex111","ludofischer","Martinsos","matthijsgroen","MisterFISHUP","molly","MorookaKotaro","oriooctopus","pal-sig","Patitotective","patrikmasiar","pbiggar","polarathene","revi","robinmetral","ronnyroeller","rootwork","rsapkf","semoal","shafy","sivapalan","skoech","slorber","sohamsshah","spyke01","StanKocken","swalahamani","swapnilmmane","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"nextItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-types`, `docusaurus`\\n - [#5930](https://github.com/facebook/docusaurus/pull/5930) feat: shorthands for themes/plugins/presets configuration ([@fsmaia](https://github.com/fsmaia))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-types`, `docusaurus`\\n - [#4095](https://github.com/facebook/docusaurus/pull/4095) feat(core): allow sourcing from multiple static directories ([@oriooctopus](https://github.com/oriooctopus))\\n- `create-docusaurus`\\n - [#3458](https://github.com/facebook/docusaurus/pull/3458) feat(create-docusaurus): allow using local folder as template ([@afshinm](https://github.com/afshinm))\\n- `docusaurus-plugin-content-blog`\\n - [#5787](https://github.com/facebook/docusaurus/pull/5787) feat(content-blog): allow sorting posts in ascending order ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3104](https://github.com/facebook/docusaurus/pull/3104) feat(core): Add React ErrorBoundary component + theme default boundaries ([@spyke01](https://github.com/spyke01))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6070](https://github.com/facebook/docusaurus/pull/6070) fix(theme-common): useLocationChange fire un-necessarily twice ([@slorber](https://github.com/slorber))\\n - [#6040](https://github.com/facebook/docusaurus/pull/6040) fix: browser storage (localStorage) is unreliable: api should fail-safe ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6047](https://github.com/facebook/docusaurus/pull/6047) fix: make Docusaurus PnP strict mode compatible ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6052](https://github.com/facebook/docusaurus/pull/6052) fix(core): fix error boundary import disrupting CSS order ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5983](https://github.com/facebook/docusaurus/pull/5983) fix(core): do not apply theme-init alias to user component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5798](https://github.com/facebook/docusaurus/pull/5798) fix(cli): update notifier should be shown if current is less than latest ([@semoal](https://github.com/semoal))\\n - [#5864](https://github.com/facebook/docusaurus/pull/5864) fix: respect base URL when serving content by webpack dev server ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#5945](https://github.com/facebook/docusaurus/pull/5945) fix(module-type-aliases): add svg declaration ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus-theme-classic`\\n - [#5873](https://github.com/facebook/docusaurus/pull/5873) fix(theme-classic): fix announcementBar css ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6003](https://github.com/facebook/docusaurus/pull/6003) fix(theme-classic): make nav dropdowns focusable ([@robinmetral](https://github.com/robinmetral))\\n - [#6000](https://github.com/facebook/docusaurus/pull/6000) fix(theme-classic): make hash link in heading not selectable ([@JararvisQ](https://github.com/JararvisQ))\\n - [#5944](https://github.com/facebook/docusaurus/pull/5944) fix: translate all remaining english sentence in French ([@StanKocken](https://github.com/StanKocken))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6048](https://github.com/facebook/docusaurus/pull/6048) refactor: capitalize locales when creating i18n config ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-translations`\\n - [#5976](https://github.com/facebook/docusaurus/pull/5976) feat(theme-translations): add extra Korean translation, fix typo ([@revi](https://github.com/revi))\\n - [#6060](https://github.com/facebook/docusaurus/pull/6060) chore(theme-translations): complete Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6049](https://github.com/facebook/docusaurus/pull/6049) refactor: simplify Toggle component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`\\n - [#5981](https://github.com/facebook/docusaurus/pull/5981) refactor: minor ESLint improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#5995](https://github.com/facebook/docusaurus/pull/5995) chore(plugin-pwa): change core-js version in package.json to v3 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`\\n - [#5849](https://github.com/facebook/docusaurus/pull/5849) refactor: define own translations in other themes ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-types`\\n - [#5959](https://github.com/facebook/docusaurus/pull/5959) refactor(types): correct HtmlTags types ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#5829](https://github.com/facebook/docusaurus/pull/5829) refactor: optimize clone and checkout in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5899](https://github.com/facebook/docusaurus/pull/5899) feat(core): give more hints when plugins have duplicate IDs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5840](https://github.com/facebook/docusaurus/pull/5840) feat: allow GIT_USER env var to be unset if SSH is used ([@wpyoga](https://github.com/wpyoga))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6063](https://github.com/facebook/docusaurus/pull/6063) docs: add moja global to showcase ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6069](https://github.com/facebook/docusaurus/pull/6069) docs: update CONTRIBUTING for website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6062](https://github.com/facebook/docusaurus/pull/6062) refactor(website): improve wording in comments of showcase data ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6045](https://github.com/facebook/docusaurus/pull/6045) docs: add \\"discord resources\\" to showcase ([@dexbiobot](https://github.com/dexbiobot))\\n - [#6026](https://github.com/facebook/docusaurus/pull/6026) docs(deployment): add cost-benefit analysis with different options ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5955](https://github.com/facebook/docusaurus/pull/5955) docs: add Pearl UI website to showcase ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n - [#5989](https://github.com/facebook/docusaurus/pull/5989) misc: update CONTRIBUTING to reflect status quo ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5845](https://github.com/facebook/docusaurus/pull/5845) docs(admin): update repo testing instructions to reflect v2 ([@wpyoga](https://github.com/wpyoga))\\n - [#6019](https://github.com/facebook/docusaurus/pull/6019) docs: update Netlify url config option in deployment instructions ([@rsapkf](https://github.com/rsapkf))\\n - [#6015](https://github.com/facebook/docusaurus/pull/6015) docs: add Tremor website to showcase page ([@skoech](https://github.com/skoech))\\n - [#5997](https://github.com/facebook/docusaurus/pull/5997) refactor(website): various fixes and improvements on Showcase page ([@lex111](https://github.com/lex111))\\n - [#6008](https://github.com/facebook/docusaurus/pull/6008) docs: improve algolia integration instructions ([@shafy](https://github.com/shafy))\\n - [#6006](https://github.com/facebook/docusaurus/pull/6006) docs: improve explanation for url config in GH Pages ([@Martinsos](https://github.com/Martinsos))\\n - [#6001](https://github.com/facebook/docusaurus/pull/6001) docs: add Dime.Scheduler SDK to showcase ([@hbulens](https://github.com/hbulens))\\n - [#5984](https://github.com/facebook/docusaurus/pull/5984) docs: add PREFS website to showcase ([@Patitotective](https://github.com/Patitotective))\\n - [#5967](https://github.com/facebook/docusaurus/pull/5967) docs(website): Add docsearch migration blog post ([@slorber](https://github.com/slorber))\\n - [#5968](https://github.com/facebook/docusaurus/pull/5968) refactor(website): shadow on showcase toggle ([@dsmmcken](https://github.com/dsmmcken))\\n - [#5979](https://github.com/facebook/docusaurus/pull/5979) docs: update links to default translations dir ([@lex111](https://github.com/lex111))\\n - [#5969](https://github.com/facebook/docusaurus/pull/5969) refactor(website): polish on Showcase page ([@slorber](https://github.com/slorber))\\n - [#5966](https://github.com/facebook/docusaurus/pull/5966) docs: add Darklang to showcase ([@pbiggar](https://github.com/pbiggar))\\n - [#5970](https://github.com/facebook/docusaurus/pull/5970) docs: add Remirror to showcase ([@ronnyroeller](https://github.com/ronnyroeller))\\n - [#5971](https://github.com/facebook/docusaurus/pull/5971) docs: add Webiny docs to showcase page ([@swapnilmmane](https://github.com/swapnilmmane))\\n - [#5953](https://github.com/facebook/docusaurus/pull/5953) docs: fix BrowserOnly return statement ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#5949](https://github.com/facebook/docusaurus/pull/5949) docs: update Signoz showcase details ([@pal-sig](https://github.com/pal-sig))\\n - [#5948](https://github.com/facebook/docusaurus/pull/5948) fix(website): fix APITable anchor ID having extra hash ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5947](https://github.com/facebook/docusaurus/pull/5947) fix(website): fix APITable anchor link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5925](https://github.com/facebook/docusaurus/pull/5925) docs: add Froggit site to showcase page ([@cchaudier](https://github.com/cchaudier))\\n - [#5928](https://github.com/facebook/docusaurus/pull/5928) docs: Add Shotstack showcase user ([@jeffski](https://github.com/jeffski))\\n - [#5934](https://github.com/facebook/docusaurus/pull/5934) docs: fix a typo in CHANGELOG ([@KonstHardy](https://github.com/KonstHardy))\\n - [#5921](https://github.com/facebook/docusaurus/pull/5921) docs: add Signoz site to showcase site ([@pal-sig](https://github.com/pal-sig))\\n - [#5891](https://github.com/facebook/docusaurus/pull/5891) docs: new APITable comp to render large tables ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5917](https://github.com/facebook/docusaurus/pull/5917) docs: make API sidebar partially autogenerated ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5903](https://github.com/facebook/docusaurus/pull/5903) docs: refer to deployed branch as deployment rather than target ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5902](https://github.com/facebook/docusaurus/pull/5902) fix(website): fix i18n routes for Canny board ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5900](https://github.com/facebook/docusaurus/pull/5900) docs: document global variables in MDX scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4409](https://github.com/facebook/docusaurus/pull/4409) docs: add example for GitHub Pages deployment; rewrite deployment section ([@polarathene](https://github.com/polarathene))\\n - [#5888](https://github.com/facebook/docusaurus/pull/5888) docs: update GitHub deployment instructions ([@rootwork](https://github.com/rootwork))\\n - [#5895](https://github.com/facebook/docusaurus/pull/5895) docs: Add juffalow.com to Docusaurus showcase ([@juffalow](https://github.com/juffalow))\\n - [#5881](https://github.com/facebook/docusaurus/pull/5881) docs: fix wrong code sample in docusaurus-core ([@matthijsgroen](https://github.com/matthijsgroen))\\n - [#5875](https://github.com/facebook/docusaurus/pull/5875) docs: add patrikmasiar website showcase ([@patrikmasiar](https://github.com/patrikmasiar))\\n - [#5876](https://github.com/facebook/docusaurus/pull/5876) docs: \'5 minutes tutorial\' -> \'5-minute tutorial\' ([@molly](https://github.com/molly))\\n - [#5759](https://github.com/facebook/docusaurus/pull/5759) docs: create SEO documentation page ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5869](https://github.com/facebook/docusaurus/pull/5869) docs: remove duplicated appId property ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5868](https://github.com/facebook/docusaurus/pull/5868) docs: fix a typo in using-themes.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5862](https://github.com/facebook/docusaurus/pull/5862) misc: show only latest archive alpha/beta versions dropdown ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5742](https://github.com/facebook/docusaurus/pull/5742) feat(website): redesign of showcase page ([@chimailo](https://github.com/chimailo))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6071](https://github.com/facebook/docusaurus/pull/6071) refactor: add blank lines below all copyright headers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6068](https://github.com/facebook/docusaurus/pull/6068) chore: add prefix to needs triage label; separate Windows test workflow ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6031](https://github.com/facebook/docusaurus/pull/6031) chore: upgrade netlify-cli ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6012](https://github.com/facebook/docusaurus/pull/6012) chore(website): enable strict compiler option ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6002](https://github.com/facebook/docusaurus/pull/6002) chore(ci): add GitHub action for showcase testing ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5977](https://github.com/facebook/docusaurus/pull/5977) chore: generate dogfooding test for long pathname during CI ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5950](https://github.com/facebook/docusaurus/pull/5950) misc(codeowners): add @Josh-Cena to CODEOWNERS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5919](https://github.com/facebook/docusaurus/pull/5919) misc(workflow): E2E tests should not be run with website changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5907](https://github.com/facebook/docusaurus/pull/5907) chore(workflow): merge jobs into one workflow & give each job a name ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5889](https://github.com/facebook/docusaurus/pull/5889) chore(website): enable eslint in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5870](https://github.com/facebook/docusaurus/pull/5870) chore(README): fix broken GitHub Actions Workflow Status icon ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6064](https://github.com/facebook/docusaurus/pull/6064) refactor(core): fix types for client code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6055](https://github.com/facebook/docusaurus/pull/6055) chore: clean up dev dependency declarations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`\\n - [#6010](https://github.com/facebook/docusaurus/pull/6010) chore: upgrade prettier; rename prettier scripts as format ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5958](https://github.com/facebook/docusaurus/pull/5958) chore: update @svgr/webpack to version 6 ([@ludofischer](https://github.com/ludofischer))\\n- `docusaurus`\\n - [#5998](https://github.com/facebook/docusaurus/pull/5998) chore: upgrade webpack-dev-server to v4.5.0 ([@lex111](https://github.com/lex111))\\n - [#5965](https://github.com/facebook/docusaurus/pull/5965) fix(core): apply staticDirectories to base webpack config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5985](https://github.com/facebook/docusaurus/pull/5985) chore: cleanup dependency declaration in package.json ([@armano2](https://github.com/armano2))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#5963](https://github.com/facebook/docusaurus/pull/5963) chore: upgrade TypeScript & other ESLint related deps ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5962](https://github.com/facebook/docusaurus/pull/5962) refactor(content-docs): move isCategoriesShorthand to utils ([@armano2](https://github.com/armano2))\\n - [#5906](https://github.com/facebook/docusaurus/pull/5906) fix(content-docs): do not echo git history to console ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5905](https://github.com/facebook/docusaurus/pull/5905) misc(plugin-docs): fix Windows test snapshot for git history retrieval ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5904](https://github.com/facebook/docusaurus/pull/5904) refactor(content-docs): use shelljs instead of execa ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5940](https://github.com/facebook/docusaurus/pull/5940) refactor(plugin-ideal-image): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#5941](https://github.com/facebook/docusaurus/pull/5941) refactor(plugin-pwa): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5935](https://github.com/facebook/docusaurus/pull/5935) refactor(theme-search-algolia): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#5946](https://github.com/facebook/docusaurus/pull/5946) refactor: move deps declarations into src ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5914](https://github.com/facebook/docusaurus/pull/5914) refactor: improve setup of type declaration files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5922](https://github.com/facebook/docusaurus/pull/5922) refactor(theme-classic): move some logic of CodeBlock to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#5931](https://github.com/facebook/docusaurus/pull/5931) refactor(remark-plugin-npm2yarn): migrate package to TS ([@duanwilliam](https://github.com/duanwilliam))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#5806](https://github.com/facebook/docusaurus/pull/5806) refactor: use js-yaml to parse both JSON and YAML ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 48\\n\\n- Afshin Mehrabani ([@afshinm](https://github.com/afshinm))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brennan Kinney ([@polarathene](https://github.com/polarathene))\\n- Can Olcer ([@shafy](https://github.com/shafy))\\n- Christophe Chaudier ([@cchaudier](https://github.com/cchaudier))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- FISH UP ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- Fernando Maia ([@fsmaia](https://github.com/fsmaia))\\n- Hemant Sachdeva ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- Ivan Boothe ([@rootwork](https://github.com/rootwork))\\n- Jarar ([@JararvisQ](https://github.com/JararvisQ))\\n- Jeff Shillitto ([@jeffski](https://github.com/jeffski))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Konstantin Popov ([@KonstHardy](https://github.com/KonstHardy))\\n- Ludovico Fischer ([@ludofischer](https://github.com/ludofischer))\\n- Martin \u0160o\u0161i\u0107 ([@Martinsos](https://github.com/Martinsos))\\n- Matej Jellus ([@juffalow](https://github.com/juffalow))\\n- Matthijs Groen ([@matthijsgroen](https://github.com/matthijsgroen))\\n- Molly White ([@molly](https://github.com/molly))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Paden Clayton ([@spyke01](https://github.com/spyke01))\\n- Patitotective ([@Patitotective](https://github.com/Patitotective))\\n- Patrik M\xe4siar ([@patrikmasiar](https://github.com/patrikmasiar))\\n- Paul Biggar ([@pbiggar](https://github.com/pbiggar))\\n- Rey ([@rsapkf](https://github.com/rsapkf))\\n- Robin M\xe9tral ([@robinmetral](https://github.com/robinmetral))\\n- Rohit Agrawal ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n- Ronny Roeller ([@ronnyroeller](https://github.com/ronnyroeller))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Sharon Koech ([@skoech](https://github.com/skoech))\\n- Shoaib Sajid ([@dexbiobot](https://github.com/dexbiobot))\\n- Soham Shah ([@sohamsshah](https://github.com/sohamsshah))\\n- Stan Kocken ([@StanKocken](https://github.com/StanKocken))\\n- Swalah Amani ([@swalahamani](https://github.com/swalahamani))\\n- Swapnil M Mane ([@swapnilmmane](https://github.com/swapnilmmane))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Yongmin Hong ([@revi](https://github.com/revi))\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@pal-sig](https://github.com/pal-sig)\\n- chima ilo ([@chimailo](https://github.com/chimailo))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.9","metadata":{"permalink":"/changelog/2.0.0-beta.9","source":"@site/changelog/source/2.0.0-beta.9.md","title":"2.0.0-beta.9","description":"New Feature","date":"2021-11-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Avi Vahl","alias":"AviVahl","url":"https://github.com/AviVahl","imageURL":"https://github.com/AviVahl.png","key":"AviVahl","page":null},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dominik Meyer","alias":"dominikmeyersap","url":"https://github.com/dominikmeyersap","imageURL":"https://github.com/dominikmeyersap.png","key":"dominikmeyersap","page":null},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},{"name":"Gabriel Falc\xe3o","alias":"gabrielfalcao","url":"https://github.com/gabrielfalcao","imageURL":"https://github.com/gabrielfalcao.png","key":"gabrielfalcao","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Oscar Dominguez","alias":"oscard0m","url":"https://github.com/oscard0m","imageURL":"https://github.com/oscard0m.png","key":"oscard0m","page":null},{"name":"Robbie Averill","alias":"robbieaverill","url":"https://github.com/robbieaverill","imageURL":"https://github.com/robbieaverill.png","key":"robbieaverill","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Vladimir Tasic","alias":"utajum","url":"https://github.com/utajum","imageURL":"https://github.com/utajum.png","key":"utajum","page":null},{"name":"Ying Wang","alias":"wingclover","url":"https://github.com/wingclover","imageURL":"https://github.com/wingclover.png","key":"wingclover","page":null},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-11-02T20:00","authors":["AviVahl","cerkiewny","datlechin","dominikmeyersap","fishmandev","gabrielfalcao","jeffreyaven","Josh-Cena","juzhiyuan","lex111","oscard0m","robbieaverill","semoal","sivapalan","slorber","utajum","wingclover","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"nextItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5770](https://github.com/facebook/docusaurus/pull/5770) feat(theme-classic): allow specifying width/height in logo ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-types`, `docusaurus`\\n - [#5841](https://github.com/facebook/docusaurus/pull/5841) feat: allow user to specify deploymentBranch property in docusaurus.config.js ([@wpyoga](https://github.com/wpyoga))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5795](https://github.com/facebook/docusaurus/pull/5795) feat(search-algolia): algolia externalUrl regex to navigate with window.href ([@semoal](https://github.com/semoal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#5814](https://github.com/facebook/docusaurus/pull/5814) feat: Support Node 17 ([@slorber](https://github.com/slorber))\\n - [#5420](https://github.com/facebook/docusaurus/pull/5420) feat(core): upgrade to webpack-dev-server@4 ([@AviVahl](https://github.com/AviVahl))\\n- `docusaurus-theme-classic`\\n - [#5791](https://github.com/facebook/docusaurus/pull/5791) feat(theme-classic): add Serbian Cyrillic translation ([@utajum](https://github.com/utajum))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5835](https://github.com/facebook/docusaurus/pull/5835) fix(content-blog): Fix blog feeds not generated ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5828](https://github.com/facebook/docusaurus/pull/5828) fix: include all branch tips for shallow clone in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5824](https://github.com/facebook/docusaurus/pull/5824) fix: baseUrl passed to sortConfig ([@semoal](https://github.com/semoal))\\n - [#5813](https://github.com/facebook/docusaurus/pull/5813) fix: handle SIGTERM in build command ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5819](https://github.com/facebook/docusaurus/pull/5819) fix: use @docusaurus/react-loadable as package alias + include types ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-preset-classic`\\n - [#5831](https://github.com/facebook/docusaurus/pull/5831) feat(preset-classic): guard against unknown keys in options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5815](https://github.com/facebook/docusaurus/pull/5815) refactor: some improvements for webpack-dev-server ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5788](https://github.com/facebook/docusaurus/pull/5788) refactor: fix a few type inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5781](https://github.com/facebook/docusaurus/pull/5781) refactor: Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5853](https://github.com/facebook/docusaurus/pull/5853) docs: Fix a typo in CONTRIBUTING.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5852](https://github.com/facebook/docusaurus/pull/5852) docs: Fix a typo in versioning.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5847](https://github.com/facebook/docusaurus/pull/5847) docs: add InfraQL product docs website to showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#5843](https://github.com/facebook/docusaurus/pull/5843) docs: fix i18n routes to feature requests ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5766](https://github.com/facebook/docusaurus/pull/5766) docs: elaborate on the usage of MDX plugins ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5826](https://github.com/facebook/docusaurus/pull/5826) docs: fix lint issue ([@slorber](https://github.com/slorber))\\n - [#5801](https://github.com/facebook/docusaurus/pull/5801) docs: Update Drone Deployment docs ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n - [#5821](https://github.com/facebook/docusaurus/pull/5821) docs: include navbar item type in the API table ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5820](https://github.com/facebook/docusaurus/pull/5820) docs: add @Josh-Cena to the team ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5818](https://github.com/facebook/docusaurus/pull/5818) doc: fix typo in \\"create a doc\\" ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n - [#5797](https://github.com/facebook/docusaurus/pull/5797) docs: use \\"npx create-docusaurus\\" for init ([@slorber](https://github.com/slorber))\\n - [#5771](https://github.com/facebook/docusaurus/pull/5771) docs: Minor update to grammar in plugins overview page ([@robbieaverill](https://github.com/robbieaverill))\\n - [#5774](https://github.com/facebook/docusaurus/pull/5774) docs: update ssrTemplate ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5784](https://github.com/facebook/docusaurus/pull/5784) docs: fix link for apply to DocSearch program ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#5792](https://github.com/facebook/docusaurus/pull/5792) docs: fix typo ([@wingclover](https://github.com/wingclover))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5842](https://github.com/facebook/docusaurus/pull/5842) misc: add \\"name\\" field for root package.json ([@wpyoga](https://github.com/wpyoga))\\n - [#5836](https://github.com/facebook/docusaurus/pull/5836) chore: switch to GitHub issue forms ([@lex111](https://github.com/lex111))\\n - [#5834](https://github.com/facebook/docusaurus/pull/5834) chore(issue templ): add \\"self service\\" section in templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5833](https://github.com/facebook/docusaurus/pull/5833) chore(workflow): remove v2 prefix from titles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5697](https://github.com/facebook/docusaurus/pull/5697) chore(workflow): add cache to workflows using actions/setup-node ([@oscard0m](https://github.com/oscard0m))\\n - [#5825](https://github.com/facebook/docusaurus/pull/5825) chore: fix Crowdin again ([@slorber](https://github.com/slorber))\\n - [#5823](https://github.com/facebook/docusaurus/pull/5823) chore: replace doc sample .pdf file by .xlsx to solve Crowdin issue ([@slorber](https://github.com/slorber))\\n - [#5763](https://github.com/facebook/docusaurus/pull/5763) chore: update examples for beta.8 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5807](https://github.com/facebook/docusaurus/pull/5807) refactor: remove a few Lodash usages & ESLint enforcement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5808](https://github.com/facebook/docusaurus/pull/5808) refactor: clear a few ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `lqip-loader`\\n - [#5779](https://github.com/facebook/docusaurus/pull/5779) refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Avi Vahl ([@AviVahl](https://github.com/AviVahl))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Dominik Meyer ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n- Gabriel Falc\xe3o ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Oscar Dominguez ([@oscard0m](https://github.com/oscard0m))\\n- Robbie Averill ([@robbieaverill](https://github.com/robbieaverill))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- Vladimir Tasic ([@utajum](https://github.com/utajum))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Ying Wang ([@wingclover](https://github.com/wingclover))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.8","metadata":{"permalink":"/changelog/2.0.0-beta.8","source":"@site/changelog/source/2.0.0-beta.8.md","title":"2.0.0-beta.8","description":"New Feature","date":"2021-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},{"name":"Caner Canbaz","alias":"canercanbaz","url":"https://github.com/canercanbaz","imageURL":"https://github.com/canercanbaz.png","key":"canercanbaz","page":null},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},{"name":"Dimi Mikadze","alias":"DimiMikadze","url":"https://github.com/DimiMikadze","imageURL":"https://github.com/DimiMikadze.png","key":"DimiMikadze","page":null},{"name":"Ilija Pavlic","alias":"ipavlic","url":"https://github.com/ipavlic","imageURL":"https://github.com/ipavlic.png","key":"ipavlic","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nathaniel Furniss","alias":"nlfurniss","url":"https://github.com/nlfurniss","imageURL":"https://github.com/nlfurniss.png","key":"nlfurniss","page":null},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thanasis Katsadas","alias":"thanasis00","url":"https://github.com/thanasis00","imageURL":"https://github.com/thanasis00.png","key":"thanasis00","page":null},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-21T20:00","authors":["ataft","canercanbaz","datlechin","DimiMikadze","ipavlic","johnnyreilly","Josh-Cena","lex111","nlfurniss","philipp985","slorber","thanasis00","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"nextItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5702](https://github.com/facebook/docusaurus/pull/5702) feat(content-blog): new readingTime plugin option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5740](https://github.com/facebook/docusaurus/pull/5740) feat(core): write-heading-ids options maintainCasing, overwrite ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5705](https://github.com/facebook/docusaurus/pull/5705) feat(content-docs): new front matter options to customize pagination ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#5760](https://github.com/facebook/docusaurus/pull/5760) fix(ideal-image): fix IdealImage in dev not handling ES import images properly ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5732](https://github.com/facebook/docusaurus/pull/5732) fix(theme-classic): allow tabs with number as value ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5721](https://github.com/facebook/docusaurus/pull/5721) fix: handle rubber band scrolling in hideable navbar ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5717](https://github.com/facebook/docusaurus/pull/5717) refactor: Polish de translation ([@philipp985](https://github.com/philipp985))\\n - [#5725](https://github.com/facebook/docusaurus/pull/5725) refactor: add missing Turkish translations to theme-classic ([@canercanbaz](https://github.com/canercanbaz))\\n - [#5723](https://github.com/facebook/docusaurus/pull/5723) refactor(v2): update Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5726](https://github.com/facebook/docusaurus/pull/5726) refactor(module-type-aliases): remove fallback aliases ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5755](https://github.com/facebook/docusaurus/pull/5755) docs: rename docusaurus.config.js route + redirects cleanup ([@slorber](https://github.com/slorber))\\n - [#5750](https://github.com/facebook/docusaurus/pull/5750) docs(v2): Fix typo in using-plugins.md ([@thanasis00](https://github.com/thanasis00))\\n - [#5727](https://github.com/facebook/docusaurus/pull/5727) docs(v2): Add Fenghua Frontend Developer site to showcase page ([@zxuqian](https://github.com/zxuqian))\\n - [#5746](https://github.com/facebook/docusaurus/pull/5746) docs: Add plugin-image-zoom ([@ataft](https://github.com/ataft))\\n - [#5728](https://github.com/facebook/docusaurus/pull/5728) docs: add h4 into toc on certain pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5737](https://github.com/facebook/docusaurus/pull/5737) docs: Add Apex FP to showcase ([@ipavlic](https://github.com/ipavlic))\\n- `docusaurus-plugin-content-blog`\\n - [#5753](https://github.com/facebook/docusaurus/pull/5753) fix(content-blog): temporarily swallow feed mdxToHtml errors + feed refactor ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#5761](https://github.com/facebook/docusaurus/pull/5761) chore: upgrade html-webpack-plugin, remove terser 4 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#5714](https://github.com/facebook/docusaurus/pull/5714) chore: Enable ESLint rules of hooks + fix new lint errors ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5722](https://github.com/facebook/docusaurus/pull/5722) chore: fix gen script to support TS template ([@lex111](https://github.com/lex111))\\n - [#5730](https://github.com/facebook/docusaurus/pull/5730) chore: fix typos / casing in issue template ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5720](https://github.com/facebook/docusaurus/pull/5720) chore: regenerate beta.7 examples ([@lex111](https://github.com/lex111))\\n - [#5719](https://github.com/facebook/docusaurus/pull/5719) chore: remove beta.5 docs ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#5748](https://github.com/facebook/docusaurus/pull/5748) refactor: perform shallow clone during deploy ([@nlfurniss](https://github.com/nlfurniss))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Caner Canbaz ([@canercanbaz](https://github.com/canercanbaz))\\n- Dimi Mikadze ([@DimiMikadze](https://github.com/DimiMikadze))\\n- Ilija Pavlic ([@ipavlic](https://github.com/ipavlic))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nathaniel Furniss ([@nlfurniss](https://github.com/nlfurniss))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thanasis Katsadas ([@thanasis00](https://github.com/thanasis00))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))\\n- [@philipp985](https://github.com/philipp985)"},{"id":"/2.0.0-beta.7","metadata":{"permalink":"/changelog/2.0.0-beta.7","source":"@site/changelog/source/2.0.0-beta.7.md","title":"2.0.0-beta.7","description":"New Feature","date":"2021-10-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aditya Kajla","alias":"akajla09","url":"https://github.com/akajla09","imageURL":"https://github.com/akajla09.png","key":"akajla09","page":null},{"name":"Andrew Nguyen","alias":"Andrewnt219","url":"https://github.com/Andrewnt219","imageURL":"https://github.com/Andrewnt219.png","key":"Andrewnt219","page":null},{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},{"name":"Bharat Middha","alias":"bmiddha","url":"https://github.com/bmiddha","imageURL":"https://github.com/bmiddha.png","key":"bmiddha","page":null},{"name":"David Callizaya","alias":"caleeli","url":"https://github.com/caleeli","imageURL":"https://github.com/caleeli.png","key":"caleeli","page":null},{"name":"Chris Chinchilla","alias":"ChrisChinchilla","url":"https://github.com/ChrisChinchilla","imageURL":"https://github.com/ChrisChinchilla.png","key":"ChrisChinchilla","page":null},{"name":"djamaile","alias":"djamaile","url":"https://github.com/djamaile","imageURL":"https://github.com/djamaile.png","key":"djamaile","page":null},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},{"name":"Darshan Gada","alias":"dr5hn","url":"https://github.com/dr5hn","imageURL":"https://github.com/dr5hn.png","key":"dr5hn","page":null},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},{"name":"Ekaterina Mozheiko","alias":"EkaterinaMozheiko","url":"https://github.com/EkaterinaMozheiko","imageURL":"https://github.com/EkaterinaMozheiko.png","key":"EkaterinaMozheiko","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Gabriel T. Nardy","alias":"gtnardy","url":"https://github.com/gtnardy","imageURL":"https://github.com/gtnardy.png","key":"gtnardy","page":null},{"name":"headline-design","alias":"headline-design","url":"https://github.com/headline-design","imageURL":"https://github.com/headline-design.png","key":"headline-design","page":null},{"name":"Hugh Lilly","alias":"hughlilly","url":"https://github.com/hughlilly","imageURL":"https://github.com/hughlilly.png","key":"hughlilly","page":null},{"name":"Ivar Conradi \xd8sthus","alias":"ivarconr","url":"https://github.com/ivarconr","imageURL":"https://github.com/ivarconr.png","key":"ivarconr","page":null},{"name":"Jason Bosco","alias":"jasonbosco","url":"https://github.com/jasonbosco","imageURL":"https://github.com/jasonbosco.png","key":"jasonbosco","page":null},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},{"name":"Jordan Lee","alias":"jkhaui","url":"https://github.com/jkhaui","imageURL":"https://github.com/jkhaui.png","key":"jkhaui","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Robert Kingston","alias":"kingo55","url":"https://github.com/kingo55","imageURL":"https://github.com/kingo55.png","key":"kingo55","page":null},{"name":"Kyriet","alias":"KyrietS","url":"https://github.com/KyrietS","imageURL":"https://github.com/KyrietS.png","key":"KyrietS","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Mahdi Hamldar","alias":"MrTechHunter","url":"https://github.com/MrTechHunter","imageURL":"https://github.com/MrTechHunter.png","key":"MrTechHunter","page":null},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},{"name":"Ana Carolina","alias":"printf-ana","url":"https://github.com/printf-ana","imageURL":"https://github.com/printf-ana.png","key":"printf-ana","page":null},{"name":"Shrugsy","alias":"Shrugsy","url":"https://github.com/Shrugsy","imageURL":"https://github.com/Shrugsy.png","key":"Shrugsy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},{"name":"swyx","alias":"sw-yx","url":"https://github.com/sw-yx","imageURL":"https://github.com/sw-yx.png","key":"sw-yx","page":null},{"name":"Vincent","alias":"vinckr","url":"https://github.com/vinckr","imageURL":"https://github.com/vinckr.png","key":"vinckr","page":null},{"name":"Whirl","alias":"Whirl21","url":"https://github.com/Whirl21","imageURL":"https://github.com/Whirl21.png","key":"Whirl21","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-15T20:00","authors":["akajla09","Andrewnt219","BattleOfPlassey","bmiddha","caleeli","ChrisChinchilla","djamaile","Dr-Electron","dr5hn","dsmmcken","EkaterinaMozheiko","erickzhao","forresst","gtnardy","headline-design","hughlilly","ivarconr","jasonbosco","jeffreyaven","jkhaui","Josh-Cena","kingo55","KyrietS","lex111","moonrailgun","MrTechHunter","ntucker","ohkimur","printf-ana","Shrugsy","slorber","stnor","sw-yx","vinckr","Whirl21","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"nextItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5683](https://github.com/facebook/docusaurus/pull/5683) feat: make Translate children optional ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils`\\n - [#4330](https://github.com/facebook/docusaurus/pull/4330) feat(content-blog): add full blog post html into RSS/Atom feeds ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5642](https://github.com/facebook/docusaurus/pull/5642) feat(theme-classic, plugin-docs): sidebar item level-specific className + allow customization ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5635](https://github.com/facebook/docusaurus/pull/5635) feat: npm init docusaurus, yarn create docusaurus ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#5589](https://github.com/facebook/docusaurus/pull/5589) feat: properly type-check the Docusaurus config of new sites ([@bmiddha](https://github.com/bmiddha))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus`\\n - [#5498](https://github.com/facebook/docusaurus/pull/5498) feat: make Webpack url-loader limit configurable (env variable) ([@stnor](https://github.com/stnor))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#5545](https://github.com/facebook/docusaurus/pull/5545) feat: make tags route path configurable ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus-theme-classic`\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#5694](https://github.com/facebook/docusaurus/pull/5694) fix: proper collapsing of long element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5684](https://github.com/facebook/docusaurus/pull/5684) fix: use realpath for site dir to resolve symlink ([@lex111](https://github.com/lex111))\\n - [#5645](https://github.com/facebook/docusaurus/pull/5645) fix: place root route at the end ([@lex111](https://github.com/lex111))\\n - [#5629](https://github.com/facebook/docusaurus/pull/5629) fix: text/link hydration bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5699](https://github.com/facebook/docusaurus/pull/5699) fix: apply announcement bar class if only needed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5667](https://github.com/facebook/docusaurus/pull/5667) fix: expand tag column on truncated post ([@lex111](https://github.com/lex111))\\n - [#5668](https://github.com/facebook/docusaurus/pull/5668) fix: preserve line breaks when copy code in Firefox ([@lex111](https://github.com/lex111))\\n - [#5647](https://github.com/facebook/docusaurus/pull/5647) feat(theme-classic): make first tab the default tab ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5652](https://github.com/facebook/docusaurus/pull/5652) fix: restore duplicate Tabs rendering to fix hydration issue ([@slorber](https://github.com/slorber))\\n - [#5643](https://github.com/facebook/docusaurus/pull/5643) fix(theme-classic): reset default style for task lists ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n - [#5571](https://github.com/facebook/docusaurus/pull/5571) fix: highlight active item in recent post list ([@lex111](https://github.com/lex111))\\n - [#5481](https://github.com/facebook/docusaurus/pull/5481) fix: use heading itself as anchor for better crawling ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#5677](https://github.com/facebook/docusaurus/pull/5677) fix: Don\'t ignore options.transforms for buble ([@ntucker](https://github.com/ntucker))\\n - [#5556](https://github.com/facebook/docusaurus/pull/5556) fix: pin react-live due to possible mismatch React ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#5690](https://github.com/facebook/docusaurus/pull/5690) fix: preserve hash in asset link ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#5540](https://github.com/facebook/docusaurus/pull/5540) fix: do not use ideal image plugin in dev env ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#5606](https://github.com/facebook/docusaurus/pull/5606) fix(docs): create tags route if only tags exists ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-types`\\n - [#5601](https://github.com/facebook/docusaurus/pull/5601) fix(module-type-aliases): move @type packages to dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#5495](https://github.com/facebook/docusaurus/pull/5495) fix: ignore code block lines when creating excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5490](https://github.com/facebook/docusaurus/pull/5490) fix: install deps for new project via Yarn on Windows properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5479](https://github.com/facebook/docusaurus/pull/5479) fix: add docs tag validation to solve #5478 ([@sw-yx](https://github.com/sw-yx))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5709](https://github.com/facebook/docusaurus/pull/5709) refactor: cleanup scroll handlers ([@lex111](https://github.com/lex111))\\n - [#5627](https://github.com/facebook/docusaurus/pull/5627) refactor: various TOC improvements ([@lex111](https://github.com/lex111))\\n - [#5469](https://github.com/facebook/docusaurus/pull/5469) refactor: Adjust styling of back top top button ([@dsmmcken](https://github.com/dsmmcken))\\n- `docusaurus-theme-classic`\\n - [#5708](https://github.com/facebook/docusaurus/pull/5708) refactor: hide hash link from crawlers ([@lex111](https://github.com/lex111))\\n - [#5649](https://github.com/facebook/docusaurus/pull/5649) refactor: improve pt-BR translation for classic theme ([@printf-ana](https://github.com/printf-ana))\\n - [#5646](https://github.com/facebook/docusaurus/pull/5646) refactor: complete missing and fix ES translations ([@caleeli](https://github.com/caleeli))\\n - [#5640](https://github.com/facebook/docusaurus/pull/5640) style: update Persian language translations ([@MrTechHunter](https://github.com/MrTechHunter))\\n - [#5630](https://github.com/facebook/docusaurus/pull/5630) refactor: standardize using media queries ([@lex111](https://github.com/lex111))\\n - [#5487](https://github.com/facebook/docusaurus/pull/5487) refactor: use only one close SVG icon ([@lex111](https://github.com/lex111))\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n - [#5485](https://github.com/facebook/docusaurus/pull/5485) polish: prevent pop navigation on back if navbar sidebar is open ([@slorber](https://github.com/slorber))\\n - [#5472](https://github.com/facebook/docusaurus/pull/5472) polish(theme-classic): add Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#5636](https://github.com/facebook/docusaurus/pull/5636) refactor: make all Props defined as interface + readonly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#5560](https://github.com/facebook/docusaurus/pull/5560) polish: remove unused eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5580](https://github.com/facebook/docusaurus/pull/5580) refactor(core): type improvements for `PendingNavigation` ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5496](https://github.com/facebook/docusaurus/pull/5496) refactor: remove deprecated createRequireFromPath ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#5681](https://github.com/facebook/docusaurus/pull/5681) docs(v2): Add CountryStateCityAPI site to showcase page ([@dr5hn](https://github.com/dr5hn))\\n- [#5661](https://github.com/facebook/docusaurus/pull/5661) docs: updated cloudywithachanceofbigdata.com blog showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5658](https://github.com/facebook/docusaurus/pull/5658) docs: Algolia plugin must be enabled before crawling the site ([@slorber](https://github.com/slorber))\\n- [#5654](https://github.com/facebook/docusaurus/pull/5654) docs: Add Warrant Docs site to showcase page ([@akajla09](https://github.com/akajla09))\\n- [#5655](https://github.com/facebook/docusaurus/pull/5655) docs: Added cloudywithachanceofbigdata.com showcase blog ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5648](https://github.com/facebook/docusaurus/pull/5648) docs: add ory documentation to showcase ([@vinckr](https://github.com/vinckr))\\n- [#5644](https://github.com/facebook/docusaurus/pull/5644) docs: add djamaile blog to site showcase ([@djamaile](https://github.com/djamaile))\\n- [#5641](https://github.com/facebook/docusaurus/pull/5641) docs: add Lux Algo to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5638](https://github.com/facebook/docusaurus/pull/5638) docs: add nanos world docs to showcase ([@gtnardy](https://github.com/gtnardy))\\n- [#5610](https://github.com/facebook/docusaurus/pull/5610) docs: Add IOTA wiki to showcase ([@Dr-Electron](https://github.com/Dr-Electron))\\n- [#5489](https://github.com/facebook/docusaurus/pull/5489) docs: add additional search options, typesense and local search ([@jasonbosco](https://github.com/jasonbosco))\\n- [#5590](https://github.com/facebook/docusaurus/pull/5590) docs(website): document npm2yarn plugin + use new Tabs API everywhere ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5591](https://github.com/facebook/docusaurus/pull/5591) docs: Add whirl.codes to showcase ([@Whirl21](https://github.com/Whirl21))\\n- [#5574](https://github.com/facebook/docusaurus/pull/5574) docs: add Pipeline UI to showcase ([@headline-design](https://github.com/headline-design))\\n- [#5585](https://github.com/facebook/docusaurus/pull/5585) docs: fix more references to Discord channels ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5572](https://github.com/facebook/docusaurus/pull/5572) docs: add Blogasaurus to showcase ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5575](https://github.com/facebook/docusaurus/pull/5575) docs: clarify MDX version used ([@lex111](https://github.com/lex111))\\n- [#5581](https://github.com/facebook/docusaurus/pull/5581) docs(website): update all Discord links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5566](https://github.com/facebook/docusaurus/pull/5566) docs: fix code example ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- [#5559](https://github.com/facebook/docusaurus/pull/5559) docs: minor grammatical correction ([@jkhaui](https://github.com/jkhaui))\\n- [#5543](https://github.com/facebook/docusaurus/pull/5543) docs: add note about files being ignored when prefixed with an unders\u2026 ([@KyrietS](https://github.com/KyrietS))\\n- [#5549](https://github.com/facebook/docusaurus/pull/5549) docs: Add Mint Metrics site to the Showcase ([@kingo55](https://github.com/kingo55))\\n- [#5546](https://github.com/facebook/docusaurus/pull/5546) docs: add unleash to showcase ([@ivarconr](https://github.com/ivarconr))\\n- [#5539](https://github.com/facebook/docusaurus/pull/5539) docs: improve escape pipe in Markdown tables ([@forresst](https://github.com/forresst))\\n- [#5486](https://github.com/facebook/docusaurus/pull/5486) docs: mention Netlify ignore build setting ([@slorber](https://github.com/slorber))\\n- [#5482](https://github.com/facebook/docusaurus/pull/5482) docs: update docusaurus-plugin-relative-paths description ([@ohkimur](https://github.com/ohkimur))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`\\n - [#5678](https://github.com/facebook/docusaurus/pull/5678) refactor(content-docs): refactor sidebars, Joi validation, generator rework, expose config types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5666](https://github.com/facebook/docusaurus/pull/5666) chore: upgrade Infima to alpha.34 ([@lex111](https://github.com/lex111))\\n - [#5639](https://github.com/facebook/docusaurus/pull/5639) misc: update base translation + remove extra char ([@lex111](https://github.com/lex111))\\n- Other\\n - [#5669](https://github.com/facebook/docusaurus/pull/5669) fix: allow ColorGenerator to parse colors with prefix `#` ([@Andrewnt219](https://github.com/Andrewnt219))\\n - [#5632](https://github.com/facebook/docusaurus/pull/5632) chore: prepare Algolia migration ([@slorber](https://github.com/slorber))\\n - [#5628](https://github.com/facebook/docusaurus/pull/5628) chore: fix warning after build ([@lex111](https://github.com/lex111))\\n - [#5573](https://github.com/facebook/docusaurus/pull/5573) misc: fix ungrammatical sentence about 5-min tutorial ([@hughlilly](https://github.com/hughlilly))\\n - [#5499](https://github.com/facebook/docusaurus/pull/5499) chore: set up CodeQL ([@zpao](https://github.com/zpao))\\n - [#5474](https://github.com/facebook/docusaurus/pull/5474) chore: remove beta.4 docs (already archived) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5611](https://github.com/facebook/docusaurus/pull/5611) chore: upgrade Prettier + regenerate lock file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#5609](https://github.com/facebook/docusaurus/pull/5609) chore: upgrade Terser-related dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5608](https://github.com/facebook/docusaurus/pull/5608) chore: upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5605](https://github.com/facebook/docusaurus/pull/5605) refactor(core): enforce noImplicitAny ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#5603](https://github.com/facebook/docusaurus/pull/5603) fix(preset-classic): fix TS build issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5561](https://github.com/facebook/docusaurus/pull/5561) refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`\\n - [#5579](https://github.com/facebook/docusaurus/pull/5579) refactor(preset-classic): migrate preset-classic to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-init`\\n - [#5484](https://github.com/facebook/docusaurus/pull/5484) chore: regenerate beta.6 examples + fix regen script ([@slorber](https://github.com/slorber))\\n\\n## Committers: 36\\n\\n- Aditya Kajla ([@akajla09](https://github.com/akajla09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ana Carolina ([@printf-ana](https://github.com/printf-ana))\\n- Andrew Nguyen ([@Andrewnt219](https://github.com/Andrewnt219))\\n- Bharat Middha ([@bmiddha](https://github.com/bmiddha))\\n- Chris Chinchilla ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Darshan Gada ([@dr5hn](https://github.com/dr5hn))\\n- David Callizaya ([@caleeli](https://github.com/caleeli))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- Ekaterina Mozheiko ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Gabriel T. Nardy ([@gtnardy](https://github.com/gtnardy))\\n- Hugh Lilly ([@hughlilly](https://github.com/hughlilly))\\n- Ivar Conradi \xd8sthus ([@ivarconr](https://github.com/ivarconr))\\n- Jason Bosco ([@jasonbosco](https://github.com/jasonbosco))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jordan Lee ([@jkhaui](https://github.com/jkhaui))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kyriet ([@KyrietS](https://github.com/KyrietS))\\n- Mahdi Hamldar ([@MrTechHunter](https://github.com/MrTechHunter))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Robert Kingston ([@kingo55](https://github.com/kingo55))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vincent ([@vinckr](https://github.com/vinckr))\\n- Whirl ([@Whirl21](https://github.com/Whirl21))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@Shrugsy](https://github.com/Shrugsy)\\n- [@djamaile](https://github.com/djamaile)\\n- [@headline-design](https://github.com/headline-design)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- swyx ([@sw-yx](https://github.com/sw-yx))"},{"id":"/2.0.0-beta.6","metadata":{"permalink":"/changelog/2.0.0-beta.6","source":"@site/changelog/source/2.0.0-beta.6.md","title":"2.0.0-beta.6","description":"New Feature","date":"2021-09-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},{"name":"Antony Messerli","alias":"antonym","url":"https://github.com/antonym","imageURL":"https://github.com/antonym.png","key":"antonym","page":null},{"name":"farshid","alias":"farshidinanloo","url":"https://github.com/farshidinanloo","imageURL":"https://github.com/farshidinanloo.png","key":"farshidinanloo","page":null},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},{"name":"Oscar Lorentzon","alias":"oscarlorentzon","url":"https://github.com/oscarlorentzon","imageURL":"https://github.com/oscarlorentzon.png","key":"oscarlorentzon","page":null},{"name":"Rohit Gohri","alias":"rohit-gohri","url":"https://github.com/rohit-gohri","imageURL":"https://github.com/rohit-gohri.png","key":"rohit-gohri","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-09-02T20:00","authors":["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"nextItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5428](https://github.com/facebook/docusaurus/pull/5428) feat: adds blog archive route ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5462](https://github.com/facebook/docusaurus/pull/5462) feat: on back navigation, close mobile sidebar ([@slorber](https://github.com/slorber))\\n - [#5445](https://github.com/facebook/docusaurus/pull/5445) feat: Add docs-related stable classnames ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5460](https://github.com/facebook/docusaurus/pull/5460) feat: infima 33 + navbar-sidebar close button ([@slorber](https://github.com/slorber))\\n - [#5442](https://github.com/facebook/docusaurus/pull/5442) feat(theme-classic): allow passing tab label and default value through TabItem ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5454](https://github.com/facebook/docusaurus/pull/5454) feat: new docs options: versions.{badge,className} ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5444](https://github.com/facebook/docusaurus/pull/5444) fix: fix some theme UI issues (blockquotes, navbar-sidebar font) with Infima alpha.32 ([@slorber](https://github.com/slorber))\\n - [#5431](https://github.com/facebook/docusaurus/pull/5431) fix: some beta.5 bugfixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5437](https://github.com/facebook/docusaurus/pull/5437) fix: fix a few TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5459](https://github.com/facebook/docusaurus/pull/5459) refactor(theme-classic): completely migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5453](https://github.com/facebook/docusaurus/pull/5453) refactor: use SVG for closable button in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5430](https://github.com/facebook/docusaurus/pull/5430) refactor: switch to Flexbox in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5434](https://github.com/facebook/docusaurus/pull/5434) refactor: update Arabic and Persian translations ([@3alisaki](https://github.com/3alisaki))\\n - [#5410](https://github.com/facebook/docusaurus/pull/5410) refactor: add missing translations in fa.json ([@farshidinanloo](https://github.com/farshidinanloo))\\n\\n## :memo: Documentation\\n\\n- [#5471](https://github.com/facebook/docusaurus/pull/5471) docs: Add docusaurus-plugin-relative-paths ([@ohkimur](https://github.com/ohkimur))\\n- [#5464](https://github.com/facebook/docusaurus/pull/5464) docs: add mapillary-js to showcase ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- [#5433](https://github.com/facebook/docusaurus/pull/5433) docs: document doc tags + refinements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5435](https://github.com/facebook/docusaurus/pull/5435) docs: Add netboot.xyz to site showcase ([@antonym](https://github.com/antonym))\\n- [#5436](https://github.com/facebook/docusaurus/pull/5436) docs: add Redocusaurus in community plugin list ([@rohit-gohri](https://github.com/rohit-gohri))\\n\\n## :house: Internal\\n\\n- [#5455](https://github.com/facebook/docusaurus/pull/5455) fix: website bad version name in docusaurus.config.js ([@slorber](https://github.com/slorber))\\n\\n## Committers: 10\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Antony Messerli ([@antonym](https://github.com/antonym))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Oscar Lorentzon ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- Rohit Gohri ([@rohit-gohri](https://github.com/rohit-gohri))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- farshid ([@farshidinanloo](https://github.com/farshidinanloo))"},{"id":"/2.0.0-beta.5","metadata":{"permalink":"/changelog/2.0.0-beta.5","source":"@site/changelog/source/2.0.0-beta.5.md","title":"2.0.0-beta.5","description":"New Feature","date":"2021-08-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},{"name":"David Seal","alias":"dbseal","url":"https://github.com/dbseal","imageURL":"https://github.com/dbseal.png","key":"dbseal","page":null},{"name":"Deepak Prabhakara","alias":"deepakprabhakara","url":"https://github.com/deepakprabhakara","imageURL":"https://github.com/deepakprabhakara.png","key":"deepakprabhakara","page":null},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},{"name":"Federico Aloi","alias":"faloi","url":"https://github.com/faloi","imageURL":"https://github.com/faloi.png","key":"faloi","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Fouad Matin","alias":"fouad","url":"https://github.com/fouad","imageURL":"https://github.com/fouad.png","key":"fouad","page":null},{"name":"Julien Neuhart","alias":"gulien","url":"https://github.com/gulien","imageURL":"https://github.com/gulien.png","key":"gulien","page":null},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},{"name":"HaochenQ","alias":"HaochenQ","url":"https://github.com/HaochenQ","imageURL":"https://github.com/HaochenQ.png","key":"HaochenQ","page":null},{"name":"Dmitry Zhifarsky","alias":"incendial","url":"https://github.com/incendial","imageURL":"https://github.com/incendial.png","key":"incendial","page":null},{"name":"Isaac Philip","alias":"isaac-philip","url":"https://github.com/isaac-philip","imageURL":"https://github.com/isaac-philip.png","key":"isaac-philip","page":null},{"name":"Yan Ivan Evdokimov","alias":"jansivans","url":"https://github.com/jansivans","imageURL":"https://github.com/jansivans.png","key":"jansivans","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Jonny Burger","alias":"JonnyBurger","url":"https://github.com/JonnyBurger","imageURL":"https://github.com/JonnyBurger.png","key":"JonnyBurger","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Marko Saric","alias":"metmarkosaric","url":"https://github.com/metmarkosaric","imageURL":"https://github.com/metmarkosaric.png","key":"metmarkosaric","page":null},{"name":"Michal S\xe4nger","alias":"michalsanger","url":"https://github.com/michalsanger","imageURL":"https://github.com/michalsanger.png","key":"michalsanger","page":null},{"name":"Garry","alias":"neaped","url":"https://github.com/neaped","imageURL":"https://github.com/neaped.png","key":"neaped","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tunghsiao Liu","alias":"sparanoid","url":"https://github.com/sparanoid","imageURL":"https://github.com/sparanoid.png","key":"sparanoid","page":null},{"name":"wan-nyan-wan","alias":"wan-nyan-wan","url":"https://github.com/wan-nyan-wan","imageURL":"https://github.com/wan-nyan-wan.png","key":"wan-nyan-wan","page":null},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-08-26T20:00","authors":["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"nextItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#5396](https://github.com/facebook/docusaurus/pull/5396) feat(plugin-blog): multi-authors support + authors.yml global configuration ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5371](https://github.com/facebook/docusaurus/pull/5371) feat: make blog config options and navbar versions dropdown label translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5375](https://github.com/facebook/docusaurus/pull/5375) feat: add metatags support for seo / blogposts #5373 ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-plugin-content-blog`\\n - [#5354](https://github.com/facebook/docusaurus/pull/5354) feat(plugin-blog): allow `\'ALL\'` as `postsPerPage` option value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5330](https://github.com/facebook/docusaurus/pull/5330) feat: Markdown page-specific head metadatas ([@slorber](https://github.com/slorber))\\n - [#5322](https://github.com/facebook/docusaurus/pull/5322) feat: structured data for blog posts ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5314](https://github.com/facebook/docusaurus/pull/5314) feat(v2): add cs (Czech) translations for docusaurus-theme-classic ([@michalsanger](https://github.com/michalsanger))\\n- `docusaurus-init`\\n - [#5233](https://github.com/facebook/docusaurus/pull/5233) feat: new init template classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5309](https://github.com/facebook/docusaurus/pull/5309) feat: blog posts support /YYYY/MM/DD/blog-post/index.md pattern + blog frontmatter can reference relative images ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#5299](https://github.com/facebook/docusaurus/pull/5299) feat: mdx loader fallback, allow importing mdx docs from anywhere ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5425](https://github.com/facebook/docusaurus/pull/5425) fix: toc does not highlight clicked anchor + use scroll-margin-top ([@slorber](https://github.com/slorber))\\n - [#5424](https://github.com/facebook/docusaurus/pull/5424) refactor: make dynamic authors layout via CSS only ([@lex111](https://github.com/lex111))\\n - [#5422](https://github.com/facebook/docusaurus/pull/5422) fix: make tags wrapping properly ([@lex111](https://github.com/lex111))\\n - [#5419](https://github.com/facebook/docusaurus/pull/5419) fix: various fixes back-to-top button ([@lex111](https://github.com/lex111))\\n - [#5361](https://github.com/facebook/docusaurus/pull/5361) fix: refactor TOC highlighting + handle edge cases ([@slorber](https://github.com/slorber))\\n - [#5357](https://github.com/facebook/docusaurus/pull/5357) fix: code blocks should scroll in RTL direction ([@slorber](https://github.com/slorber))\\n - [#5346](https://github.com/facebook/docusaurus/pull/5346) fix: author/image adjustments in BlogPosting schema ([@lex111](https://github.com/lex111))\\n - [#5240](https://github.com/facebook/docusaurus/pull/5240) fix: remove top margin only from directly first element ([@lex111](https://github.com/lex111))\\n - [#5317](https://github.com/facebook/docusaurus/pull/5317) fix: make proper highlighting doc link if no sidebar ([@hamzahamidi](https://github.com/hamzahamidi))\\n - [#5316](https://github.com/facebook/docusaurus/pull/5316) fix: avoid extra default active class on doc sidebar item ([@lex111](https://github.com/lex111))\\n - [#5319](https://github.com/facebook/docusaurus/pull/5319) fix: unbreak highlighting regular navbar links ([@lex111](https://github.com/lex111))\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n - [#5275](https://github.com/facebook/docusaurus/pull/5275) fix: improve spanish translation ([@faloi](https://github.com/faloi))\\n - [#5262](https://github.com/facebook/docusaurus/pull/5262) fix: show secondary menu if even there is no main one ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5426](https://github.com/facebook/docusaurus/pull/5426) fix: Make update-notifier fail-safe if no permission to read configStore ([@slorber](https://github.com/slorber))\\n - [#5398](https://github.com/facebook/docusaurus/pull/5398) fix: fix write-translations warning for theme-common translations ([@slorber](https://github.com/slorber))\\n - [#5381](https://github.com/facebook/docusaurus/pull/5381) fix: canary releases should ignore notifier updates ([@slorber](https://github.com/slorber))\\n - [#5339](https://github.com/facebook/docusaurus/pull/5339) fix: add admonitions support to mdx partials loaded through the fallback mdx loader ([@slorber](https://github.com/slorber))\\n - [#5311](https://github.com/facebook/docusaurus/pull/5311) fix: docusaurus serve logs wrong port if 3000 is taken ([@wan-nyan-wan](https://github.com/wan-nyan-wan))\\n - [#5308](https://github.com/facebook/docusaurus/pull/5308) fix: remove unexpected whitespaces in CSS bundle ([@lex111](https://github.com/lex111))\\n - [#5268](https://github.com/facebook/docusaurus/pull/5268) fix: fix wrong regex that removes extra letters from swizzled component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5399](https://github.com/facebook/docusaurus/pull/5399) fix: fix site unlocalized 404 pages + aggressive Netlify /assets caching ([@slorber](https://github.com/slorber))\\n - [#5249](https://github.com/facebook/docusaurus/pull/5249) fix: fix Crowdin mapping for pt-BR ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5383](https://github.com/facebook/docusaurus/pull/5383) fix: fix Locale Dropdown RTL icon + Webpack aliases ordering ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#5370](https://github.com/facebook/docusaurus/pull/5370) fix(init): fix links to feature images in classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#5364](https://github.com/facebook/docusaurus/pull/5364) fix: unbreak Details component ([@lex111](https://github.com/lex111))\\n - [#5297](https://github.com/facebook/docusaurus/pull/5297) fix: fix constant value import ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5334](https://github.com/facebook/docusaurus/pull/5334) fix: plugin ideal-image should generate filename with a hash even in development ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-search-algolia`\\n - [#5290](https://github.com/facebook/docusaurus/pull/5290) fix: make successful build if missing favicon ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#5270](https://github.com/facebook/docusaurus/pull/5270) fix: ability to link md files with relative paths when paths contain space ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#5261](https://github.com/facebook/docusaurus/pull/5261) fix: fix various TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#5402](https://github.com/facebook/docusaurus/pull/5402) refactor: improve styles of Details component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5386](https://github.com/facebook/docusaurus/pull/5386) refactor: various tags improvements ([@lex111](https://github.com/lex111))\\n - [#5377](https://github.com/facebook/docusaurus/pull/5377) refactor: make main heading font size changeable via CSS var ([@lex111](https://github.com/lex111))\\n - [#5355](https://github.com/facebook/docusaurus/pull/5355) refactor: add blog microdata in markup instead of use JSON-LD ([@lex111](https://github.com/lex111))\\n - [#5365](https://github.com/facebook/docusaurus/pull/5365) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5280](https://github.com/facebook/docusaurus/pull/5280) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Other\\n - [#5389](https://github.com/facebook/docusaurus/pull/5389) refactor: clean Canny integration + rename \'Feedback\' to \'Feature Requests\' + improve TS doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5242](https://github.com/facebook/docusaurus/pull/5242) refactor: reduce ESLint warnings / better typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#5423](https://github.com/facebook/docusaurus/pull/5423) docs: clarify using custom attributes for navbar link ([@lex111](https://github.com/lex111))\\n- [#5421](https://github.com/facebook/docusaurus/pull/5421) docs: add Indent to showcase ([@fouad](https://github.com/fouad))\\n- [#5405](https://github.com/facebook/docusaurus/pull/5405) docs: add Gotenberg to showcase ([@gulien](https://github.com/gulien))\\n- [#5406](https://github.com/facebook/docusaurus/pull/5406) docs: specify proper min Node.js version for Travis CI example ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5390](https://github.com/facebook/docusaurus/pull/5390) docs(v2): showcase BoxyHQ ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- [#5376](https://github.com/facebook/docusaurus/pull/5376) docs(v2): Update Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- [#5372](https://github.com/facebook/docusaurus/pull/5372) docs: remove docusaurus-preset-name from preset doc ([@slorber](https://github.com/slorber))\\n- [#5366](https://github.com/facebook/docusaurus/pull/5366) docs: Add drayman to showcase ([@jansivans](https://github.com/jansivans))\\n- [#5369](https://github.com/facebook/docusaurus/pull/5369) docs(v2): Add Nocalhost website to showcase page ([@neaped](https://github.com/neaped))\\n- [#5351](https://github.com/facebook/docusaurus/pull/5351) docs(website): bump announcement bar + include Twitter link + refactor site colors ([@slorber](https://github.com/slorber))\\n- [#5352](https://github.com/facebook/docusaurus/pull/5352) docs: update `docusaurus-plugin-sass` instructions ([@erickzhao](https://github.com/erickzhao))\\n- [#5332](https://github.com/facebook/docusaurus/pull/5332) docs(v2): add mdx-mermaid to resources ([@sjwall](https://github.com/sjwall))\\n- [#5331](https://github.com/facebook/docusaurus/pull/5331) docs: Changelog page should display TOC with releases ([@slorber](https://github.com/slorber))\\n- [#5329](https://github.com/facebook/docusaurus/pull/5329) docs: add Haochen to showcase page ([@HaochenQ](https://github.com/HaochenQ))\\n- [#5313](https://github.com/facebook/docusaurus/pull/5313) docs: try to make plugin/preset config less confusing ([@slorber](https://github.com/slorber))\\n- [#5296](https://github.com/facebook/docusaurus/pull/5296) docs: update canary doc ([@slorber](https://github.com/slorber))\\n- [#5219](https://github.com/facebook/docusaurus/pull/5219) docs: refactor API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5271](https://github.com/facebook/docusaurus/pull/5271) Add Plausible Analytics docs to showcase page ([@metmarkosaric](https://github.com/metmarkosaric))\\n- [#5283](https://github.com/facebook/docusaurus/pull/5283) docs: fix broken link to syncing tab choices section ([@lex111](https://github.com/lex111))\\n- [#5259](https://github.com/facebook/docusaurus/pull/5259) docs(v2): update Remotion website picture in showcase ([@JonnyBurger](https://github.com/JonnyBurger))\\n- [#5260](https://github.com/facebook/docusaurus/pull/5260) docs(v2): add Dart Code Metrics site to showcase page ([@incendial](https://github.com/incendial))\\n- [#5253](https://github.com/facebook/docusaurus/pull/5253) docs: Fix typo `2-resources.md` ([@forresst](https://github.com/forresst))\\n- [#5248](https://github.com/facebook/docusaurus/pull/5248) docs(v2): add docusaurus-prince-pdf to resources ([@sparanoid](https://github.com/sparanoid))\\n- [#5239](https://github.com/facebook/docusaurus/pull/5239) docs(v2): Add unmand site to showcase page ([@dbseal](https://github.com/dbseal))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5397](https://github.com/facebook/docusaurus/pull/5397) chore: rename docusaurus-2-website package + refactor scripts ([@slorber](https://github.com/slorber))\\n - [#5342](https://github.com/facebook/docusaurus/pull/5342) chore: fix e2e yarn berry tests ([@slorber](https://github.com/slorber))\\n - [#5328](https://github.com/facebook/docusaurus/pull/5328) refactor(website): convert website to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5336](https://github.com/facebook/docusaurus/pull/5336) chore: bump url-parse from 1.5.1 to 1.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#5312](https://github.com/facebook/docusaurus/pull/5312) fix: fix changelog page mdx import for i18n ([@slorber](https://github.com/slorber))\\n - [#5295](https://github.com/facebook/docusaurus/pull/5295) fix: fix canary release versions ([@slorber](https://github.com/slorber))\\n - [#5285](https://github.com/facebook/docusaurus/pull/5285) fix: fix canary version names ([@slorber](https://github.com/slorber))\\n - [#5269](https://github.com/facebook/docusaurus/pull/5269) misc: enable pt-BR + archive older versions ([@slorber](https://github.com/slorber))\\n - [#5237](https://github.com/facebook/docusaurus/pull/5237) chore: enable pt-BR i18n locale on staging ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5341](https://github.com/facebook/docusaurus/pull/5341) polish: bind key listener to light/dark toggle + a11y lint fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus`\\n - [#5347](https://github.com/facebook/docusaurus/pull/5347) chore(mdx-loader): migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#5335](https://github.com/facebook/docusaurus/pull/5335) refactor: better typing + remove unnecessary eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#5338](https://github.com/facebook/docusaurus/pull/5338) refactor(plugin-blog): style improvements in blogUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5256](https://github.com/facebook/docusaurus/pull/5256) chore: upgrade Infima to alpha.30 ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5315](https://github.com/facebook/docusaurus/pull/5315) refactor(init): share common files between templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5284](https://github.com/facebook/docusaurus/pull/5284) refactor: properly type docs version ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n\\n## Committers: 27\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- David Seal ([@dbseal](https://github.com/dbseal))\\n- Deepak Prabhakara ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- Dmitry Zhifarsky ([@incendial](https://github.com/incendial))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Federico Aloi ([@faloi](https://github.com/faloi))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fouad Matin ([@fouad](https://github.com/fouad))\\n- Garry ([@neaped](https://github.com/neaped))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- Isaac Philip ([@isaac-philip](https://github.com/isaac-philip))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jonny Burger ([@JonnyBurger](https://github.com/JonnyBurger))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Julien Neuhart ([@gulien](https://github.com/gulien))\\n- Marko Saric ([@metmarkosaric](https://github.com/metmarkosaric))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michal S\xe4nger ([@michalsanger](https://github.com/michalsanger))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tunghsiao Liu ([@sparanoid](https://github.com/sparanoid))\\n- Yan Ivan Evdokimov ([@jansivans](https://github.com/jansivans))\\n- [@HaochenQ](https://github.com/HaochenQ)\\n- wan-nyan-wan ([@wan-nyan-wan](https://github.com/wan-nyan-wan))"},{"id":"/2.0.0-beta.4","metadata":{"permalink":"/changelog/2.0.0-beta.4","source":"@site/changelog/source/2.0.0-beta.4.md","title":"2.0.0-beta.4","description":"New Feature","date":"2021-07-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonvasilev52","alias":"antonvasilev52","url":"https://github.com/antonvasilev52","imageURL":"https://github.com/antonvasilev52.png","key":"antonvasilev52","page":null},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},{"name":"Christian Flach","alias":"cmfcmf","url":"https://github.com/cmfcmf","imageURL":"https://github.com/cmfcmf.png","key":"cmfcmf","page":null},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},{"name":"David Zhao","alias":"davidzhao","url":"https://github.com/davidzhao","imageURL":"https://github.com/davidzhao.png","key":"davidzhao","page":null},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},{"name":"Dan Gebhardt","alias":"dgeb","url":"https://github.com/dgeb","imageURL":"https://github.com/dgeb.png","key":"dgeb","page":null},{"name":"Fran\xe7ois Massot","alias":"fmassot","url":"https://github.com/fmassot","imageURL":"https://github.com/fmassot.png","key":"fmassot","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Lennart Koopmann","alias":"lennartkoopmann","url":"https://github.com/lennartkoopmann","imageURL":"https://github.com/lennartkoopmann.png","key":"lennartkoopmann","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},{"name":"Mar\xe7al Junior","alias":"marssaljr","url":"https://github.com/marssaljr","imageURL":"https://github.com/marssaljr.png","key":"marssaljr","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Michel Weststrate","alias":"mweststrate","url":"https://github.com/mweststrate","imageURL":"https://github.com/mweststrate.png","key":"mweststrate","page":null},{"name":"Nazar","alias":"NazarStreletskyi","url":"https://github.com/NazarStreletskyi","imageURL":"https://github.com/NazarStreletskyi.png","key":"NazarStreletskyi","page":null},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},{"name":"Przemys\u0142aw Chojecki","alias":"pcho","url":"https://github.com/pcho","imageURL":"https://github.com/pcho.png","key":"pcho","page":null},{"name":"Philipp Muens","alias":"pmuens","url":"https://github.com/pmuens","imageURL":"https://github.com/pmuens.png","key":"pmuens","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"Raz Luvaton","alias":"rluvaton","url":"https://github.com/rluvaton","imageURL":"https://github.com/rluvaton.png","key":"rluvaton","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},{"name":"tohid nateghi","alias":"tohidnateghi","url":"https://github.com/tohidnateghi","imageURL":"https://github.com/tohidnateghi.png","key":"tohidnateghi","page":null},{"name":"\u9648\u6768\u6587","alias":"wenerme","url":"https://github.com/wenerme","imageURL":"https://github.com/wenerme.png","key":"wenerme","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-07-28T20:00","authors":["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"nextItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4912](https://github.com/facebook/docusaurus/pull/4912) feat(v2): add back to top button ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5235](https://github.com/facebook/docusaurus/pull/5235) feat: docusaurus.new + improve StackBlitz playground integration ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5207](https://github.com/facebook/docusaurus/pull/5207) feat: multiple playground choices ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5232](https://github.com/facebook/docusaurus/pull/5232) fix(v2): blog should parse frontMatter.date even when time is present ([@wenerme](https://github.com/wenerme))\\n- `docusaurus-theme-classic`\\n - [#5230](https://github.com/facebook/docusaurus/pull/5230) fix(v2): remove top margin from first element inside doc article ([@lex111](https://github.com/lex111))\\n - [#5229](https://github.com/facebook/docusaurus/pull/5229) fix(v2): keep mobile TOC after hydration ([@lex111](https://github.com/lex111))\\n - [#5179](https://github.com/facebook/docusaurus/pull/5179) fix(v2): wrap dropdown item to missing li element + remove extra attributes ([@lex111](https://github.com/lex111))\\n - [#5183](https://github.com/facebook/docusaurus/pull/5183) fix(v2): pass all props to CodeBlock component ([@lex111](https://github.com/lex111))\\n - [#5176](https://github.com/facebook/docusaurus/pull/5176) fix(v2): Fix type for navlink label ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5172](https://github.com/facebook/docusaurus/pull/5172) fix(v2): hide mobile collapsible doc toc if no headings ([@slorber](https://github.com/slorber))\\n - [#5161](https://github.com/facebook/docusaurus/pull/5161) fix(v2): disable default behavior when click on collapsible item ([@lex111](https://github.com/lex111))\\n - [#5151](https://github.com/facebook/docusaurus/pull/5151) fix(v2): add missing french translations for mobile ([@forresst](https://github.com/forresst))\\n - [#5104](https://github.com/facebook/docusaurus/pull/5104) fix(v2): fix SkipToContent programmatic focus when updating querystring ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#5214](https://github.com/facebook/docusaurus/pull/5214) fix: upgrade Docsearch to avoid layout shift ([@slorber](https://github.com/slorber))\\n - [#5135](https://github.com/facebook/docusaurus/pull/5135) chore(v2): update @docsearch/react ([@shortcuts](https://github.com/shortcuts))\\n- `docusaurus`\\n - [#5204](https://github.com/facebook/docusaurus/pull/5204) fix: cli upgrade helper fail when no `package.dependencies` ([@mweststrate](https://github.com/mweststrate))\\n - [#5164](https://github.com/facebook/docusaurus/pull/5164) fix(v2): revert webpack.resolve.symlinks = false ([@slorber](https://github.com/slorber))\\n - [#5126](https://github.com/facebook/docusaurus/pull/5126) fix(v2): remove webpackConfig.resolve.symlinks: true ([@slorber](https://github.com/slorber))\\n - [#5110](https://github.com/facebook/docusaurus/pull/5110) fix(v2): Fix update-notifier not run at first and not notifying consistently ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#5199](https://github.com/facebook/docusaurus/pull/5199) fix(v2): Fix MDX docs being considered as partials when siteDir match the \\\\_ prefix convention ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#5185](https://github.com/facebook/docusaurus/pull/5185) fix(v2): add base URL to content attribute of head tags PWA ([@lex111](https://github.com/lex111))\\n - [#5169](https://github.com/facebook/docusaurus/pull/5169) refactor(v2): automatically add base URL to PWA head tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#5159](https://github.com/facebook/docusaurus/pull/5159) fix(v2): Fix Collapsible hydration layout shift ([@slorber](https://github.com/slorber))\\n - [#5146](https://github.com/facebook/docusaurus/pull/5146) fix(v2): improve work of useCollapsible hook with multiple clicks ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`\\n - [#5129](https://github.com/facebook/docusaurus/pull/5129) fix(v2): fix d.ts lint error ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5116](https://github.com/facebook/docusaurus/pull/5116) fix(v2): introduce useCollapsible to fix collapsible animation perf issues ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`\\n - [#5102](https://github.com/facebook/docusaurus/pull/5102) fix(v2): fix redirect plugin when trailingSlash=false for .html extension ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5228](https://github.com/facebook/docusaurus/pull/5228) refactor(v2): fix small typo in Russian translation ([@antonvasilev52](https://github.com/antonvasilev52))\\n - [#5222](https://github.com/facebook/docusaurus/pull/5222) chore(v2): update Infima to alpha 28 ([@lex111](https://github.com/lex111))\\n - [#5224](https://github.com/facebook/docusaurus/pull/5224) refactor(v2): update Russian translation ([@lex111](https://github.com/lex111))\\n - [#5217](https://github.com/facebook/docusaurus/pull/5217) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5171](https://github.com/facebook/docusaurus/pull/5171) refactor(v2): increase content area if blog sidebar is off ([@lex111](https://github.com/lex111))\\n - [#5154](https://github.com/facebook/docusaurus/pull/5154) refactor(v2): Hindi translation for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5145](https://github.com/facebook/docusaurus/pull/5145) refactor(v2): use Collapsible for mobile nav items ([@lex111](https://github.com/lex111))\\n - [#5138](https://github.com/facebook/docusaurus/pull/5138) refactor(v2): Update Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#5140](https://github.com/facebook/docusaurus/pull/5140) refactor(v2): bn translation improvements for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5139](https://github.com/facebook/docusaurus/pull/5139) feat(v2): complete Chinese code translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5118](https://github.com/facebook/docusaurus/pull/5118) refactor(v2): pt-BR translations improve semantic doc sidebar and tags ([@marssaljr](https://github.com/marssaljr))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#5215](https://github.com/facebook/docusaurus/pull/5215) refactor: make code block shadows consistent with new admonitions ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#5193](https://github.com/facebook/docusaurus/pull/5193) refactor: redesign admonitions/callouts/quotes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5168](https://github.com/facebook/docusaurus/pull/5168) refactor(v2): mobile dropdown navbar: expand when subitem become active ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#5236](https://github.com/facebook/docusaurus/pull/5236) docs: add Verdaccio.org to showcase ([@semoal](https://github.com/semoal))\\n- [#5218](https://github.com/facebook/docusaurus/pull/5218) docs(v2): remove vector.dev from showcase ([@lex111](https://github.com/lex111))\\n- [#5212](https://github.com/facebook/docusaurus/pull/5212) docs: mention Link can be used for external links ([@slorber](https://github.com/slorber))\\n- [#5210](https://github.com/facebook/docusaurus/pull/5210) docs(v2): Elaboration of raw-loader in markdown react component ([@pranabdas](https://github.com/pranabdas))\\n- [#5191](https://github.com/facebook/docusaurus/pull/5191) docs: user should restart docusaurus after adding prism additionalLanguage ([@tohidnateghi](https://github.com/tohidnateghi))\\n- [#5175](https://github.com/facebook/docusaurus/pull/5175) docs: update API docs on navbar behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5189](https://github.com/facebook/docusaurus/pull/5189) docs(v2): Add orbitjs site to showcase page ([@dgeb](https://github.com/dgeb))\\n- [#5177](https://github.com/facebook/docusaurus/pull/5177) docs(v2): add easyjwt to users ([@dbrrt](https://github.com/dbrrt))\\n- [#5187](https://github.com/facebook/docusaurus/pull/5187) docs(v2): Add quickwit to user.js and png. ([@fmassot](https://github.com/fmassot))\\n- [#5184](https://github.com/facebook/docusaurus/pull/5184) docs(v2): Add react-complex-tree to users.js ([@lukasbach](https://github.com/lukasbach))\\n- [#5178](https://github.com/facebook/docusaurus/pull/5178) docs(v2): Update tutorial link ([@slorber](https://github.com/slorber))\\n- [#5158](https://github.com/facebook/docusaurus/pull/5158) docs(v2): Update deploy with Qovery docs for V2 ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#5152](https://github.com/facebook/docusaurus/pull/5152) docs(v2): Indent code example to improve readability ([@rluvaton](https://github.com/rluvaton))\\n- [#5133](https://github.com/facebook/docusaurus/pull/5133) docs(v2): GIF format is not suported ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- [#5117](https://github.com/facebook/docusaurus/pull/5117) docs(v2): Add Prismatic docs page to showcase. ([@taylorreece](https://github.com/taylorreece))\\n- [#5115](https://github.com/facebook/docusaurus/pull/5115) docs(v2): Add LiveKit to showcase ([@davidzhao](https://github.com/davidzhao))\\n- [#5114](https://github.com/facebook/docusaurus/pull/5114) docs(v2): add Blink Shell Documentation to Showcase ([@pcho](https://github.com/pcho))\\n- [#5112](https://github.com/facebook/docusaurus/pull/5112) docs(v2): clarify how to disable edit links entirely ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- [#5113](https://github.com/facebook/docusaurus/pull/5113) docs(v2): Add CryptoDevHub to Showcase ([@pmuens](https://github.com/pmuens))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#5234](https://github.com/facebook/docusaurus/pull/5234) chore: Upgrade infima 29 ([@slorber](https://github.com/slorber))\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5223](https://github.com/facebook/docusaurus/pull/5223) chore: fix iframe background color in dark mode ([@lex111](https://github.com/lex111))\\n - [#5206](https://github.com/facebook/docusaurus/pull/5206) misc: add script to keep starters branch/repos up-to-date ([@slorber](https://github.com/slorber))\\n - [#5167](https://github.com/facebook/docusaurus/pull/5167) fix(v2): fix website PWA icon hrefs ([@slorber](https://github.com/slorber))\\n - [#5166](https://github.com/facebook/docusaurus/pull/5166) fix(v2): fix yarn clear command ([@slorber](https://github.com/slorber))\\n - [#5137](https://github.com/facebook/docusaurus/pull/5137) chore: upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#5111](https://github.com/facebook/docusaurus/pull/5111) misc: monitor site global data with build size bot ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5136](https://github.com/facebook/docusaurus/pull/5136) perf(v2): lazy sidebar categories / collapsibles, reduce html output / build times ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n\\n## Committers: 28\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- Christian Flach ([@cmfcmf](https://github.com/cmfcmf))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Dan Gebhardt ([@dgeb](https://github.com/dgeb))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- David Zhao ([@davidzhao](https://github.com/davidzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fran\xe7ois Massot ([@fmassot](https://github.com/fmassot))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lennart Koopmann ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Mar\xe7al Junior ([@marssaljr](https://github.com/marssaljr))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michel Weststrate ([@mweststrate](https://github.com/mweststrate))\\n- Nazar ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- Philipp Muens ([@pmuens](https://github.com/pmuens))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Przemys\u0142aw Chojecki ([@pcho](https://github.com/pcho))\\n- Raz Luvaton ([@rluvaton](https://github.com/rluvaton))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@antonvasilev52](https://github.com/antonvasilev52)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- tohid nateghi ([@tohidnateghi](https://github.com/tohidnateghi))\\n- \u9648\u6768\u6587 ([@wenerme](https://github.com/wenerme))"},{"id":"/2.0.0-beta.3","metadata":{"permalink":"/changelog/2.0.0-beta.3","source":"@site/changelog/source/2.0.0-beta.3.md","title":"2.0.0-beta.3","description":"New Feature","date":"2021-06-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adam Uhl\xed\u0159","alias":"AuHau","url":"https://github.com/AuHau","imageURL":"https://github.com/AuHau.png","key":"AuHau","page":null},{"name":"bperlmutter","alias":"bperlmutter","url":"https://github.com/bperlmutter","imageURL":"https://github.com/bperlmutter.png","key":"bperlmutter","page":null},{"name":"dirslashls","alias":"dirslashls","url":"https://github.com/dirslashls","imageURL":"https://github.com/dirslashls.png","key":"dirslashls","page":null},{"name":"Ayush das","alias":"iamayushdas","url":"https://github.com/iamayushdas","imageURL":"https://github.com/iamayushdas.png","key":"iamayushdas","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},{"name":"Danny Lin","alias":"kdrag0n","url":"https://github.com/kdrag0n","imageURL":"https://github.com/kdrag0n.png","key":"kdrag0n","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-30T20:00","authors":["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"nextItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#5092](https://github.com/facebook/docusaurus/pull/5092) feat(v2): add icon to external footer links ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5080](https://github.com/facebook/docusaurus/pull/5080) fix(v2): classic theme - semantic correct anchors links ([@AuHau](https://github.com/AuHau))\\n - [#5081](https://github.com/facebook/docusaurus/pull/5081) fix(v2): restore previous scroll position on back button click ([@lex111](https://github.com/lex111))\\n - [#5063](https://github.com/facebook/docusaurus/pull/5063) fix(v2): restore responsive menu ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5094](https://github.com/facebook/docusaurus/pull/5094) fix(v2): fix typos in swizzle command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5095](https://github.com/facebook/docusaurus/pull/5095) fix(v2): fix swizzle readComponent ([@slorber](https://github.com/slorber))\\n - [#5059](https://github.com/facebook/docusaurus/pull/5059) fix(v2): fix webpack SSG plugin error thrown due to new URL() / \\\\_\\\\_filename ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5097](https://github.com/facebook/docusaurus/pull/5097) fix(v2): fix useEffect infinite loop in blogOnly mode ([@slorber](https://github.com/slorber))\\n - [#5074](https://github.com/facebook/docusaurus/pull/5074) fix(v2): allow negative sidebar positions ([@kdrag0n](https://github.com/kdrag0n))\\n- `docusaurus-plugin-client-redirects`\\n - [#5093](https://github.com/facebook/docusaurus/pull/5093) fix(v2): redirect from should work with trailingSlash: true ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#5085](https://github.com/facebook/docusaurus/pull/5085) fix(v2): redirect plugin should emit redirect files with lower precedence than redirect target ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus`\\n - [#5082](https://github.com/facebook/docusaurus/pull/5082) fix(v2): never remove trailing slash from site root like \'/baseUrl/\' ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#5068](https://github.com/facebook/docusaurus/pull/5068) fix(v2): sitemap should respect the global trailingSlash config option. ([@taylorreece](https://github.com/taylorreece))\\n- `docusaurus-types`\\n - [#5058](https://github.com/facebook/docusaurus/pull/5058) fix(v2): fix bad @docusaurus/types Plugin type generics ([@jsamr](https://github.com/jsamr))\\n\\n## :memo: Documentation\\n\\n- [#5064](https://github.com/facebook/docusaurus/pull/5064) docs(v2): Rewrite markdown images section ([@ramiy](https://github.com/ramiy))\\n- [#5086](https://github.com/facebook/docusaurus/pull/5086) docs(v2): Add SQL Frames to the showcase ([@dirslashls](https://github.com/dirslashls))\\n- [#5073](https://github.com/facebook/docusaurus/pull/5073) docs(v2): update installation docs ([@iamayushdas](https://github.com/iamayushdas))\\n- [#5061](https://github.com/facebook/docusaurus/pull/5061) docs(v2:) Divide `markdown-features/code-blocks` to smaller sections ([@ramiy](https://github.com/ramiy))\\n- [#5066](https://github.com/facebook/docusaurus/pull/5066) docs(v2): correct typo ([@bperlmutter](https://github.com/bperlmutter))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`\\n - [#5067](https://github.com/facebook/docusaurus/pull/5067) chore: unstable yarn.lock ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5057](https://github.com/facebook/docusaurus/pull/5057) chore(v2): upgrade examples to beta.2 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Adam Uhl\xed\u0159 ([@AuHau](https://github.com/AuHau))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ayush das ([@iamayushdas](https://github.com/iamayushdas))\\n- Danny Lin ([@kdrag0n](https://github.com/kdrag0n))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@bperlmutter](https://github.com/bperlmutter)\\n- [@dirslashls](https://github.com/dirslashls)"},{"id":"/2.0.0-beta.2","metadata":{"permalink":"/changelog/2.0.0-beta.2","source":"@site/changelog/source/2.0.0-beta.2.md","title":"2.0.0-beta.2","description":"New Feature","date":"2021-06-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Eshan Tripathi","alias":"eshantri","url":"https://github.com/eshantri","imageURL":"https://github.com/eshantri.png","key":"eshantri","page":null},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},{"name":"Manuel Meurer","alias":"manuelmeurer","url":"https://github.com/manuelmeurer","imageURL":"https://github.com/manuelmeurer.png","key":"manuelmeurer","page":null},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Tomasz Papiernik","alias":"tomekpapiernik","url":"https://github.com/tomekpapiernik","imageURL":"https://github.com/tomekpapiernik.png","key":"tomekpapiernik","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-24T20:00","authors":["eshantri","felipecrs","Josh-Cena","jsamr","lex111","loozhengyuan","manuelmeurer","ramiy","slorber","teikjun","tomekpapiernik"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"nextItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#5037](https://github.com/facebook/docusaurus/pull/5037) feat(v2): plugins injectHtmlTags + configureWebpack should receive content loaded ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-types`, `docusaurus`\\n - [#5054](https://github.com/facebook/docusaurus/pull/5054) fix(v2): allow undefined favicon ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5048](https://github.com/facebook/docusaurus/pull/5048) fix(v2): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-theme-classic`\\n - [#5050](https://github.com/facebook/docusaurus/pull/5050) fix(v2): add shadow to skip link on focus only ([@lex111](https://github.com/lex111))\\n - [#5035](https://github.com/facebook/docusaurus/pull/5035) fix(v2): fix some docs container/sidebar layout issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#5047](https://github.com/facebook/docusaurus/pull/5047) fix(v2): Fix Webpack persistent caching (evict on swizzle/alias/config change) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5040](https://github.com/facebook/docusaurus/pull/5040) fix(v2): Fix announcementBar layout shifts ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5034](https://github.com/facebook/docusaurus/pull/5034) fix(v2): dev css modules classnames should include filename ([@slorber](https://github.com/slorber))\\n - [#5016](https://github.com/facebook/docusaurus/pull/5016) fix(v2): add missing quote in build command output ([@manuelmeurer](https://github.com/manuelmeurer))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5023](https://github.com/facebook/docusaurus/pull/5023) fix(v2): ignore hash changes in useChangeRoute hook ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5032](https://github.com/facebook/docusaurus/pull/5032) fix(v2): less strict blog/docs uri frontmatter validation ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4993](https://github.com/facebook/docusaurus/pull/4993) style(v2): reduce number of ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5017](https://github.com/facebook/docusaurus/pull/5017) chore(v2): remove badge for v1 tests ([@loozhengyuan](https://github.com/loozhengyuan))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5049](https://github.com/facebook/docusaurus/pull/5049) docs(v2): Fix Gatsby theme name for docs site - Docz ([@ramiy](https://github.com/ramiy))\\n - [#5030](https://github.com/facebook/docusaurus/pull/5030) docs(v2): typo in deployment.mdx ([@eshantri](https://github.com/eshantri))\\n - [#5022](https://github.com/facebook/docusaurus/pull/5022) docs(v2): Add React Native Render HTML site to showcase page ([@jsamr](https://github.com/jsamr))\\n - [#5027](https://github.com/facebook/docusaurus/pull/5027) docs(v2): Add Buddy to deployment doc ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n - [#5021](https://github.com/facebook/docusaurus/pull/5021) docs(v2): fix incorrect anchor links in website ([@teikjun](https://github.com/teikjun))\\n - [#5007](https://github.com/facebook/docusaurus/pull/5007) docs(v2): wrap mdx usage in mdx-code-block ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5033](https://github.com/facebook/docusaurus/pull/5033) docs(v2): GH pages: recommend using trailingSlash ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- [#5005](https://github.com/facebook/docusaurus/pull/5005) chore: add archived versions system + archive alpha.73-75 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Eshan Tripathi ([@eshantri](https://github.com/eshantri))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Manuel Meurer ([@manuelmeurer](https://github.com/manuelmeurer))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tomasz Papiernik ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))"},{"id":"/2.0.0-beta.1","metadata":{"permalink":"/changelog/2.0.0-beta.1","source":"@site/changelog/source/2.0.0-beta.1.md","title":"2.0.0-beta.1","description":"New Feature","date":"2021-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonygibbs","alias":"antonygibbs","url":"https://github.com/antonygibbs","imageURL":"https://github.com/antonygibbs.png","key":"antonygibbs","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},{"name":"Christopher Hsieh","alias":"Christopher-Hsieh","url":"https://github.com/Christopher-Hsieh","imageURL":"https://github.com/Christopher-Hsieh.png","key":"Christopher-Hsieh","page":null},{"name":"Ben Rometsch","alias":"dabeeeenster","url":"https://github.com/dabeeeenster","imageURL":"https://github.com/dabeeeenster.png","key":"dabeeeenster","page":null},{"name":"e271828-","alias":"e271828-","url":"https://github.com/e271828-","imageURL":"https://github.com/e271828-.png","key":"e271828-","page":null},{"name":"fgatti675","alias":"fgatti675","url":"https://github.com/fgatti675","imageURL":"https://github.com/fgatti675.png","key":"fgatti675","page":null},{"name":"Tina\xebl Devresse","alias":"HunteRoi","url":"https://github.com/HunteRoi","imageURL":"https://github.com/HunteRoi.png","key":"HunteRoi","page":null},{"name":"Jonathan Mazin","alias":"jmazin","url":"https://github.com/jmazin","imageURL":"https://github.com/jmazin.png","key":"jmazin","page":null},{"name":"Joel","alias":"Joelpo","url":"https://github.com/Joelpo","imageURL":"https://github.com/Joelpo.png","key":"Joelpo","page":null},{"name":"Jon Barker","alias":"jonbarker68","url":"https://github.com/jonbarker68","imageURL":"https://github.com/jonbarker68.png","key":"jonbarker68","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"Louis Gallet","alias":"l0u1sg","url":"https://github.com/l0u1sg","imageURL":"https://github.com/l0u1sg.png","key":"l0u1sg","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},{"name":"Lior Heber","alias":"liorheber","url":"https://github.com/liorheber","imageURL":"https://github.com/liorheber.png","key":"liorheber","page":null},{"name":"Louis Grenard","alias":"louistiti","url":"https://github.com/louistiti","imageURL":"https://github.com/louistiti.png","key":"louistiti","page":null},{"name":"Massibian","alias":"Massibian","url":"https://github.com/Massibian","imageURL":"https://github.com/Massibian.png","key":"Massibian","page":null},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},{"name":"Pratyay Banerjee","alias":"Neilblaze","url":"https://github.com/Neilblaze","imageURL":"https://github.com/Neilblaze.png","key":"Neilblaze","page":null},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},{"name":"phwt.smwt","alias":"phwt","url":"https://github.com/phwt","imageURL":"https://github.com/phwt.png","key":"phwt","page":null},{"name":"Pedro Queiroz","alias":"pmqueiroz","url":"https://github.com/pmqueiroz","imageURL":"https://github.com/pmqueiroz.png","key":"pmqueiroz","page":null},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},{"name":"PsychTech","alias":"PsychTechApS","url":"https://github.com/PsychTechApS","imageURL":"https://github.com/PsychTechApS.png","key":"PsychTechApS","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"silva-nick","alias":"silva-nick","url":"https://github.com/silva-nick","imageURL":"https://github.com/silva-nick.png","key":"silva-nick","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"mg","alias":"tiny-dancer","url":"https://github.com/tiny-dancer","imageURL":"https://github.com/tiny-dancer.png","key":"tiny-dancer","page":null},{"name":"Lucas Correia","alias":"tsirlucas","url":"https://github.com/tsirlucas","imageURL":"https://github.com/tsirlucas.png","key":"tsirlucas","page":null},{"name":"Fardeen Panjwani","alias":"wise-introvert","url":"https://github.com/wise-introvert","imageURL":"https://github.com/wise-introvert.png","key":"wise-introvert","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-18T20:00","authors":["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"nextItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#4982](https://github.com/facebook/docusaurus/pull/4982) feat(v2): add docs pagination_label frontmatter ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4949](https://github.com/facebook/docusaurus/pull/4949) feat(v2): add icon to external navbar links ([@lex111](https://github.com/lex111))\\n - [#4939](https://github.com/facebook/docusaurus/pull/4939) feat(v2): theme default translations Bengali ([@Neilblaze](https://github.com/Neilblaze))\\n - [#4811](https://github.com/facebook/docusaurus/pull/4811) feat(v2): Add hebrew translations ([@slorber](https://github.com/slorber))\\n - [#4798](https://github.com/facebook/docusaurus/pull/4798) feat(v2): add theme Danish translation ([@PsychTechApS](https://github.com/PsychTechApS))\\n- `docusaurus-init`\\n - [#4968](https://github.com/facebook/docusaurus/pull/4968) feat(v2): add code block theming in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4908](https://github.com/facebook/docusaurus/pull/4908) feat(v2): add trailingSlash config option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4796](https://github.com/facebook/docusaurus/pull/4796) feat(v2): exhaustive docs frontmatter schema ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-types`, `docusaurus`\\n - [#4618](https://github.com/facebook/docusaurus/pull/4618) feat(v2): allow config plugins as functions or [function,options] ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils-validation`\\n - [#4759](https://github.com/facebook/docusaurus/pull/4759) feat(v2): exhaustive BlogPostFrontMatter schema validation ([@nam-hle](https://github.com/nam-hle))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5001](https://github.com/facebook/docusaurus/pull/5001) chore(v2): update Infima to alpha 26 ([@lex111](https://github.com/lex111))\\n - [#4986](https://github.com/facebook/docusaurus/pull/4986) fix(v2): fix UX for docsVersionDropdown on mobile for single version ([@slorber](https://github.com/slorber))\\n - [#4980](https://github.com/facebook/docusaurus/pull/4980) fix(v2): make proper data type for prependBaseUrlToHref field ([@lex111](https://github.com/lex111))\\n - [#4943](https://github.com/facebook/docusaurus/pull/4943) fix(v2): improve accessibility of code blocks ([@lex111](https://github.com/lex111))\\n - [#4917](https://github.com/facebook/docusaurus/pull/4917) fix(v2): tidy up Markdown page layout ([@lex111](https://github.com/lex111))\\n - [#4906](https://github.com/facebook/docusaurus/pull/4906) fix(v2): fix minor a11y issues ([@lex111](https://github.com/lex111))\\n - [#4900](https://github.com/facebook/docusaurus/pull/4900) fix(v2): adjust margin after content title ([@lex111](https://github.com/lex111))\\n - [#4855](https://github.com/facebook/docusaurus/pull/4855) chore(v2): update infima to alpha 24 ([@lex111](https://github.com/lex111))\\n - [#4819](https://github.com/facebook/docusaurus/pull/4819) fix(v2): Amend Hebrew translations ([@liorheber](https://github.com/liorheber))\\n - [#4815](https://github.com/facebook/docusaurus/pull/4815) fix(v2): Fix Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#4792](https://github.com/facebook/docusaurus/pull/4792) fix(v2): fix minor a11y issue with headings ([@lex111](https://github.com/lex111))\\n - [#4793](https://github.com/facebook/docusaurus/pull/4793) fix(v2): unbreak enhanced width of doc item wrapper ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-utils-common`\\n - [#5000](https://github.com/facebook/docusaurus/pull/5000) fix(v2): fix theme array deduplication bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#4988](https://github.com/facebook/docusaurus/pull/4988) fix(v2): redirect plugin should use siteConfig.trailingSlash ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#4983](https://github.com/facebook/docusaurus/pull/4983) fix(v2): always use UTC when dealing with blog dates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4962](https://github.com/facebook/docusaurus/pull/4962) fix(v2): respect base url in RSS feeds ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4985](https://github.com/facebook/docusaurus/pull/4985) fix(v2): navbar doc item fallback: search doc in lastVersion ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#4964](https://github.com/facebook/docusaurus/pull/4964) fix(v2): avoid duplicated imports in npm2yarn plugin ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#4970](https://github.com/facebook/docusaurus/pull/4970) fix(v2): sidebar_label should be used to compute next/previous button labels ([@slorber](https://github.com/slorber))\\n - [#4861](https://github.com/facebook/docusaurus/pull/4861) fix(v2): allow relative sidebar path resolution in docs:version command ([@lex111](https://github.com/lex111))\\n - [#4859](https://github.com/facebook/docusaurus/pull/4859) fix(v2): use frontmatter title at first for paginated links ([@lex111](https://github.com/lex111))\\n - [#4775](https://github.com/facebook/docusaurus/pull/4775) fix(v2): improve dx sidebar config, ability to have no sidebars file ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4950](https://github.com/facebook/docusaurus/pull/4950) fix(v2): sitemap plugin should handle siteConfig.trailingSlash automatically ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4924](https://github.com/facebook/docusaurus/pull/4924) fix(v2): respect baseUrl in serving command ([@lex111](https://github.com/lex111))\\n - [#4935](https://github.com/facebook/docusaurus/pull/4935) fix(v2): render children in BrowserOnly after client is ready ([@lex111](https://github.com/lex111))\\n - [#4894](https://github.com/facebook/docusaurus/pull/4894) fix(v2): escape HTML entities in user tags attributes ([@lex111](https://github.com/lex111))\\n - [#4789](https://github.com/facebook/docusaurus/pull/4789) fix(v2): transpile libs with too recent syntax with babel ([@slorber](https://github.com/slorber))\\n - [#4784](https://github.com/facebook/docusaurus/pull/4784) fix(v2): update notifier should never suggest to downgrade ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4882](https://github.com/facebook/docusaurus/pull/4882) fix(v2): fix contentTitle issues when markdown h1 title contains code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4862](https://github.com/facebook/docusaurus/pull/4862) fix(v2): remove Markdown heading id from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4871](https://github.com/facebook/docusaurus/pull/4871) fix(v2): unbreak adding of custom HTML metadatas ([@lex111](https://github.com/lex111))\\n - [#4797](https://github.com/facebook/docusaurus/pull/4797) fix(v2): do not focus on skip link if page refreshed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4856](https://github.com/facebook/docusaurus/pull/4856) fix(v2): adjust padding when custom search box location ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4830](https://github.com/facebook/docusaurus/pull/4830) fix(v2): pin prism-react-renderer version to 1.1.1 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#4806](https://github.com/facebook/docusaurus/pull/4806) chore(v2): update sharp to 0.28.2 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4995](https://github.com/facebook/docusaurus/pull/4995) refactor(v2): reduce top padding in doc content container ([@lex111](https://github.com/lex111))\\n - [#4918](https://github.com/facebook/docusaurus/pull/4918) refactor(v2): readjust footer of blog item ([@lex111](https://github.com/lex111))\\n - [#4959](https://github.com/facebook/docusaurus/pull/4959) refactor(v2): minor cleanups ([@lex111](https://github.com/lex111))\\n - [#4945](https://github.com/facebook/docusaurus/pull/4945) refactor(v2): remove extra padding from doc item container ([@lex111](https://github.com/lex111))\\n - [#4940](https://github.com/facebook/docusaurus/pull/4940) refactor(v2): improve semantic doc sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4961](https://github.com/facebook/docusaurus/pull/4961) refactor(v2): improve semantic blog sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4903](https://github.com/facebook/docusaurus/pull/4903) refactor(v2): make doc item layout more semantic ([@lex111](https://github.com/lex111))\\n - [#4877](https://github.com/facebook/docusaurus/pull/4877) refactor(v2): reduce vertical space in doc content container ([@lex111](https://github.com/lex111))\\n - [#4914](https://github.com/facebook/docusaurus/pull/4914) refactor(v2): use SVG for external link icon ([@lex111](https://github.com/lex111))\\n - [#4916](https://github.com/facebook/docusaurus/pull/4916) refactor(v2): replace strong with b in UI components ([@lex111](https://github.com/lex111))\\n - [#4926](https://github.com/facebook/docusaurus/pull/4926) refactor(v2): hide decorative SVGs from screen readers ([@lex111](https://github.com/lex111))\\n - [#4865](https://github.com/facebook/docusaurus/pull/4865) refactor(v2): make little better doc update block UI ([@lex111](https://github.com/lex111))\\n - [#4795](https://github.com/facebook/docusaurus/pull/4795) refactor(v2): remove transition on body element ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4989](https://github.com/facebook/docusaurus/pull/4989) refactor(v2): blog/docs: add more context in error messages ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4979](https://github.com/facebook/docusaurus/pull/4979) refactor(v2): cleanup console output ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#4977](https://github.com/facebook/docusaurus/pull/4977) polish(v2): url-subpath config validation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4969](https://github.com/facebook/docusaurus/pull/4969) refactor(v2): include path in error about non-existent ids ([@lex111](https://github.com/lex111))\\n - [#4863](https://github.com/facebook/docusaurus/pull/4863) refactor(v2): remove sidebar_label filed from doc metadata file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#4907](https://github.com/facebook/docusaurus/pull/4907) refactor(v2): remove type attribute from link and script tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#4919](https://github.com/facebook/docusaurus/pull/4919) refactor(v2): improve markup and styling on search page ([@lex111](https://github.com/lex111))\\n - [#4867](https://github.com/facebook/docusaurus/pull/4867) chore(v2): update @docsearch/react ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#4905](https://github.com/facebook/docusaurus/pull/4905) refactor(v2): do not generate RSS files for empty feed ([@lex111](https://github.com/lex111))\\n - [#4860](https://github.com/facebook/docusaurus/pull/4860) refactor(v2): use aliased path for blog list sidebar file ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4870](https://github.com/facebook/docusaurus/pull/4870) refactor(v2): add exception handling if external command is fails ([@lex111](https://github.com/lex111))\\n - [#4875](https://github.com/facebook/docusaurus/pull/4875) refactor(v2): make even better SSR error notify and add tip ([@lex111](https://github.com/lex111))\\n - [#4866](https://github.com/facebook/docusaurus/pull/4866) refactor(v2): output URL to console only if it has changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#4814](https://github.com/facebook/docusaurus/pull/4814) refactor(v2): purify normalizeUrl ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4987](https://github.com/facebook/docusaurus/pull/4987) docs(v2): document canary releases ([@slorber](https://github.com/slorber))\\n - [#4981](https://github.com/facebook/docusaurus/pull/4981) docs(v2): minor tweaks ([@lex111](https://github.com/lex111))\\n - [#4976](https://github.com/facebook/docusaurus/pull/4976) docs(v2): mention to install the algolia package in search doc ([@slorber](https://github.com/slorber))\\n - [#4953](https://github.com/facebook/docusaurus/pull/4953) docs(v2): add Flagsmith to showcase ([@dabeeeenster](https://github.com/dabeeeenster))\\n - [#4942](https://github.com/facebook/docusaurus/pull/4942) docs(v2): add info about `DefaultValue` prop in `Tabs` ([@ArtFlag](https://github.com/ArtFlag))\\n - [#4898](https://github.com/facebook/docusaurus/pull/4898) docs(v2): add ClarityChallenge to showcase ([@jonbarker68](https://github.com/jonbarker68))\\n - [#4896](https://github.com/facebook/docusaurus/pull/4896) docs(v2): fix incorrect link to plugin-ideal-image ([@phwt](https://github.com/phwt))\\n - [#4893](https://github.com/facebook/docusaurus/pull/4893) docs(v2): presets: fix typo in bootstrap preset ([@silva-nick](https://github.com/silva-nick))\\n - [#4887](https://github.com/facebook/docusaurus/pull/4887) docs(v2): Add Aide Jeune website to Docusaurus site showcase ([@l0u1sg](https://github.com/l0u1sg))\\n - [#4821](https://github.com/facebook/docusaurus/pull/4821) docs(v2): New doc page for math equations ([@pranabdas](https://github.com/pranabdas))\\n - [#4885](https://github.com/facebook/docusaurus/pull/4885) docs(v2): v2 migration guide: mention Algolia config update ([@slorber](https://github.com/slorber))\\n - [#4876](https://github.com/facebook/docusaurus/pull/4876) docs(v2): update steps in the github-actions section ([@wise-introvert](https://github.com/wise-introvert))\\n - [#4880](https://github.com/facebook/docusaurus/pull/4880) docs(v2): grammar typo in migration-overview.md ([@jmazin](https://github.com/jmazin))\\n - [#4879](https://github.com/facebook/docusaurus/pull/4879) docs(v2): Added FireCMS to the showcase ([@fgatti675](https://github.com/fgatti675))\\n - [#4849](https://github.com/facebook/docusaurus/pull/4849) docs(v2): fix Java syntax highlight in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4818](https://github.com/facebook/docusaurus/pull/4818) docs(v2): add mr-pdf to resources ([@antonygibbs](https://github.com/antonygibbs))\\n - [#4835](https://github.com/facebook/docusaurus/pull/4835) docs(v2): fix grammar typo on Creating pages ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n - [#4837](https://github.com/facebook/docusaurus/pull/4837) docs(v2): fix missing closing bracket ([@pmqueiroz](https://github.com/pmqueiroz))\\n - [#4820](https://github.com/facebook/docusaurus/pull/4820) docs(v2): Fix typo in doc: sidebar.md ([@pranabdas](https://github.com/pranabdas))\\n - [#4813](https://github.com/facebook/docusaurus/pull/4813) docs(v2): fix css snipped with missing color ([@slorber](https://github.com/slorber))\\n - [#4803](https://github.com/facebook/docusaurus/pull/4803) docs(v2): Add i18n tag and fix typo ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4786](https://github.com/facebook/docusaurus/pull/4786) docs(v2): Add tinaeldevresse.eu to Docusaurus\' gallery ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4780](https://github.com/facebook/docusaurus/pull/4780) docs(v2): remove docs for alpha 71 + 72 ([@slorber](https://github.com/slorber))\\n - [#4779](https://github.com/facebook/docusaurus/pull/4779) docs(v2): beta blog post edits ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4973](https://github.com/facebook/docusaurus/pull/4973) docs(v2): replace `diff` codeblocks with line highlight ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4756](https://github.com/facebook/docusaurus/pull/4756) docs(v2): Docusaurus 2 beta blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4994](https://github.com/facebook/docusaurus/pull/4994) misc: more issue template improvements ([@slorber](https://github.com/slorber))\\n - [#4951](https://github.com/facebook/docusaurus/pull/4951) misc: disable google-gtag plugin in Netlify deploys ([@lex111](https://github.com/lex111))\\n - [#4901](https://github.com/facebook/docusaurus/pull/4901) misc: optimize showcase images ([@lex111](https://github.com/lex111))\\n - [#4897](https://github.com/facebook/docusaurus/pull/4897) chore: fail CI if yarn.lock is modified on install ([@slorber](https://github.com/slorber))\\n - [#4858](https://github.com/facebook/docusaurus/pull/4858) chore(v2): add external link to community sidebar ([@lex111](https://github.com/lex111))\\n - [#4889](https://github.com/facebook/docusaurus/pull/4889) misc: issue template config typo ([@slorber](https://github.com/slorber))\\n - [#4886](https://github.com/facebook/docusaurus/pull/4886) misc: add github issue template config ([@slorber](https://github.com/slorber))\\n - [#4878](https://github.com/facebook/docusaurus/pull/4878) misc: improve bug report issue template ([@lex111](https://github.com/lex111))\\n - [#4791](https://github.com/facebook/docusaurus/pull/4791) chore: fix canary version name ([@slorber](https://github.com/slorber))\\n - [#4777](https://github.com/facebook/docusaurus/pull/4777) chore: regenerate examples on 2.0.0-beta.0 ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus`\\n - [#4944](https://github.com/facebook/docusaurus/pull/4944) chore: lockfile cleanup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`\\n - [#4902](https://github.com/facebook/docusaurus/pull/4902) chore: remove docusaurus v1 from master branch (moved to docusaurus-v1 branch) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-ideal-image`\\n - [#4915](https://github.com/facebook/docusaurus/pull/4915) chore(v2): bump react-waypoint from 9.0.2 to 10.1.0 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4834](https://github.com/facebook/docusaurus/pull/4834) chore(v2): unlock prism-react-renderer version ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus`\\n - [#4833](https://github.com/facebook/docusaurus/pull/4833) chore(v2): bump cssnano packages ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4816](https://github.com/facebook/docusaurus/pull/4816) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4790](https://github.com/facebook/docusaurus/pull/4790) chore(v2): TypeScript, use isolatedModules ([@slorber](https://github.com/slorber))\\n\\n## Committers: 31\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Ben Rometsch ([@dabeeeenster](https://github.com/dabeeeenster))\\n- Christopher Hsieh ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n- Fardeen Panjwani ([@wise-introvert](https://github.com/wise-introvert))\\n- Joel ([@Joelpo](https://github.com/Joelpo))\\n- Jon Barker ([@jonbarker68](https://github.com/jonbarker68))\\n- Jonathan Mazin ([@jmazin](https://github.com/jmazin))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lior Heber ([@liorheber](https://github.com/liorheber))\\n- Louis Gallet ([@l0u1sg](https://github.com/l0u1sg))\\n- Louis Grenard ([@louistiti](https://github.com/louistiti))\\n- Lucas Correia ([@tsirlucas](https://github.com/tsirlucas))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Pedro Queiroz ([@pmqueiroz](https://github.com/pmqueiroz))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Pratyay Banerjee ([@Neilblaze](https://github.com/Neilblaze))\\n- PsychTech ([@PsychTechApS](https://github.com/PsychTechApS))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tina\xebl Devresse ([@HunteRoi](https://github.com/HunteRoi))\\n- [@Massibian](https://github.com/Massibian)\\n- [@antonygibbs](https://github.com/antonygibbs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@e271828-](https://github.com/e271828-)\\n- [@fgatti675](https://github.com/fgatti675)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- [@silva-nick](https://github.com/silva-nick)\\n- mg ([@tiny-dancer](https://github.com/tiny-dancer))\\n- phwt.smwt ([@phwt](https://github.com/phwt))"},{"id":"/2.0.0-beta.0","metadata":{"permalink":"/changelog/2.0.0-beta.0","source":"@site/changelog/source/2.0.0-beta.0.md","title":"2.0.0-beta.0","description":"Read the 2.0.0 beta blog post!","date":"2021-05-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chris Owen","alias":"ChrisOwen101","url":"https://github.com/ChrisOwen101","imageURL":"https://github.com/ChrisOwen101.png","key":"ChrisOwen101","page":null},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Sergio Rafael Gianazza","alias":"gianu","url":"https://github.com/gianu","imageURL":"https://github.com/gianu.png","key":"gianu","page":null},{"name":"Joel Hans","alias":"joelhans","url":"https://github.com/joelhans","imageURL":"https://github.com/joelhans.png","key":"joelhans","page":null},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},{"name":"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a","alias":"KostyaTretyak","url":"https://github.com/KostyaTretyak","imageURL":"https://github.com/KostyaTretyak.png","key":"KostyaTretyak","page":null},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},{"name":"Rodrigo Moreno","alias":"rodmoreno","url":"https://github.com/rodmoreno","imageURL":"https://github.com/rodmoreno.png","key":"rodmoreno","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ian Hornik","alias":"yiliansource","url":"https://github.com/yiliansource","imageURL":"https://github.com/yiliansource.png","key":"yiliansource","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-05-12T20:00","authors":["ChrisOwen101","DigiPie","forresst","gianu","joelhans","Josh-Cena","KostyaTretyak","nam-hle","rodmoreno","slorber","yiliansource"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"nextItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nRead the [2.0.0 beta blog post](https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta)!\\n\\n**Note**: this first beta release does not contain any new major feature. We are removing the alpha label, as we are confident Docusaurus 2 is stable enough.\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4762](https://github.com/facebook/docusaurus/pull/4762) feat(v2): add es translations for docusaurus-theme-classic ([@rodmoreno](https://github.com/rodmoreno))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4750](https://github.com/facebook/docusaurus/pull/4750) fix(v2): improve french translation for theme-classic ([@forresst](https://github.com/forresst))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#4736](https://github.com/facebook/docusaurus/pull/4736) fix(v2): fix encoding of markdown image/file inline file-loaders ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4735](https://github.com/facebook/docusaurus/pull/4735) fix(v2): markdown title parser should ignore all forms of MDX import statements ([@nam-hle](https://github.com/nam-hle))\\n - [#4729](https://github.com/facebook/docusaurus/pull/4729) fix(v2): optimize markdown parser regex (Closes [#4726](https://github.com/facebook/docusaurus/issues/4726)) ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- [#4770](https://github.com/facebook/docusaurus/pull/4770) docs(v2): Improve intro doc ([@slorber](https://github.com/slorber))\\n- [#4773](https://github.com/facebook/docusaurus/pull/4773) docs(v2): fix i18n doc: bad i18n page plugin path in code sample ([@KostyaTretyak](https://github.com/KostyaTretyak))\\n- [#4758](https://github.com/facebook/docusaurus/pull/4758) docs(v2): add browsers support documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4757](https://github.com/facebook/docusaurus/pull/4757) docs(v2): Add Netdata to showcase ([@joelhans](https://github.com/joelhans))\\n- [#4754](https://github.com/facebook/docusaurus/pull/4754) docs(v2): fix Jest showcase screenshot ([@slorber](https://github.com/slorber))\\n- [#4747](https://github.com/facebook/docusaurus/pull/4747) docs(v2): Update showcase page ([@slorber](https://github.com/slorber))\\n- [#4734](https://github.com/facebook/docusaurus/pull/4734) docs(v2): Added MediaMachine.io to showcase ([@gianu](https://github.com/gianu))\\n- [#4731](https://github.com/facebook/docusaurus/pull/4731) docs(v2): add CodeYourFuture to showcase ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- [#4703](https://github.com/facebook/docusaurus/pull/4703) docs(v2): specify google-analytics and gtag plugins ([@yiliansource](https://github.com/yiliansource))\\n- [#4727](https://github.com/facebook/docusaurus/pull/4727) docs(v2): fix doc lint ([@slorber](https://github.com/slorber))\\n- [#4725](https://github.com/facebook/docusaurus/pull/4725) docs(v2): emphasize subset of markdown supported languages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4711](https://github.com/facebook/docusaurus/pull/4711) docs(v2): showcase personal site evantay ([@DigiPie](https://github.com/DigiPie))\\n\\n## :house: Internal\\n\\n- [#4746](https://github.com/facebook/docusaurus/pull/4746) chore(v2): attempt to fix crowdin dl again ([@slorber](https://github.com/slorber))\\n- [#4743](https://github.com/facebook/docusaurus/pull/4743) chore(v2): fix prod deployment due to bad image path ([@slorber](https://github.com/slorber))\\n- [#4740](https://github.com/facebook/docusaurus/pull/4740) chore(v2): delay i18n-staging deployment to avoid Crowdin 409 errors ([@slorber](https://github.com/slorber))\\n- [#4739](https://github.com/facebook/docusaurus/pull/4739) chore(v2): Fix Crowdin 409 issues in CI ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Chris Owen ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ian Hornik ([@yiliansource](https://github.com/yiliansource))\\n- Joel Hans ([@joelhans](https://github.com/joelhans))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Rodrigo Moreno ([@rodmoreno](https://github.com/rodmoreno))\\n- Sergio Rafael Gianazza ([@gianu](https://github.com/gianu))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a ([@KostyaTretyak](https://github.com/KostyaTretyak))"},{"id":"/2.0.0-alpha.75","metadata":{"permalink":"/changelog/2.0.0-alpha.75","source":"@site/changelog/source/2.0.0-alpha.75.md","title":"2.0.0-alpha.75","description":"Breaking Change","date":"2021-04-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Geoffroy Empain","alias":"gempain","url":"https://github.com/gempain","imageURL":"https://github.com/gempain.png","key":"gempain","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tommy Chen","alias":"tommy351","url":"https://github.com/tommy351","imageURL":"https://github.com/tommy351.png","key":"tommy351","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-30T20:00","authors":["gempain","RDIL","slorber","tommy351"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"nextItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#4089](https://github.com/facebook/docusaurus/pull/4089) feat(v2): Webpack 5, PostCSS 8 ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- [#4704](https://github.com/facebook/docusaurus/pull/4704) docs(v2): showcase meli ([@gempain](https://github.com/gempain))\\n- [#4699](https://github.com/facebook/docusaurus/pull/4699) docs(v2): Add Kosko to showcase ([@tommy351](https://github.com/tommy351))\\n\\n## Committers: 4\\n\\n- Geoffroy Empain ([@gempain](https://github.com/gempain))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy Chen ([@tommy351](https://github.com/tommy351))"},{"id":"/2.0.0-alpha.74","metadata":{"permalink":"/changelog/2.0.0-alpha.74","source":"@site/changelog/source/2.0.0-alpha.74.md","title":"2.0.0-alpha.74","description":"New Feature","date":"2021-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"alena-ko","alias":"alena-ko","url":"https://github.com/alena-ko","imageURL":"https://github.com/alena-ko.png","key":"alena-ko","page":null},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"kazk","alias":"kazk","url":"https://github.com/kazk","imageURL":"https://github.com/kazk.png","key":"kazk","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"Luis Medina Huerta","alias":"luism3861","url":"https://github.com/luism3861","imageURL":"https://github.com/luism3861.png","key":"luism3861","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"Tommy","alias":"react-learner","url":"https://github.com/react-learner","imageURL":"https://github.com/react-learner.png","key":"react-learner","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-27T20:00","authors":["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"nextItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#4515](https://github.com/facebook/docusaurus/pull/4515) feat(v2): add tag filters to showcase page ([@lisa761](https://github.com/lisa761))\\n- `docusaurus-plugin-content-docs`\\n - [#4658](https://github.com/facebook/docusaurus/pull/4658) feat(v2): allow user to customize/enhance the default sidebar items generator ([@slorber](https://github.com/slorber))\\n - [#4655](https://github.com/facebook/docusaurus/pull/4655) feat(v2): docs, make numberPrefixParser configurable, better defaults, minor breaking-changes ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#4688](https://github.com/facebook/docusaurus/pull/4688) fix(v2): fix title logic (meta vs heading) + ignore fixed anchor id syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4689](https://github.com/facebook/docusaurus/pull/4689) chore(v2): update infima to alpha 23 ([@slorber](https://github.com/slorber))\\n - [#4667](https://github.com/facebook/docusaurus/pull/4667) fix(v2): Unbreak blog post title by handling title fallback in `LayoutHead` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#4687](https://github.com/facebook/docusaurus/pull/4687) fix(v2): accept empty/null custom_edit_url docs frontmatter for retrocompat ([@slorber](https://github.com/slorber))\\n - [#4651](https://github.com/facebook/docusaurus/pull/4651) fix(v2): sidebar autogen from subfolder should read category metadata correctly ([@slorber](https://github.com/slorber))\\n - [#4629](https://github.com/facebook/docusaurus/pull/4629) fix(v2): fix validation rejecting admonitions false ([@kazk](https://github.com/kazk))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#4654](https://github.com/facebook/docusaurus/pull/4654) fix(v2): fix too strict markdown frontmatter validation ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-utils`\\n - [#4646](https://github.com/facebook/docusaurus/pull/4646) fix(v2): ignore imports when h1 heading parsing ([@lex111](https://github.com/lex111))\\n - [#4641](https://github.com/facebook/docusaurus/pull/4641) fix(v2): parse headings directly after h1 properly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4682](https://github.com/facebook/docusaurus/pull/4682) refactor(v2): align external icon on right ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#4496](https://github.com/facebook/docusaurus/pull/4496) docs(v2): Add Qovery to deployment doc ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#4680](https://github.com/facebook/docusaurus/pull/4680) docs(v2): Fix urls in deployment.md ([@luism3861](https://github.com/luism3861))\\n- [#4668](https://github.com/facebook/docusaurus/pull/4668) docs(v2): Add Hostman to deployment doc ([@alena-ko](https://github.com/alena-ko))\\n- [#4676](https://github.com/facebook/docusaurus/pull/4676) docs(v2): Add Daily Digest - COVID-19 IN FRANCE to showcase ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- [#4643](https://github.com/facebook/docusaurus/pull/4643) docs(v2): Fix typo in installation.md ([@react-learner](https://github.com/react-learner))\\n- [#4649](https://github.com/facebook/docusaurus/pull/4649) docs(v2): Add new showcase user ([@JeremyDolle](https://github.com/JeremyDolle))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4670](https://github.com/facebook/docusaurus/pull/4670) chore: add some redirects to v1.docusaurus.io ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4631](https://github.com/facebook/docusaurus/pull/4631) chore(v2): update examples to use alpha73 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 12\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Luis Medina Huerta ([@luism3861](https://github.com/luism3861))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy ([@react-learner](https://github.com/react-learner))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@alena-ko](https://github.com/alena-ko)\\n- kazk ([@kazk](https://github.com/kazk))"},{"id":"/2.0.0-alpha.73","metadata":{"permalink":"/changelog/2.0.0-alpha.73","source":"@site/changelog/source/2.0.0-alpha.73.md","title":"2.0.0-alpha.73","description":"New Feature","date":"2021-04-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aehrea","alias":"aehrea","url":"https://github.com/aehrea","imageURL":"https://github.com/aehrea.png","key":"aehrea","page":null},{"name":"Ajeet Singh Raina, Docker Captain, RedisLabs","alias":"ajeetraina","url":"https://github.com/ajeetraina","imageURL":"https://github.com/ajeetraina.png","key":"ajeetraina","page":null},{"name":"akepecs","alias":"akepecs","url":"https://github.com/akepecs","imageURL":"https://github.com/akepecs.png","key":"akepecs","page":null},{"name":"Anthony Bobsin","alias":"AnthonyBobsin","url":"https://github.com/AnthonyBobsin","imageURL":"https://github.com/AnthonyBobsin.png","key":"AnthonyBobsin","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Artur Carvalho","alias":"arturcarvalho","url":"https://github.com/arturcarvalho","imageURL":"https://github.com/arturcarvalho.png","key":"arturcarvalho","page":null},{"name":"Dennis Thompson","alias":"atomicpages","url":"https://github.com/atomicpages","imageURL":"https://github.com/atomicpages.png","key":"atomicpages","page":null},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},{"name":"Guillaume Claret","alias":"clarus","url":"https://github.com/clarus","imageURL":"https://github.com/clarus.png","key":"clarus","page":null},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},{"name":"Dick Wyn Yong","alias":"dickwyn","url":"https://github.com/dickwyn","imageURL":"https://github.com/dickwyn.png","key":"dickwyn","page":null},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},{"name":"Foxeye-Rinx","alias":"Foxeye-Rinx","url":"https://github.com/Foxeye-Rinx","imageURL":"https://github.com/Foxeye-Rinx.png","key":"Foxeye-Rinx","page":null},{"name":"Brent Ely","alias":"gitbrent","url":"https://github.com/gitbrent","imageURL":"https://github.com/gitbrent.png","key":"gitbrent","page":null},{"name":"Marco Enrico","alias":"gumacahin","url":"https://github.com/gumacahin","imageURL":"https://github.com/gumacahin.png","key":"gumacahin","page":null},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},{"name":"Chris Kanich","alias":"kaytwo","url":"https://github.com/kaytwo","imageURL":"https://github.com/kaytwo.png","key":"kaytwo","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},{"name":"Lucas Alves","alias":"lucalves","url":"https://github.com/lucalves","imageURL":"https://github.com/lucalves.png","key":"lucalves","page":null},{"name":"miku86","alias":"miku86","url":"https://github.com/miku86","imageURL":"https://github.com/miku86.png","key":"miku86","page":null},{"name":"Pedro Pi\xf1era Buend\xeda","alias":"pepibumur","url":"https://github.com/pepibumur","imageURL":"https://github.com/pepibumur.png","key":"pepibumur","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"serut","alias":"serut","url":"https://github.com/serut","imageURL":"https://github.com/serut.png","key":"serut","page":null},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Steve","alias":"steveworley","url":"https://github.com/steveworley","imageURL":"https://github.com/steveworley.png","key":"steveworley","page":null},{"name":"guoxudong","alias":"sunny0826","url":"https://github.com/sunny0826","imageURL":"https://github.com/sunny0826.png","key":"sunny0826","page":null},{"name":"Tales Porto","alias":"talesporto","url":"https://github.com/talesporto","imageURL":"https://github.com/talesporto.png","key":"talesporto","page":null},{"name":"Thiago Sciotta","alias":"thiagog3","url":"https://github.com/thiagog3","imageURL":"https://github.com/thiagog3.png","key":"thiagog3","page":null},{"name":"Tiago Ribeiro","alias":"tiago-rr","url":"https://github.com/tiago-rr","imageURL":"https://github.com/tiago-rr.png","key":"tiago-rr","page":null},{"name":"Tom Raviv","alias":"tomrav","url":"https://github.com/tomrav","imageURL":"https://github.com/tomrav.png","key":"tomrav","page":null},{"name":"Tony Narlock","alias":"tony","url":"https://github.com/tony","imageURL":"https://github.com/tony.png","key":"tony","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-16T20:00","authors":["aehrea","ajeetraina","akepecs","AnthonyBobsin","armano2","arturcarvalho","atomicpages","besemuna","clarus","covalentbond","dickwyn","duanwilliam","forresst","Foxeye-Rinx","gitbrent","gumacahin","jknoxville","johnnyreilly","kaytwo","lex111","lisa761","loozhengyuan","lucalves","miku86","pepibumur","RDIL","SamChou19815","serut","ShinteiMai","slorber","steveworley","sunny0826","talesporto","thiagog3","tiago-rr","tomrav","tony"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"nextItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4624](https://github.com/facebook/docusaurus/pull/4624) feat(v2): Add Filipino default translations to theme ([@gumacahin](https://github.com/gumacahin))\\n - [#4596](https://github.com/facebook/docusaurus/pull/4596) feat(v2): theme default translations hindi ([@lisa761](https://github.com/lisa761))\\n - [#4536](https://github.com/facebook/docusaurus/pull/4536) feat(v2): add pt-PT translations for docusaurus-theme-classic ([@tiago-rr](https://github.com/tiago-rr))\\n - [#4525](https://github.com/facebook/docusaurus/pull/4525) feat(v2): add Brazilian Portuguese translation for docusaurus-theme-classic ([@thiagog3](https://github.com/thiagog3))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4511](https://github.com/facebook/docusaurus/pull/4511) feat(v2): add unique page/wrapper className to each theme pages ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4545](https://github.com/facebook/docusaurus/pull/4545) feat(v2): docusaurus deploy: ability to configure port in git url ([@talesporto](https://github.com/talesporto))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#4590](https://github.com/facebook/docusaurus/pull/4590) feat(v2): various markdown string parsing improvements/fixes ([@slorber](https://github.com/slorber))\\n - [#4485](https://github.com/facebook/docusaurus/pull/4485) feat(v2): frontmatter-less: read first heading as title and use it in front-matter ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils`\\n - [#4581](https://github.com/facebook/docusaurus/pull/4581) feat(v2): default theme translations: locale \\"pt\\" should load \\"pt-BR\\" translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4495](https://github.com/facebook/docusaurus/pull/4495) feat(v2): include frontmatter in loadedContent doc metadatas ([@kaytwo](https://github.com/kaytwo))\\n - [#4500](https://github.com/facebook/docusaurus/pull/4500) feat(v2): provide doc sidebar_label through sidebars.js ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4449](https://github.com/facebook/docusaurus/pull/4449) feat(v2): infer default i18n locale config from locale code ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4621](https://github.com/facebook/docusaurus/pull/4621) fix(v2): center align content if no sidebar exists ([@lex111](https://github.com/lex111))\\n - [#4620](https://github.com/facebook/docusaurus/pull/4620) fix(v2): restore toggle responsive sidebar button ([@lex111](https://github.com/lex111))\\n - [#4598](https://github.com/facebook/docusaurus/pull/4598) fix(v2): render escaped HTML entities inside code properly ([@lex111](https://github.com/lex111))\\n - [#4554](https://github.com/facebook/docusaurus/pull/4554) fix: DocNavbarItem error message ([@serut](https://github.com/serut))\\n - [#4468](https://github.com/facebook/docusaurus/pull/4468) fix(v2): select correct tab when items are incorrectly ordered ([@armano2](https://github.com/armano2))\\n - [#4461](https://github.com/facebook/docusaurus/pull/4461) fix(v2): Fix i18n staging deployment due to json typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4541](https://github.com/facebook/docusaurus/pull/4541) fix(v2): fix code block title parsing, support multiple metastring attributes ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4600](https://github.com/facebook/docusaurus/pull/4600) fix(v2): use page title from config if not set ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4501](https://github.com/facebook/docusaurus/pull/4501) fix(v2): fail-safe usage of browser storage (localStorage/sessionStorage) when access is denied ([@jknoxville](https://github.com/jknoxville))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#4593](https://github.com/facebook/docusaurus/pull/4593) fix(v2): i18n perf issue: getTranslationFile() should not load content again ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4574](https://github.com/facebook/docusaurus/pull/4574) fix(v2): examples should use Node 14 by default on CodeSandbox + regen with alpha72 ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4547](https://github.com/facebook/docusaurus/pull/4547) feat(v2) : use symbols to denote swizzle safety ([@besemuna](https://github.com/besemuna))\\n - [#4575](https://github.com/facebook/docusaurus/pull/4575) fix(v2): fix i18n isLastLocale bug preventing docusaurus from building some locales ([@slorber](https://github.com/slorber))\\n - [#4506](https://github.com/facebook/docusaurus/pull/4506) fix(v2): remove no longer used postcss-present-env from dependencies ([@armano2](https://github.com/armano2))\\n - [#4444](https://github.com/facebook/docusaurus/pull/4444) fix(v2): Fix writeHeadingIds on Windows due to non-posix paths ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4507](https://github.com/facebook/docusaurus/pull/4507) fix(v2): do not warn about duplicated title for pages ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4466](https://github.com/facebook/docusaurus/pull/4466) fix(v2): i18n fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4459](https://github.com/facebook/docusaurus/pull/4459) fix(v2): Export Joi from validation-utils package ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4617](https://github.com/facebook/docusaurus/pull/4617) refactor(v2): simplify and optimize sidebar ([@slorber](https://github.com/slorber))\\n - [#4608](https://github.com/facebook/docusaurus/pull/4608) refactor(v2): replace react-toggle with own implementation ([@lex111](https://github.com/lex111))\\n - [#4601](https://github.com/facebook/docusaurus/pull/4601) refactor(v2): increase heading anchor offset ([@lex111](https://github.com/lex111))\\n - [#4467](https://github.com/facebook/docusaurus/pull/4467) refactor(v2): add missing types to theme-classic useTheme ([@armano2](https://github.com/armano2))\\n - [#4448](https://github.com/facebook/docusaurus/pull/4448) polish(v2): Add german translations ([@miku86](https://github.com/miku86))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4451](https://github.com/facebook/docusaurus/pull/4451) refactor(v2): correct client types and type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4450](https://github.com/facebook/docusaurus/pull/4450) chore(v2): Fix more linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4442](https://github.com/facebook/docusaurus/pull/4442) chore(v2): Fix linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4375](https://github.com/facebook/docusaurus/pull/4375) refactor(v2): TS config update: reduce the size of npm modules ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4616](https://github.com/facebook/docusaurus/pull/4616) docs(v2): add showcase: kubevela ([@sunny0826](https://github.com/sunny0826))\\n - [#4612](https://github.com/facebook/docusaurus/pull/4612) docs(v2): Added IntelAGENT website to showcase. ([@akepecs](https://github.com/akepecs))\\n - [#4609](https://github.com/facebook/docusaurus/pull/4609) docs(v2): add clarity to tip in versioned using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4606](https://github.com/facebook/docusaurus/pull/4606) docs(v2): heading typo ([@arturcarvalho](https://github.com/arturcarvalho))\\n - [#4604](https://github.com/facebook/docusaurus/pull/4604) docs(v2): add clarity to tip in using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4602](https://github.com/facebook/docusaurus/pull/4602) docs(v2): Add \\"PptxGenJS\\" to showcase ([@gitbrent](https://github.com/gitbrent))\\n - [#4599](https://github.com/facebook/docusaurus/pull/4599) docs(v2): i18n site: enable ko + zh-CN locales ([@slorber](https://github.com/slorber))\\n - [#4595](https://github.com/facebook/docusaurus/pull/4595) docs(v2): fix typo theme-configuration.md ([@forresst](https://github.com/forresst))\\n - [#4594](https://github.com/facebook/docusaurus/pull/4594) docs(v2): Include docusaurus-protobuffet to community plugins ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n - [#4558](https://github.com/facebook/docusaurus/pull/4558) docs(v2): fixed broken link in i18n-tutorial.md ([@covalentbond](https://github.com/covalentbond))\\n - [#4573](https://github.com/facebook/docusaurus/pull/4573) docs: update README badges ([@slorber](https://github.com/slorber))\\n - [#4559](https://github.com/facebook/docusaurus/pull/4559) docs(v2): fixed the directory of index.js ([@covalentbond](https://github.com/covalentbond))\\n - [#4568](https://github.com/facebook/docusaurus/pull/4568) docs(v2): add social-embed to showcase ([@tony](https://github.com/tony))\\n - [#4570](https://github.com/facebook/docusaurus/pull/4570) docs(v2): Add Redis Labs Developer Site to docusaurus showcase page ([@ajeetraina](https://github.com/ajeetraina))\\n - [#4543](https://github.com/facebook/docusaurus/pull/4543) docs(v2): fix run-on sentence ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4539](https://github.com/facebook/docusaurus/pull/4539) docs(v2): fix typo deployment.mdx ([@forresst](https://github.com/forresst))\\n - [#4538](https://github.com/facebook/docusaurus/pull/4538) Add Tuist to the list of projects that use Docusaurus ([@pepibumur](https://github.com/pepibumur))\\n - [#4531](https://github.com/facebook/docusaurus/pull/4531) docs(v2): remove duplicate line on v1 docs ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4524](https://github.com/facebook/docusaurus/pull/4524) docs(v2): config for self-hosted docsearch crawler ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4526](https://github.com/facebook/docusaurus/pull/4526) docs(v2): fix markdown headings level 4 ([@forresst](https://github.com/forresst))\\n - [#4505](https://github.com/facebook/docusaurus/pull/4505) docs(v2): add more links to v1: announcementBar, versionDropdown, homepage ([@slorber](https://github.com/slorber))\\n - [#4497](https://github.com/facebook/docusaurus/pull/4497) docs: fix link to issue template ([@forresst](https://github.com/forresst))\\n - [#4481](https://github.com/facebook/docusaurus/pull/4481) docs(v2): fix grammar and improve wording ([@aehrea](https://github.com/aehrea))\\n - [#4472](https://github.com/facebook/docusaurus/pull/4472) docs(v2): fixed broken link in sidebar documentation ([@covalentbond](https://github.com/covalentbond))\\n - [#4470](https://github.com/facebook/docusaurus/pull/4470) docs(v2): Add missing i18n docs: API lifecycles + Crowdin migration guide ([@slorber](https://github.com/slorber))\\n - [#4460](https://github.com/facebook/docusaurus/pull/4460) docs(v2): use explicit heading IDs ([@lex111](https://github.com/lex111))\\n - [#4446](https://github.com/facebook/docusaurus/pull/4446) docs(v2): Add blog.johnnyreilly.com to showcase ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#4430](https://github.com/facebook/docusaurus/pull/4430) docs(v2): add Deploy with QuandCDN ([@steveworley](https://github.com/steveworley))\\n - [#4441](https://github.com/facebook/docusaurus/pull/4441) docs(v2): add stylable site to users showcase list ([@tomrav](https://github.com/tomrav))\\n- `docusaurus-init`\\n - [#4561](https://github.com/facebook/docusaurus/pull/4561) docs(v2): add a missing slug from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4560](https://github.com/facebook/docusaurus/pull/4560) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n - [#4546](https://github.com/facebook/docusaurus/pull/4546) docs(v2): add a missing \\"export\\" from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4320](https://github.com/facebook/docusaurus/pull/4320) feat(v2): Improve the initial templates #4302 ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-migrate`, `docusaurus`\\n - [#4479](https://github.com/facebook/docusaurus/pull/4479) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4463](https://github.com/facebook/docusaurus/pull/4463) chore: fb json header commit typo ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4613](https://github.com/facebook/docusaurus/pull/4613) chore(v2): fix yarn2 end2end test by using lerna publish --exact ([@slorber](https://github.com/slorber))\\n - [#4611](https://github.com/facebook/docusaurus/pull/4611) chore(v2): CI: do not build all locales when monitoring build time perf ([@slorber](https://github.com/slorber))\\n - [#4486](https://github.com/facebook/docusaurus/pull/4486) ci: enable yarn install cache ([@armano2](https://github.com/armano2))\\n - [#4508](https://github.com/facebook/docusaurus/pull/4508) ci: change default actions timeout from 6h to 30m ([@armano2](https://github.com/armano2))\\n - [#4488](https://github.com/facebook/docusaurus/pull/4488) chore(v2): fix typo in classic init template ([@clarus](https://github.com/clarus))\\n - [#4471](https://github.com/facebook/docusaurus/pull/4471) chore: fix GH actions lint problem matchers issue in PR ([@slorber](https://github.com/slorber))\\n - [#4458](https://github.com/facebook/docusaurus/pull/4458) chore(v2): enable staging locales: ko ja ([@slorber](https://github.com/slorber))\\n - [#4457](https://github.com/facebook/docusaurus/pull/4457) chore(v2): remove docs for alpha v70 ([@lex111](https://github.com/lex111))\\n - [#4452](https://github.com/facebook/docusaurus/pull/4452) chore(v2): update typescript-eslint to v4.18.0 ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#4516](https://github.com/facebook/docusaurus/pull/4516) ci(v2): fail CI if build takes too much time ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4490](https://github.com/facebook/docusaurus/pull/4490) chore: rename v2.docusaurus.io urls after domain switch + redirect + cleanups ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#4475](https://github.com/facebook/docusaurus/pull/4475) chore: prepare v1-v2 domain switch ([@slorber](https://github.com/slorber))\\n - [#4447](https://github.com/facebook/docusaurus/pull/4447) chore: simplify CI setup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`\\n - [#4453](https://github.com/facebook/docusaurus/pull/4453) chore(v2): migrate babel-eslint to @babel/eslint-parser ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils-validation`\\n - [#4464](https://github.com/facebook/docusaurus/pull/4464) chore(v2): Joi cyclic dep warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4462](https://github.com/facebook/docusaurus/pull/4462) chore: json files should be linted ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4603](https://github.com/facebook/docusaurus/pull/4603) perf(v2): avoid rerender of sidebar items while scrolling ([@lex111](https://github.com/lex111))\\n - [#4473](https://github.com/facebook/docusaurus/pull/4473) perf(v2): reduce amount of component updates while scrolling ([@armano2](https://github.com/armano2))\\n\\n## Committers: 37\\n\\n- Ajeet Singh Raina, Docker Captain, RedisLabs ([@ajeetraina](https://github.com/ajeetraina))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anthony Bobsin ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Artur Carvalho ([@arturcarvalho](https://github.com/arturcarvalho))\\n- Brent Ely ([@gitbrent](https://github.com/gitbrent))\\n- Chris Kanich ([@kaytwo](https://github.com/kaytwo))\\n- Dennis Thompson ([@atomicpages](https://github.com/atomicpages))\\n- Dick Wyn Yong ([@dickwyn](https://github.com/dickwyn))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Guillaume Claret ([@clarus](https://github.com/clarus))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Lucas Alves ([@lucalves](https://github.com/lucalves))\\n- Marco Enrico ([@gumacahin](https://github.com/gumacahin))\\n- Pedro Pi\xf1era Buend\xeda ([@pepibumur](https://github.com/pepibumur))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Steve ([@steveworley](https://github.com/steveworley))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tales Porto ([@talesporto](https://github.com/talesporto))\\n- Thiago Sciotta ([@thiagog3](https://github.com/thiagog3))\\n- Tiago Ribeiro ([@tiago-rr](https://github.com/tiago-rr))\\n- Tom Raviv ([@tomrav](https://github.com/tomrav))\\n- Tony Narlock ([@tony](https://github.com/tony))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))\\n- [@Foxeye-Rinx](https://github.com/Foxeye-Rinx)\\n- [@aehrea](https://github.com/aehrea)\\n- [@akepecs](https://github.com/akepecs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@miku86](https://github.com/miku86)\\n- [@serut](https://github.com/serut)\\n- guoxudong ([@sunny0826](https://github.com/sunny0826))"},{"id":"/2.0.0-alpha.72","metadata":{"permalink":"/changelog/2.0.0-alpha.72","source":"@site/changelog/source/2.0.0-alpha.72.md","title":"2.0.0-alpha.72","description":"Breaking Change","date":"2021-03-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Harvtronix","alias":"Harvtronix","url":"https://github.com/Harvtronix","imageURL":"https://github.com/Harvtronix.png","key":"Harvtronix","page":null},{"name":"Joon-Ha Lee","alias":"koko8829","url":"https://github.com/koko8829","imageURL":"https://github.com/koko8829.png","key":"koko8829","page":null},{"name":"Leandro Oriente","alias":"leandrooriente","url":"https://github.com/leandrooriente","imageURL":"https://github.com/leandrooriente.png","key":"leandrooriente","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"Lowen","alias":"lowenhere","url":"https://github.com/lowenhere","imageURL":"https://github.com/lowenhere.png","key":"lowenhere","page":null},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},{"name":"Quan","alias":"quanengineering","url":"https://github.com/quanengineering","imageURL":"https://github.com/quanengineering.png","key":"quanengineering","page":null},{"name":"Rhodanthe1116","alias":"Rhodanthe1116","url":"https://github.com/Rhodanthe1116","imageURL":"https://github.com/Rhodanthe1116.png","key":"Rhodanthe1116","page":null},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Zoltan Kochan","alias":"zkochan","url":"https://github.com/zkochan","imageURL":"https://github.com/zkochan.png","key":"zkochan","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-16T20:00","authors":["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"nextItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\nStarting with this release for a proper work of i18n functionality, you need to either use Node v14+ or in case of using earlier version of Node.js install [`full-icu` package](https://www.npmjs.com/package/full-icu) and set `NODE_ICU_DATA` environment variable in your npm scripts, for example:\\n\\n```json\\n\\"scripts\\": {\\n \\"start\\": \\"cross-env NODE_ICU_DATA=node_modules/full-icu docusaurus start\\"\\n}\\n```\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`\\n - [#4302](https://github.com/facebook/docusaurus/pull/4302) feat(v2): Improve the initial templates ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-theme-classic`\\n - [#4390](https://github.com/facebook/docusaurus/pull/4390) feat(v2): Add korean default translations ([@koko8829](https://github.com/koko8829))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4429](https://github.com/facebook/docusaurus/pull/4429) chore(v2): upgrade Infima to v0.2.0-alpha.21 ([@lex111](https://github.com/lex111))\\n - [#4428](https://github.com/facebook/docusaurus/pull/4428) fix(v2): allow using pre tag in Markdown directly ([@lex111](https://github.com/lex111))\\n - [#4381](https://github.com/facebook/docusaurus/pull/4381) fix(v2): specify proper TS path in classic theme ([@lex111](https://github.com/lex111))\\n - [#4383](https://github.com/facebook/docusaurus/pull/4383) fix(v2): set theme color mode for SSR ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4424](https://github.com/facebook/docusaurus/pull/4424) fix(v2): add missing peer dep on @babel/core ([@SimenB](https://github.com/SimenB))\\n - [#4377](https://github.com/facebook/docusaurus/pull/4377) fix(v2): PWA issues + improve docs ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4407](https://github.com/facebook/docusaurus/pull/4407) fix(v2): broken link checker should not report false positives when using encoded chars ([@Harvtronix](https://github.com/Harvtronix))\\n- Other\\n - [#4410](https://github.com/facebook/docusaurus/pull/4410) fix(v1): Fix v1 site deployment with Crowdin again... ([@slorber](https://github.com/slorber))\\n - [#4396](https://github.com/facebook/docusaurus/pull/4396) fix(v1): Temp fix v1 site deployment: fail-safe on Crowdin upload translations error ([@slorber](https://github.com/slorber))\\n - [#4395](https://github.com/facebook/docusaurus/pull/4395) fix(v1): fix v1 site deploy issues ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4418](https://github.com/facebook/docusaurus/pull/4418) refactor(v2): correct plugin types ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4405](https://github.com/facebook/docusaurus/pull/4405) refactor(v2): i18n cleanups / refactors ([@longlho](https://github.com/longlho))\\n- `docusaurus-module-type-aliases`\\n - [#4387](https://github.com/facebook/docusaurus/pull/4387) refactor(v2): add ExecutionEnvironment, BrowserOnly, isInternalUrl to type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#4402](https://github.com/facebook/docusaurus/pull/4402) refactor(v2): merge linkify function used in blog and docs and align properties ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4382](https://github.com/facebook/docusaurus/pull/4382) refactor(v2): correct some of type errors reported by eslint ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4385](https://github.com/facebook/docusaurus/pull/4385) refactor(v2): add missing theme-classic types ([@armano2](https://github.com/armano2))\\n\\n## :memo: Documentation\\n\\n- [#4416](https://github.com/facebook/docusaurus/pull/4416) docs(v2): add Realtime Web Applications Workshop to showcase ([@lowenhere](https://github.com/lowenhere))\\n- [#4408](https://github.com/facebook/docusaurus/pull/4408) docs(v2): add gladysassistant.com to showcase ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- [#4386](https://github.com/facebook/docusaurus/pull/4386) docs(v2): Showcase the pnpm docs ([@zkochan](https://github.com/zkochan))\\n- [#4367](https://github.com/facebook/docusaurus/pull/4367) docs(v2): releasing i18n blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#4401](https://github.com/facebook/docusaurus/pull/4401) chore(v1): fix CircleCI v1 site deploy ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4399](https://github.com/facebook/docusaurus/pull/4399) chore(v2): upgrade example projects ([@slorber](https://github.com/slorber))\\n - [#4398](https://github.com/facebook/docusaurus/pull/4398) chore(v1): trigger v1 site deploy through CI ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4384](https://github.com/facebook/docusaurus/pull/4384) chore(v2): avoid bad publish of intl-locales-supported ([@lex111](https://github.com/lex111))\\n\\n## Committers: 14\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Harvtronix ([@Harvtronix](https://github.com/Harvtronix))\\n- Joon-Ha Lee ([@koko8829](https://github.com/koko8829))\\n- Leandro Oriente ([@leandrooriente](https://github.com/leandrooriente))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Lowen ([@lowenhere](https://github.com/lowenhere))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Quan ([@quanengineering](https://github.com/quanengineering))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Zoltan Kochan ([@zkochan](https://github.com/zkochan))\\n- [@Rhodanthe1116](https://github.com/Rhodanthe1116)"},{"id":"/2.0.0-alpha.71","metadata":{"permalink":"/changelog/2.0.0-alpha.71","source":"@site/changelog/source/2.0.0-alpha.71.md","title":"2.0.0-alpha.71","description":"New Feature","date":"2021-03-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},{"name":"Joel M","alias":"9oelM","url":"https://github.com/9oelM","imageURL":"https://github.com/9oelM.png","key":"9oelM","page":null},{"name":"Apurva Ojas","alias":"apurvaojas","url":"https://github.com/apurvaojas","imageURL":"https://github.com/apurvaojas.png","key":"apurvaojas","page":null},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"Jola","alias":"asystentka-jolka","url":"https://github.com/asystentka-jolka","imageURL":"https://github.com/asystentka-jolka.png","key":"asystentka-jolka","page":null},{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},{"name":"aukokyong","alias":"aukokyong","url":"https://github.com/aukokyong","imageURL":"https://github.com/aukokyong.png","key":"aukokyong","page":null},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},{"name":"Martin Ad\xe1mek","alias":"B4nan","url":"https://github.com/B4nan","imageURL":"https://github.com/B4nan.png","key":"B4nan","page":null},{"name":"Ben","alias":"ben-qnimble","url":"https://github.com/ben-qnimble","imageURL":"https://github.com/ben-qnimble.png","key":"ben-qnimble","page":null},{"name":"BennoDev","alias":"bennodev19","url":"https://github.com/bennodev19","imageURL":"https://github.com/bennodev19.png","key":"bennodev19","page":null},{"name":"\xc7a\u011flar Tural\u0131","alias":"caglarturali","url":"https://github.com/caglarturali","imageURL":"https://github.com/caglarturali.png","key":"caglarturali","page":null},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"Eduardo L\xe1zaro","alias":"edulazaro","url":"https://github.com/edulazaro","imageURL":"https://github.com/edulazaro.png","key":"edulazaro","page":null},{"name":"Eric Carboni","alias":"eric-hc","url":"https://github.com/eric-hc","imageURL":"https://github.com/eric-hc.png","key":"eric-hc","page":null},{"name":"Mohd Shad Mirza","alias":"iamshadmirza","url":"https://github.com/iamshadmirza","imageURL":"https://github.com/iamshadmirza.png","key":"iamshadmirza","page":null},{"name":"Bhargav Ponnapalli","alias":"imbhargav5","url":"https://github.com/imbhargav5","imageURL":"https://github.com/imbhargav5.png","key":"imbhargav5","page":null},{"name":"Ivan Ru\u017eevi\u0107","alias":"iruzevic","url":"https://github.com/iruzevic","imageURL":"https://github.com/iruzevic.png","key":"iruzevic","page":null},{"name":"Jessica Lin","alias":"jlin27","url":"https://github.com/jlin27","imageURL":"https://github.com/jlin27.png","key":"jlin27","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Juan Carlos Blanco Delgado","alias":"juancarlosjr97","url":"https://github.com/juancarlosjr97","imageURL":"https://github.com/juancarlosjr97.png","key":"juancarlosjr97","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Kumar Aditya","alias":"kumaraditya303","url":"https://github.com/kumaraditya303","imageURL":"https://github.com/kumaraditya303.png","key":"kumaraditya303","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},{"name":"Power Lin","alias":"linyuxuanlin","url":"https://github.com/linyuxuanlin","imageURL":"https://github.com/linyuxuanlin.png","key":"linyuxuanlin","page":null},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},{"name":"Miroiu Emanuel","alias":"miroiu","url":"https://github.com/miroiu","imageURL":"https://github.com/miroiu.png","key":"miroiu","page":null},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Sean Campbell","alias":"natac13","url":"https://github.com/natac13","imageURL":"https://github.com/natac13.png","key":"natac13","page":null},{"name":"Nico Jansen","alias":"nicojs","url":"https://github.com/nicojs","imageURL":"https://github.com/nicojs.png","key":"nicojs","page":null},{"name":"Nikolay Samokhvalov","alias":"NikolayS","url":"https://github.com/NikolayS","imageURL":"https://github.com/NikolayS.png","key":"NikolayS","page":null},{"name":"Nathan Bosscher","alias":"ntbosscher","url":"https://github.com/ntbosscher","imageURL":"https://github.com/ntbosscher.png","key":"ntbosscher","page":null},{"name":"Matt Oestreich","alias":"oze4","url":"https://github.com/oze4","imageURL":"https://github.com/oze4.png","key":"oze4","page":null},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},{"name":"Saihajpreet Singh","alias":"saihaj","url":"https://github.com/saihaj","imageURL":"https://github.com/saihaj.png","key":"saihaj","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Sam Hrncir","alias":"samhrncir","url":"https://github.com/samhrncir","imageURL":"https://github.com/samhrncir.png","key":"samhrncir","page":null},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},{"name":"saydo17","alias":"saydo17","url":"https://github.com/saydo17","imageURL":"https://github.com/saydo17.png","key":"saydo17","page":null},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},{"name":"Siemienik Pawel","alias":"Siemienik","url":"https://github.com/Siemienik","imageURL":"https://github.com/Siemienik.png","key":"Siemienik","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"Sam Sam","alias":"sksamuel","url":"https://github.com/sksamuel","imageURL":"https://github.com/sksamuel.png","key":"sksamuel","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Ankur Kedia","alias":"theankurkedia","url":"https://github.com/theankurkedia","imageURL":"https://github.com/theankurkedia.png","key":"theankurkedia","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Tien Vo Xuan","alias":"tienvx","url":"https://github.com/tienvx","imageURL":"https://github.com/tienvx.png","key":"tienvx","page":null},{"name":"tokarchyn","alias":"tokarchyn","url":"https://github.com/tokarchyn","imageURL":"https://github.com/tokarchyn.png","key":"tokarchyn","page":null},{"name":"Tomas Fernandez","alias":"tomsfernandez","url":"https://github.com/tomsfernandez","imageURL":"https://github.com/tomsfernandez.png","key":"tomsfernandez","page":null},{"name":"Vamsi Krishna Reddy Satti","alias":"vamsi3","url":"https://github.com/vamsi3","imageURL":"https://github.com/vamsi3.png","key":"vamsi3","page":null},{"name":"Kevin Viglucci","alias":"viglucci","url":"https://github.com/viglucci","imageURL":"https://github.com/viglucci.png","key":"viglucci","page":null},{"name":"Welly","alias":"wellyshen","url":"https://github.com/wellyshen","imageURL":"https://github.com/wellyshen.png","key":"wellyshen","page":null},{"name":"wolf20482","alias":"wolf20482","url":"https://github.com/wolf20482","imageURL":"https://github.com/wolf20482.png","key":"wolf20482","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Yash Totale","alias":"YashTotale","url":"https://github.com/YashTotale","imageURL":"https://github.com/YashTotale.png","key":"YashTotale","page":null},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null},{"name":"Yuri Sulyma","alias":"ysulyma","url":"https://github.com/ysulyma","imageURL":"https://github.com/ysulyma.png","key":"ysulyma","page":null},{"name":"Yuval Hazaz","alias":"yuval-hazaz","url":"https://github.com/yuval-hazaz","imageURL":"https://github.com/yuval-hazaz.png","key":"yuval-hazaz","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-09T20:00","authors":["3alisaki","9oelM","apurvaojas","armano2","ArtFlag","asystentka-jolka","ataft","aukokyong","ayonious","B4nan","ben-qnimble","bennodev19","caglarturali","christian-bromann","dbrrt","edno","edulazaro","eric-hc","iamshadmirza","imbhargav5","iruzevic","jlin27","JoelMarcey","juancarlosjr97","juzhiyuan","kumaraditya303","lex111","limkinZero","linyuxuanlin","lisa761","LittleboyHarry","longlho","manzinello","massoudmaboudi","MatanBobi","miroiu","MisterFISHUP","moonrailgun","natac13","nicojs","NikolayS","ntbosscher","oze4","philipp985","RDIL","roydukkey","saihaj","SamChou19815","samhrncir","sammychinedu2ky","saydo17","semoal","Siemienik","Simek","sksamuel","slorber","theankurkedia","TheodoreChu","tienvx","tokarchyn","tomsfernandez","vamsi3","viglucci","wellyshen","wolf20482","yangshun","YashTotale","ykzts","ysulyma","yuval-hazaz"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"nextItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#4222](https://github.com/facebook/docusaurus/pull/4222) feat(v2): add ability to set custom heading id ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#4328](https://github.com/facebook/docusaurus/pull/4328) feat(v2): Add playgroundPosition config for live codeblock ([@tokarchyn](https://github.com/tokarchyn))\\n- `docusaurus-theme-classic`\\n - [#4209](https://github.com/facebook/docusaurus/pull/4209) feat(v2): auto focus to tab if it is outside viewport ([@lex111](https://github.com/lex111))\\n - [#4329](https://github.com/facebook/docusaurus/pull/4329) feat(v2): add arabic translation ([@3alisaki](https://github.com/3alisaki))\\n - [#4325](https://github.com/facebook/docusaurus/pull/4325) feat(v2): [theme-classic] add Polish translation ([@Simek](https://github.com/Simek))\\n - [#4312](https://github.com/facebook/docusaurus/pull/4312) feat(v2): Add Turkish translations for theme labels ([@caglarturali](https://github.com/caglarturali))\\n - [#4271](https://github.com/facebook/docusaurus/pull/4271) feat(v2): add Farsi default translations ([@slorber](https://github.com/slorber))\\n - [#4261](https://github.com/facebook/docusaurus/pull/4261) feat(v2): add icon to generic sidebar link ([@lex111](https://github.com/lex111))\\n - [#4109](https://github.com/facebook/docusaurus/pull/4109) feat(v2): default canonical urls ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4308](https://github.com/facebook/docusaurus/pull/4308) feat(v2): add --config option to CLI ([@longlho](https://github.com/longlho))\\n - [#4185](https://github.com/facebook/docusaurus/pull/4185) feat(v2): allow extend PostCSS config ([@lex111](https://github.com/lex111))\\n - [#4021](https://github.com/facebook/docusaurus/pull/4021) feat(v2): Allow plugins to consume webpack stats ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4303](https://github.com/facebook/docusaurus/pull/4303) feat(v2): add japanese translations ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4295](https://github.com/facebook/docusaurus/pull/4295) feat(v2): Add Interpolate / interpolate APIs + complete theme translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#4278](https://github.com/facebook/docusaurus/pull/4278) feat(v2): ability to \\"escape\\" JSX in MDX files as code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4232](https://github.com/facebook/docusaurus/pull/4232) feat(v2): editUrl functions should receive md doc permalink ([@slorber](https://github.com/slorber))\\n - [#4121](https://github.com/facebook/docusaurus/pull/4121) feat(v2): editUrl function for advanced use-cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4218](https://github.com/facebook/docusaurus/pull/4218) feat(v2): support/use React v17 by default ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#4215](https://github.com/facebook/docusaurus/pull/4215) feat(v2): Add i18n default code translation bundles ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4140](https://github.com/facebook/docusaurus/pull/4140) feat(v2): add support for RTL direction ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4199](https://github.com/facebook/docusaurus/pull/4199) feat(v2): allow to change location of search bar ([@lex111](https://github.com/lex111))\\n - [#3993](https://github.com/facebook/docusaurus/pull/3993) feat(v2): themed logo in footer ([@natac13](https://github.com/natac13))\\n- `docusaurus`\\n - [#4198](https://github.com/facebook/docusaurus/pull/4198) feat(v2): add fonts loaders + webpack resolve.roots ([@slorber](https://github.com/slorber))\\n - [#3998](https://github.com/facebook/docusaurus/pull/3998) feat(v2): Cache hashed assets to dedicated folders ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#3979](https://github.com/facebook/docusaurus/pull/3979) feat(v2): better error message for invalid plugin config ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4168](https://github.com/facebook/docusaurus/pull/4168) feat(v2): Extract/translate hardcoded labels from classic theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4098](https://github.com/facebook/docusaurus/pull/4098) feat(v2): improve templates, use JSDoc type annotation, improve `docusaurus.config.js` autocompletion ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-init`, `docusaurus-migrate`\\n - [#3986](https://github.com/facebook/docusaurus/pull/3986) feat(v2): skip dependency install on docusaurus init ([@kumaraditya303](https://github.com/kumaraditya303))\\n- `docusaurus-plugin-content-docs`\\n - [#3949](https://github.com/facebook/docusaurus/pull/3949) feat(v2): new docs edit options: editCurrentVersion + editLocalizedDocs ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4223](https://github.com/facebook/docusaurus/pull/4223) chore(v2): upgrade dependencies + require Node 12 ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#4366](https://github.com/facebook/docusaurus/pull/4366) fix(v2): align installed core-js version with babel config ([@armano2](https://github.com/armano2))\\n - [#4345](https://github.com/facebook/docusaurus/pull/4345) fix(v2): always extract translations from site/src ([@slorber](https://github.com/slorber))\\n - [#4342](https://github.com/facebook/docusaurus/pull/4342) chore(v2): bump clean-css to 5.1.1 ([@lex111](https://github.com/lex111))\\n - [#4212](https://github.com/facebook/docusaurus/pull/4212) fix(v2): typo in resolve.roots ([@slorber](https://github.com/slorber))\\n - [#4155](https://github.com/facebook/docusaurus/pull/4155) fix(v2): BaseUrl issue banner insertion should be prevented if JS can load ([@slorber](https://github.com/slorber))\\n - [#4137](https://github.com/facebook/docusaurus/pull/4137) fix(v2): escape apostrophes in route paths ([@lex111](https://github.com/lex111))\\n - [#4136](https://github.com/facebook/docusaurus/pull/4136) fix(v2): fix navigation from homepage ([@lex111](https://github.com/lex111))\\n - [#4125](https://github.com/facebook/docusaurus/pull/4125) fix(v2): baseUrl help banner should not be indexed by Google / SEO ([@slorber](https://github.com/slorber))\\n - [#4080](https://github.com/facebook/docusaurus/pull/4080) fix(v2): chokidar reloading debounced ([@semoal](https://github.com/semoal))\\n - [#3965](https://github.com/facebook/docusaurus/pull/3965) fix(v2): fix svg loader for CSS files ([@apurvaojas](https://github.com/apurvaojas))\\n - [#3943](https://github.com/facebook/docusaurus/pull/3943) fix(v2): disables all inlining in CleanCSS ([@lex111](https://github.com/lex111))\\n - [#3941](https://github.com/facebook/docusaurus/pull/3941) fix(v2): fix i18n build logging. ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4349](https://github.com/facebook/docusaurus/pull/4349) fix(v2): fix update code translations script + update some translations ([@slorber](https://github.com/slorber))\\n - [#4311](https://github.com/facebook/docusaurus/pull/4311) fix(v2): fit footer in viewport when content area is too small ([@lex111](https://github.com/lex111))\\n - [#4340](https://github.com/facebook/docusaurus/pull/4340) fix(v2): prevent useless blog pages to be in search results ([@slorber](https://github.com/slorber))\\n - [#4274](https://github.com/facebook/docusaurus/pull/4274) fix(v2): theme classic should have lib-next prettified ([@slorber](https://github.com/slorber))\\n - [#4267](https://github.com/facebook/docusaurus/pull/4267) fix(v2): Allow null as valid for title of item in footer links. ([@ben-qnimble](https://github.com/ben-qnimble))\\n - [#4254](https://github.com/facebook/docusaurus/pull/4254) fix(v2): fix LTR PostCSS bug on Netlify and monorepo symlinks ([@slorber](https://github.com/slorber))\\n - [#4247](https://github.com/facebook/docusaurus/pull/4247) fix(v2): make doc container full width when hidden sidebar ([@lex111](https://github.com/lex111))\\n - [#4241](https://github.com/facebook/docusaurus/pull/4241) fix(v2): avoid horizontal scrolling when long lines of code ([@lex111](https://github.com/lex111))\\n - [#4200](https://github.com/facebook/docusaurus/pull/4200) fix(v2): various minor bugs with location hash ([@lex111](https://github.com/lex111))\\n - [#4195](https://github.com/facebook/docusaurus/pull/4195) fix(v2): restore hamburger menu ([@lex111](https://github.com/lex111))\\n - [#4189](https://github.com/facebook/docusaurus/pull/4189) fix(v2): prevent click on item menu with children on mobiles ([@lex111](https://github.com/lex111))\\n - [#4176](https://github.com/facebook/docusaurus/pull/4176) fix(v2): make locale dropdown accessible from keyboard ([@lex111](https://github.com/lex111))\\n - [#4163](https://github.com/facebook/docusaurus/pull/4163) fix(v2): fix warning and improve styling inline TOC ([@lex111](https://github.com/lex111))\\n - [#4162](https://github.com/facebook/docusaurus/pull/4162) fix(v2): make more accessible skip link ([@lex111](https://github.com/lex111))\\n - [#4160](https://github.com/facebook/docusaurus/pull/4160) fix(v2): fix hreflang headers ([@slorber](https://github.com/slorber))\\n - [#4147](https://github.com/facebook/docusaurus/pull/4147) fix(v2): avoid misuse section tag in blog posts ([@lex111](https://github.com/lex111))\\n - [#4146](https://github.com/facebook/docusaurus/pull/4146) fix(v2): use current color for language icon ([@lex111](https://github.com/lex111))\\n - [#4118](https://github.com/facebook/docusaurus/pull/4118) fix(v2): navbar dropdown subitems should be translated properly ([@slorber](https://github.com/slorber))\\n - [#4011](https://github.com/facebook/docusaurus/pull/4011) fix(v2): fix accessibility issue with IconArrow ([@natac13](https://github.com/natac13))\\n - [#3968](https://github.com/facebook/docusaurus/pull/3968) fix(v2): fix blog only contextual search ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#4315](https://github.com/facebook/docusaurus/pull/4315) fix(v2): make code blocks more standalone ([@lex111](https://github.com/lex111))\\n - [#4277](https://github.com/facebook/docusaurus/pull/4277) fix(v2): Code blocks should be LTR by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#4318](https://github.com/facebook/docusaurus/pull/4318) fix(v2): evaluate code in live editor on client only ([@lex111](https://github.com/lex111))\\n - [#3954](https://github.com/facebook/docusaurus/pull/3954) fix(v2): allow async/await in live code editor ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4339](https://github.com/facebook/docusaurus/pull/4339) fix(v2): search page results localization ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4304](https://github.com/facebook/docusaurus/pull/4304) fix(v2): fix bad theme pluralization rules for some labels ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`\\n - [#4240](https://github.com/facebook/docusaurus/pull/4240) fix(v2): remove PostCSS plugin for combine duplicated selectors ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4234](https://github.com/facebook/docusaurus/pull/4234) fix(v2): fix website versions page ([@slorber](https://github.com/slorber))\\n - [#4233](https://github.com/facebook/docusaurus/pull/4233) fix(v2): website editUrl should target upstream docs ([@slorber](https://github.com/slorber))\\n - [#4067](https://github.com/facebook/docusaurus/pull/4067) fix(v2): Fix blog post url/date ([@slorber](https://github.com/slorber))\\n - [#3952](https://github.com/facebook/docusaurus/pull/3952) docs(v2): Fix invalid json ([@oze4](https://github.com/oze4))\\n- `docusaurus-theme-search-algolia`\\n - [#4188](https://github.com/facebook/docusaurus/pull/4188) fix(v2): prepend docsearch modal to body element ([@lex111](https://github.com/lex111))\\n - [#4154](https://github.com/facebook/docusaurus/pull/4154) fix(v2): add base url to opensearch.xml ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#4166](https://github.com/facebook/docusaurus/pull/4166) fix(v2): ideal image assets should be served under ./assets ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4092](https://github.com/facebook/docusaurus/pull/4092) fix(v2): fix/enhance minor i18n issues reported ([@slorber](https://github.com/slorber))\\n - [#3940](https://github.com/facebook/docusaurus/pull/3940) fix(v2): i18n should not crash theme without footer ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#4004](https://github.com/facebook/docusaurus/pull/4004) fix(v2): Fix double trailingSlash in sitemap.xml ([@ntbosscher](https://github.com/ntbosscher))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#3970](https://github.com/facebook/docusaurus/pull/3970) fix(v2): fix multi-instance mdx loaders not sandboxed correctly ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#3903](https://github.com/facebook/docusaurus/pull/3903) fix(v2): fix redirect toUrl (windows + trailing slash) ([@saydo17](https://github.com/saydo17))\\n- `docusaurus-utils`\\n - [#3944](https://github.com/facebook/docusaurus/pull/3944) fix(v2): ignore style imports in excerpt ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4371](https://github.com/facebook/docusaurus/pull/4371) refactor(v2): update Russian translation in classic theme ([@lex111](https://github.com/lex111))\\n - [#4359](https://github.com/facebook/docusaurus/pull/4359) polish(v2): [theme-classic] slightly improve Japanese translation ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n - [#4350](https://github.com/facebook/docusaurus/pull/4350) polish(v2): Updated theme label translations for Turkish ([@caglarturali](https://github.com/caglarturali))\\n - [#4351](https://github.com/facebook/docusaurus/pull/4351) polish(v2): add japanese translation for #4304 ([@ykzts](https://github.com/ykzts))\\n - [#4309](https://github.com/facebook/docusaurus/pull/4309) polish(v2): improved Farsi translation ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4279](https://github.com/facebook/docusaurus/pull/4279) polish(v2): theme default translations for language de / german ([@philipp985](https://github.com/philipp985))\\n - [#4275](https://github.com/facebook/docusaurus/pull/4275) polish(v2): Add more tags translations ([@slorber](https://github.com/slorber))\\n - [#4246](https://github.com/facebook/docusaurus/pull/4246) refactor(v2): add Russian translation for classic theme ([@lex111](https://github.com/lex111))\\n - [#4242](https://github.com/facebook/docusaurus/pull/4242) refactor(v2): use Link component for external links ([@lex111](https://github.com/lex111))\\n - [#4244](https://github.com/facebook/docusaurus/pull/4244) refactor(v2): clean-ups and fixes ([@lex111](https://github.com/lex111))\\n - [#4193](https://github.com/facebook/docusaurus/pull/4193) refactor(v2): update tabs to follow WAI-ARIA spec ([@lex111](https://github.com/lex111))\\n - [#4194](https://github.com/facebook/docusaurus/pull/4194) refactor(v2): use transform instead of top position for hideable navbar ([@lex111](https://github.com/lex111))\\n - [#4167](https://github.com/facebook/docusaurus/pull/4167) refactor(v2): minor styling improvements ([@lex111](https://github.com/lex111))\\n - [#4169](https://github.com/facebook/docusaurus/pull/4169) refactor(v2): remove delay after skip link pressed ([@lex111](https://github.com/lex111))\\n - [#4086](https://github.com/facebook/docusaurus/pull/4086) style(v2): add className to tab container ([@ArtFlag](https://github.com/ArtFlag))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4352](https://github.com/facebook/docusaurus/pull/4352) refactor(v2): format last updated date using Intl ([@lex111](https://github.com/lex111))\\n - [#4243](https://github.com/facebook/docusaurus/pull/4243) refactor(v2): introduce Seo component for internal using ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4344](https://github.com/facebook/docusaurus/pull/4344) refactor(v2): format post date using Intl ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4257](https://github.com/facebook/docusaurus/pull/4257) refactor(v2): improve notifier message ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4219](https://github.com/facebook/docusaurus/pull/4219) refactor(v2): add more translatable strings ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4074](https://github.com/facebook/docusaurus/pull/4074) polish(v2): improve codesandbox template package.json ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3953](https://github.com/facebook/docusaurus/pull/3953) refactor(v2): fix debug plugin name ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#3946](https://github.com/facebook/docusaurus/pull/3946) refactor(v2): minor a11y tweaks ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4369](https://github.com/facebook/docusaurus/pull/4369) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n - [#4362](https://github.com/facebook/docusaurus/pull/4362) docs(v2): Add stryker-mutator.io to showcase ([@nicojs](https://github.com/nicojs))\\n - [#4354](https://github.com/facebook/docusaurus/pull/4354) docs(v2): add trpgengine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#4346](https://github.com/facebook/docusaurus/pull/4346) docs(v1): update phrasing for website dir relative to docs dir ([@aukokyong](https://github.com/aukokyong))\\n - [#4338](https://github.com/facebook/docusaurus/pull/4338) docs(v2): update showcase instruction regarding tags + fix site tags ([@slorber](https://github.com/slorber))\\n - [#4331](https://github.com/facebook/docusaurus/pull/4331) docs(v2): add ocpeasy to users ([@dbrrt](https://github.com/dbrrt))\\n - [#4307](https://github.com/facebook/docusaurus/pull/4307) docs(v2): Add RactivePlayer to showcase ([@ysulyma](https://github.com/ysulyma))\\n - [#4297](https://github.com/facebook/docusaurus/pull/4297) docs(v2): Fix examples by importing React ([@roydukkey](https://github.com/roydukkey))\\n - [#4296](https://github.com/facebook/docusaurus/pull/4296) docs(v2): move migrated sites from v1 to v2 showcase ([@lisa761](https://github.com/lisa761))\\n - [#4293](https://github.com/facebook/docusaurus/pull/4293) docs(v2): Added React Native ARIA to showcase ([@theankurkedia](https://github.com/theankurkedia))\\n - [#4284](https://github.com/facebook/docusaurus/pull/4284) docs(v2): Add AttoBot website to showcase page ([@wolf20482](https://github.com/wolf20482))\\n - [#4285](https://github.com/facebook/docusaurus/pull/4285) docs(v2): escape more jsx in mdx files for Crowdin ([@slorber](https://github.com/slorber))\\n - [#4283](https://github.com/facebook/docusaurus/pull/4283) docs(v2): Add Postgres.ai to showcase ([@NikolayS](https://github.com/NikolayS))\\n - [#4282](https://github.com/facebook/docusaurus/pull/4282) docs: update Netlify deploy status badge ([@slorber](https://github.com/slorber))\\n - [#4259](https://github.com/facebook/docusaurus/pull/4259) docs(v2): improve cli docs ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4266](https://github.com/facebook/docusaurus/pull/4266) docs(v2): update agilets banner ([@bennodev19](https://github.com/bennodev19))\\n - [#4263](https://github.com/facebook/docusaurus/pull/4263) docs(v2): remove npx and use github action to configure ssh key ([@MatanBobi](https://github.com/MatanBobi))\\n - [#4262](https://github.com/facebook/docusaurus/pull/4262) docs(v2): Added kotest to showcase ([@sksamuel](https://github.com/sksamuel))\\n - [#4256](https://github.com/facebook/docusaurus/pull/4256) docs(v2): Add docusaurus2-graphql-doc-generator to community resources ([@edno](https://github.com/edno))\\n - [#4252](https://github.com/facebook/docusaurus/pull/4252) docs(v2): Added mailgo to showcase ([@manzinello](https://github.com/manzinello))\\n - [#4251](https://github.com/facebook/docusaurus/pull/4251) docs(v2): Add Axioms to showcase ([@limkinZero](https://github.com/limkinZero))\\n - [#4237](https://github.com/facebook/docusaurus/pull/4237) docs(v2): Replace mbt-bundle by sicope-model ([@tienvx](https://github.com/tienvx))\\n - [#4236](https://github.com/facebook/docusaurus/pull/4236) docs(v2): v2 migration should mention RSS feed url change ([@slorber](https://github.com/slorber))\\n - [#4230](https://github.com/facebook/docusaurus/pull/4230) docs(v2): fix npm/yarn command example for swizzling TypeScript theme components ([@YashTotale](https://github.com/YashTotale))\\n - [#4229](https://github.com/facebook/docusaurus/pull/4229) docs(v2): Fix link to slash introduction svg ([@SamChou19815](https://github.com/SamChou19815))\\n - [#4226](https://github.com/facebook/docusaurus/pull/4226) docs(v2): Removing wrong parenthesis on image variable ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n - [#4225](https://github.com/facebook/docusaurus/pull/4225) docs(v2): added Apache APISIX ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#4224](https://github.com/facebook/docusaurus/pull/4224) docs(v2): Add MikroORM site to showcase page ([@B4nan](https://github.com/B4nan))\\n - [#4220](https://github.com/facebook/docusaurus/pull/4220) Add WebdriverIO docs page as showcase ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4210](https://github.com/facebook/docusaurus/pull/4210) misc: add requirements for sites being added to showcase ([@lex111](https://github.com/lex111))\\n - [#4207](https://github.com/facebook/docusaurus/pull/4207) docs(v2): Added Console Table Documentation Site to showcase ([@ayonious](https://github.com/ayonious))\\n - [#4204](https://github.com/facebook/docusaurus/pull/4204) docs(v1): fixing a broken link in blog posts ([@ayonious](https://github.com/ayonious))\\n - [#4178](https://github.com/facebook/docusaurus/pull/4178) docs(v2): localize 404 page with Netlify + docs ([@slorber](https://github.com/slorber))\\n - [#4177](https://github.com/facebook/docusaurus/pull/4177) docs(v2): Add docusaurus-plugin-remote-content to resources list ([@RDIL](https://github.com/RDIL))\\n - [#4172](https://github.com/facebook/docusaurus/pull/4172) docs(v2): Add react-hooks.org to showcase ([@imbhargav5](https://github.com/imbhargav5))\\n - [#4173](https://github.com/facebook/docusaurus/pull/4173) docs(v2): typo fixing double colon ([@ayonious](https://github.com/ayonious))\\n - [#4164](https://github.com/facebook/docusaurus/pull/4164) docs(v2): add a note for images not rendered on dev server ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n - [#4161](https://github.com/facebook/docusaurus/pull/4161) docs(v2): Add docusaurus-theme-github-codeblock ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4158](https://github.com/facebook/docusaurus/pull/4158) docs(v2): improve bad static assets doc + remove some useless useBaseUrl usage ([@slorber](https://github.com/slorber))\\n - [#4144](https://github.com/facebook/docusaurus/pull/4144) docs(v2): community docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4143](https://github.com/facebook/docusaurus/pull/4143) docs(v2): guide docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4141](https://github.com/facebook/docusaurus/pull/4141) docs(v2): plugins docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4139](https://github.com/facebook/docusaurus/pull/4139) docs(v2): Add Rematch site to showcase page ([@semoal](https://github.com/semoal))\\n - [#4128](https://github.com/facebook/docusaurus/pull/4128) docs(v2): remove duplicate link from docs about Docusaurus1 ([@ayonious](https://github.com/ayonious))\\n - [#4129](https://github.com/facebook/docusaurus/pull/4129) docs(v2): typo fix in Migration Docs ([@ayonious](https://github.com/ayonious))\\n - [#4127](https://github.com/facebook/docusaurus/pull/4127) docs(v2): remove unnecessary brace from installation doc ([@ayonious](https://github.com/ayonious))\\n - [#4130](https://github.com/facebook/docusaurus/pull/4130) docs(v2): typo in i18n docs ([@ayonious](https://github.com/ayonious))\\n - [#4112](https://github.com/facebook/docusaurus/pull/4112) docs(v2): Do not encourage using the permalink prop ([@slorber](https://github.com/slorber))\\n - [#4106](https://github.com/facebook/docusaurus/pull/4106) docs(v2): update broken link on resources page ([@eric-hc](https://github.com/eric-hc))\\n - [#4084](https://github.com/facebook/docusaurus/pull/4084) docs(v2): Use the TOCInline component in config doc ([@slorber](https://github.com/slorber))\\n - [#4020](https://github.com/facebook/docusaurus/pull/4020) docs(v2): 2020 recap blog post ([@slorber](https://github.com/slorber))\\n - [#4009](https://github.com/facebook/docusaurus/pull/4009) docs(v2): add hideableSidebar option to config demo ([@natac13](https://github.com/natac13))\\n - [#4062](https://github.com/facebook/docusaurus/pull/4062) docs(v2): Add codesandbox integration ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n - [#4058](https://github.com/facebook/docusaurus/pull/4058) docs(v2): Include new.docusaurus.io CodeSandbox in issue templates + README ([@slorber](https://github.com/slorber))\\n - [#4053](https://github.com/facebook/docusaurus/pull/4053) docs(v2): Add Eightshift Docs site to showcase page ([@iruzevic](https://github.com/iruzevic))\\n - [#4048](https://github.com/facebook/docusaurus/pull/4048) docs(v1): Docker: remind the user to use the --host flag ([@tomsfernandez](https://github.com/tomsfernandez))\\n - [#4047](https://github.com/facebook/docusaurus/pull/4047) docs(v1): version page should recommend v2 ([@slorber](https://github.com/slorber))\\n - [#4046](https://github.com/facebook/docusaurus/pull/4046) docs(v2): add sciwp to showcase ([@edulazaro](https://github.com/edulazaro))\\n - [#4036](https://github.com/facebook/docusaurus/pull/4036) docs(v2): Add Nodify to showcase ([@miroiu](https://github.com/miroiu))\\n - [#4038](https://github.com/facebook/docusaurus/pull/4038) docs(v1): suggest to use Docusaurus 2 even for non-FB websites ([@slorber](https://github.com/slorber))\\n - [#4026](https://github.com/facebook/docusaurus/pull/4026) docs(v2): Add FlexIt to showcase ([@ataft](https://github.com/ataft))\\n - [#4022](https://github.com/facebook/docusaurus/pull/4022) docs: fix typo from \'dissapear\' to \'disappear\' ([@vamsi3](https://github.com/vamsi3))\\n - [#4002](https://github.com/facebook/docusaurus/pull/4002) docs(v2): Add how to run your own DocSearch ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#3997](https://github.com/facebook/docusaurus/pull/3997) docs(v2): Add Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#3990](https://github.com/facebook/docusaurus/pull/3990) docs(v2): Add wiki-powerto site showcase ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n - [#3991](https://github.com/facebook/docusaurus/pull/3991) docs(v2): add overwriting css variables for dark mode ([@natac13](https://github.com/natac13))\\n - [#3987](https://github.com/facebook/docusaurus/pull/3987) docs(v2): Add AgileTs site to showcase page ([@bennodev19](https://github.com/bennodev19))\\n - [#3978](https://github.com/facebook/docusaurus/pull/3978) docs(v2): Add documentation for docs multi-instance support ([@slorber](https://github.com/slorber))\\n - [#3977](https://github.com/facebook/docusaurus/pull/3977) docs(v2): nudge users to add site to showcase ([@slorber](https://github.com/slorber))\\n - [#3975](https://github.com/facebook/docusaurus/pull/3975) docs(v2): Reorganize/split the guides doc / markdown sections ([@slorber](https://github.com/slorber))\\n - [#3976](https://github.com/facebook/docusaurus/pull/3976) docs(v2): Add AI-Speaker site to showcase page ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n - [#3974](https://github.com/facebook/docusaurus/pull/3974) docs(v2): doc typo on sidebar admonition ([@slorber](https://github.com/slorber))\\n - [#3962](https://github.com/facebook/docusaurus/pull/3962) docs(v2): Add migration info doc regarding docs folder location ([@slorber](https://github.com/slorber))\\n - [#3950](https://github.com/facebook/docusaurus/pull/3950) docs(v2): update GitHub entreprise deployment doc ([@samhrncir](https://github.com/samhrncir))\\n - [#3945](https://github.com/facebook/docusaurus/pull/3945) docs(v2): Added information about setting `/` in routeBasePath ([@Siemienik](https://github.com/Siemienik))\\n- `docusaurus-theme-classic`\\n - [#4356](https://github.com/facebook/docusaurus/pull/4356) polish(v2): [theme-classic] add Chinese translations (zh-Hant & zh-Hans) ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus`\\n - [#4126](https://github.com/facebook/docusaurus/pull/4126) docs(v2): do not recommend using useBaseUrl() hook in most cases ([@slorber](https://github.com/slorber))\\n - [#4049](https://github.com/facebook/docusaurus/pull/4049) docs(v1): version page should recommend v2 (bis) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4014](https://github.com/facebook/docusaurus/pull/4014) docs(v2): i18n doc + polish ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#4034](https://github.com/facebook/docusaurus/pull/4034) docs(v2): Add READMEs to v2 packages ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`\\n - [#3881](https://github.com/facebook/docusaurus/pull/3881) docs(v2): update FB OSS logo ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4372](https://github.com/facebook/docusaurus/pull/4372) chore(v1): release docusaurus v1.14.7 ([@slorber](https://github.com/slorber))\\n - [#4368](https://github.com/facebook/docusaurus/pull/4368) chore(deps): bump elliptic from 6.5.3 to 6.5.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#4365](https://github.com/facebook/docusaurus/pull/4365) chore: unstable yarnlock ([@slorber](https://github.com/slorber))\\n - [#4337](https://github.com/facebook/docusaurus/pull/4337) misc: restore build size bot ([@slorber](https://github.com/slorber))\\n - [#4289](https://github.com/facebook/docusaurus/pull/4289) chore(v2): remove docs for alpha v69 ([@lex111](https://github.com/lex111))\\n - [#4253](https://github.com/facebook/docusaurus/pull/4253) chore(v2): remove docs for alpha v68 ([@lex111](https://github.com/lex111))\\n - [#4248](https://github.com/facebook/docusaurus/pull/4248) chore(v2): Fix build size bot ([@slorber](https://github.com/slorber))\\n - [#4214](https://github.com/facebook/docusaurus/pull/4214) chore(v2): setup for i18n staging deployment ([@slorber](https://github.com/slorber))\\n - [#4159](https://github.com/facebook/docusaurus/pull/4159) chore(v2): fix build size bot again ([@slorber](https://github.com/slorber))\\n - [#4156](https://github.com/facebook/docusaurus/pull/4156) chore(v2): fix build size bot monitoring of js/css assets ([@slorber](https://github.com/slorber))\\n - [#4100](https://github.com/facebook/docusaurus/pull/4100) chore(v2): remove docs for alpha v66 ([@lex111](https://github.com/lex111))\\n - [#4077](https://github.com/facebook/docusaurus/pull/4077) chore(v2): fix unstable master yarn.lock ([@slorber](https://github.com/slorber))\\n - [#4063](https://github.com/facebook/docusaurus/pull/4063) chore(v2): Regen codesandbox templates + add template: \\"docusaurus\\" ([@slorber](https://github.com/slorber))\\n - [#4056](https://github.com/facebook/docusaurus/pull/4056) chore(v2): update codesandbox redirect ([@slorber](https://github.com/slorber))\\n - [#4041](https://github.com/facebook/docusaurus/pull/4041) chore(v1): revert v1 netlify.toml ([@slorber](https://github.com/slorber))\\n - [#4040](https://github.com/facebook/docusaurus/pull/4040) chore(v1): upgrade v1 Crowdin cli + CI config ([@slorber](https://github.com/slorber))\\n - [#4030](https://github.com/facebook/docusaurus/pull/4030) chore(v2): install Crowdin cli through npm package ([@slorber](https://github.com/slorber))\\n - [#4003](https://github.com/facebook/docusaurus/pull/4003) chore: add DevContainer config for GitHub codespaces ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#4001](https://github.com/facebook/docusaurus/pull/4001) chore(v2): Upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#3995](https://github.com/facebook/docusaurus/pull/3995) chore(v2): remove docs for alpha v65 ([@lex111](https://github.com/lex111))\\n - [#3960](https://github.com/facebook/docusaurus/pull/3960) fix(v2): remove duplicate section on Versions page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#4370](https://github.com/facebook/docusaurus/pull/4370) chore(v2): update infima ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4361](https://github.com/facebook/docusaurus/pull/4361) refactor(v2): remove duplicated lodash dependencies and import only what needed ([@armano2](https://github.com/armano2))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#4270](https://github.com/facebook/docusaurus/pull/4270) chore(v2): upgrade react-dev-utils ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#4264](https://github.com/facebook/docusaurus/pull/4264) chore(v2): bump/align deps in monorepo: commander, semver, fs-extra ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#4265](https://github.com/facebook/docusaurus/pull/4265) chore(v2): PostCSS peer dep fix ([@RDIL](https://github.com/RDIL))\\n - [#4091](https://github.com/facebook/docusaurus/pull/4091) refactor(v2): Switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n - [#4066](https://github.com/facebook/docusaurus/pull/4066) chore(v2): Update a few dependencies ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4148](https://github.com/facebook/docusaurus/pull/4148) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4120](https://github.com/facebook/docusaurus/pull/4120) chore(v2): Update workbox to v6 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-utils`, `docusaurus`\\n - [#4081](https://github.com/facebook/docusaurus/pull/4081) chore(v2): Update webpack-related dependencies, pre-work to migrate to Webpack 5 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus`\\n - [#4012](https://github.com/facebook/docusaurus/pull/4012) chore(v2): docusaurus-init: switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-sitemap`\\n - [#4005](https://github.com/facebook/docusaurus/pull/4005) chore(v2): prettier fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`\\n - [#3988](https://github.com/facebook/docusaurus/pull/3988) chore(v2): fix date-sensitive test fixture ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#3959](https://github.com/facebook/docusaurus/pull/3959) chore(v2): fix windows Jest tests ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-content-blog`, `docusaurus`\\n - [#4355](https://github.com/facebook/docusaurus/pull/4355) perf(v2): improve blog mdx-loader and postcss loader ([@lex111](https://github.com/lex111))\\n\\n## Committers: 70\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Ankur Kedia ([@theankurkedia](https://github.com/theankurkedia))\\n- Apurva Ojas ([@apurvaojas](https://github.com/apurvaojas))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben ([@ben-qnimble](https://github.com/ben-qnimble))\\n- BennoDev ([@bennodev19](https://github.com/bennodev19))\\n- Bhargav Ponnapalli ([@imbhargav5](https://github.com/imbhargav5))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- Eduardo L\xe1zaro ([@edulazaro](https://github.com/edulazaro))\\n- Eric Carboni ([@eric-hc](https://github.com/eric-hc))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Ivan Ru\u017eevi\u0107 ([@iruzevic](https://github.com/iruzevic))\\n- Jessica Lin ([@jlin27](https://github.com/jlin27))\\n- Joel M ([@9oelM](https://github.com/9oelM))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jola ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n- Juan Carlos Blanco Delgado ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n- Kevin Viglucci ([@viglucci](https://github.com/viglucci))\\n- Kumar Aditya ([@kumaraditya303](https://github.com/kumaraditya303))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Martin Ad\xe1mek ([@B4nan](https://github.com/B4nan))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Matt Oestreich ([@oze4](https://github.com/oze4))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- Miroiu Emanuel ([@miroiu](https://github.com/miroiu))\\n- Mohd Shad Mirza ([@iamshadmirza](https://github.com/iamshadmirza))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- Nathan Bosscher ([@ntbosscher](https://github.com/ntbosscher))\\n- Nico Jansen ([@nicojs](https://github.com/nicojs))\\n- Nikolay Samokhvalov ([@NikolayS](https://github.com/NikolayS))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Power Lin ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Saihajpreet Singh ([@saihaj](https://github.com/saihaj))\\n- Sam Hrncir ([@samhrncir](https://github.com/samhrncir))\\n- Sam Sam ([@sksamuel](https://github.com/sksamuel))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sean Campbell ([@natac13](https://github.com/natac13))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Siemienik Pawel ([@Siemienik](https://github.com/Siemienik))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Tien Vo Xuan ([@tienvx](https://github.com/tienvx))\\n- Tomas Fernandez ([@tomsfernandez](https://github.com/tomsfernandez))\\n- Vamsi Krishna Reddy Satti ([@vamsi3](https://github.com/vamsi3))\\n- Welly ([@wellyshen](https://github.com/wellyshen))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yash Totale ([@YashTotale](https://github.com/YashTotale))\\n- Yuri Sulyma ([@ysulyma](https://github.com/ysulyma))\\n- Yuval Hazaz ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@aukokyong](https://github.com/aukokyong)\\n- [@philipp985](https://github.com/philipp985)\\n- [@roydukkey](https://github.com/roydukkey)\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- [@saydo17](https://github.com/saydo17)\\n- [@tokarchyn](https://github.com/tokarchyn)\\n- [@wolf20482](https://github.com/wolf20482)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- \xc7a\u011flar Tural\u0131 ([@caglarturali](https://github.com/caglarturali))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.70","metadata":{"permalink":"/changelog/2.0.0-alpha.70","source":"@site/changelog/source/2.0.0-alpha.70.md","title":"2.0.0-alpha.70","description":"New Feature","date":"2020-12-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aar\xf3n Garc\xeda Herv\xe1s","alias":"aarongarciah","url":"https://github.com/aarongarciah","imageURL":"https://github.com/aarongarciah.png","key":"aarongarciah","page":null},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Alex1304","alias":"Alex1304","url":"https://github.com/Alex1304","imageURL":"https://github.com/Alex1304.png","key":"Alex1304","page":null},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},{"name":"borool","alias":"borool","url":"https://github.com/borool","imageURL":"https://github.com/borool.png","key":"borool","page":null},{"name":"Cindy Gu","alias":"cindygu4","url":"https://github.com/cindygu4","imageURL":"https://github.com/cindygu4.png","key":"cindygu4","page":null},{"name":"davidmauskop","alias":"davidmauskop","url":"https://github.com/davidmauskop","imageURL":"https://github.com/davidmauskop.png","key":"davidmauskop","page":null},{"name":"Derric Gilling","alias":"dgilling","url":"https://github.com/dgilling","imageURL":"https://github.com/dgilling.png","key":"dgilling","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Hadrien Milano","alias":"hmil","url":"https://github.com/hmil","imageURL":"https://github.com/hmil.png","key":"hmil","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Lo\xefc Poullain","alias":"LoicPoullain","url":"https://github.com/LoicPoullain","imageURL":"https://github.com/LoicPoullain.png","key":"LoicPoullain","page":null},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},{"name":"Matija Sosic","alias":"matijaSos","url":"https://github.com/matijaSos","imageURL":"https://github.com/matijaSos.png","key":"matijaSos","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},{"name":"Rami","alias":"Romstar","url":"https://github.com/Romstar","imageURL":"https://github.com/Romstar.png","key":"Romstar","page":null},{"name":"Sarthak kundra","alias":"sarthakkundra","url":"https://github.com/sarthakkundra","imageURL":"https://github.com/sarthakkundra.png","key":"sarthakkundra","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"Kaartic Sivaraam","alias":"sivaraam","url":"https://github.com/sivaraam","imageURL":"https://github.com/sivaraam.png","key":"sivaraam","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Varshit Shah","alias":"Varshit07","url":"https://github.com/Varshit07","imageURL":"https://github.com/Varshit07.png","key":"Varshit07","page":null},{"name":"Stephen Woodruff","alias":"woodrufs","url":"https://github.com/woodrufs","imageURL":"https://github.com/woodrufs.png","key":"woodrufs","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-12-17T20:00","authors":["aarongarciah","aeneasr","Alex1304","ArtFlag","borool","cindygu4","davidmauskop","dgilling","francoischalifour","hmil","lex111","LoicPoullain","manzinello","matijaSos","mpsq","oriooctopus","Romstar","sarthakkundra","Simek","sivaraam","slorber","Varshit07","woodrufs"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"nextItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3932](https://github.com/facebook/docusaurus/pull/3932) feat(v2): Add Root theme element ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3916](https://github.com/facebook/docusaurus/pull/3916) feat(v2): Add localeDropdown navbar item type + i18n localeConfigs field ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#3888](https://github.com/facebook/docusaurus/pull/3888) feat(v2): add custom props for consumption by swizzled sidebar ([@oriooctopus](https://github.com/oriooctopus))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n- Other\\n - [#3827](https://github.com/facebook/docusaurus/pull/3827) feat(v2): add automated canary releases ([@slorber](https://github.com/slorber))\\n - [#3761](https://github.com/facebook/docusaurus/pull/3761) feat(v2): Added Lighthouse CI to PR checks ([@sarthakkundra](https://github.com/sarthakkundra))\\n- `docusaurus-1.x`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3325](https://github.com/facebook/docusaurus/pull/3325) feat(v2): core v2 i18n support + Docusaurus site Crowdin integration ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3922](https://github.com/facebook/docusaurus/pull/3922) fix(v2): fix navbar items issue on Windows? ([@slorber](https://github.com/slorber))\\n - [#3920](https://github.com/facebook/docusaurus/pull/3920) fix(v2): i18n translation extractor should handle JSX formatting edge cases better ([@slorber](https://github.com/slorber))\\n - [#3896](https://github.com/facebook/docusaurus/pull/3896) fix(v2): do not treat at-rules during CSS minification ([@lex111](https://github.com/lex111))\\n - [#3869](https://github.com/facebook/docusaurus/pull/3869) fix(v2): load plugin commands async to fix broken plugin CLI commands `docs:version` ([@aeneasr](https://github.com/aeneasr))\\n- `docusaurus-theme-classic`\\n - [#3921](https://github.com/facebook/docusaurus/pull/3921) fix(v2): remove useless console log ([@slorber](https://github.com/slorber))\\n - [#3895](https://github.com/facebook/docusaurus/pull/3895) fix(v2): use proper element for pagination nav label ([@lex111](https://github.com/lex111))\\n - [#3882](https://github.com/facebook/docusaurus/pull/3882) fix(v2): improve Footer structure, add class names, use Infima transition ([@Simek](https://github.com/Simek))\\n - [#3877](https://github.com/facebook/docusaurus/pull/3877) fix(v2): dynamic dark mode detection without toggle widget ([@hmil](https://github.com/hmil))\\n - [#3854](https://github.com/facebook/docusaurus/pull/3854) fix(v2): refactor icons in theme-classic, fix swizzle issue ([@Simek](https://github.com/Simek))\\n - [#3823](https://github.com/facebook/docusaurus/pull/3823) fix(v2): support rendering of singular tabs ([@aeneasr](https://github.com/aeneasr))\\n - [#3817](https://github.com/facebook/docusaurus/pull/3817) fix(v2): Allow footer logo at attribute to be empty ([@aarongarciah](https://github.com/aarongarciah))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3900](https://github.com/facebook/docusaurus/pull/3900) fix(v2): correct typo in metas generated for Twitter cards ([@mpsq](https://github.com/mpsq))\\n- Other\\n - [#3872](https://github.com/facebook/docusaurus/pull/3872) chore: add missing v1 generated files to ignores ([@Simek](https://github.com/Simek))\\n - [#3833](https://github.com/facebook/docusaurus/pull/3833) fix(v2): temporary: disable crowdin until PR env variable permission fixed ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#3852](https://github.com/facebook/docusaurus/pull/3852) fix(v2): to fix the canary release GH workflow ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3853](https://github.com/facebook/docusaurus/pull/3853) fix(v2): fix DocSearch keyboard navigator ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3837](https://github.com/facebook/docusaurus/pull/3837) fix(v2): update SearchPage styling, fix appearance in dark mode ([@Simek](https://github.com/Simek))\\n - [#3828](https://github.com/facebook/docusaurus/pull/3828) fix(v2): restore Algolia search ([@lex111](https://github.com/lex111))\\n - [#3819](https://github.com/facebook/docusaurus/pull/3819) feat(search): update DocSearch to alpha.31 ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-docs`\\n - [#3839](https://github.com/facebook/docusaurus/pull/3839) fix(v2): remove unnecessary backtick in output ([@sivaraam](https://github.com/sivaraam))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3829](https://github.com/facebook/docusaurus/pull/3829) fix(v2): fix search ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3824](https://github.com/facebook/docusaurus/pull/3824) fix(v2): update notifier dist tag ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3880](https://github.com/facebook/docusaurus/pull/3880) polish(v2): improve docusaurus deploy logs ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3931](https://github.com/facebook/docusaurus/pull/3931) docs(v2): blog.md with docs: false, for blog-only mode ([@Romstar](https://github.com/Romstar))\\n- [#3924](https://github.com/facebook/docusaurus/pull/3924) docs(v2): Removed unnecessary closing parenthesis ([@Varshit07](https://github.com/Varshit07))\\n- [#3928](https://github.com/facebook/docusaurus/pull/3928) docs(v2): add FoalTS to showcase page ([@LoicPoullain](https://github.com/LoicPoullain))\\n- [#3899](https://github.com/facebook/docusaurus/pull/3899) docs(v2): Move sidebar content to its own page ([@ArtFlag](https://github.com/ArtFlag))\\n- [#3856](https://github.com/facebook/docusaurus/pull/3856) docs(v2): typo ([@borool](https://github.com/borool))\\n- [#3891](https://github.com/facebook/docusaurus/pull/3891) docs(v2): Wrap section about custom domains in :::info ([@Alex1304](https://github.com/Alex1304))\\n- [#3871](https://github.com/facebook/docusaurus/pull/3871) docs(v2): missing `<ColorGenerator/>` mdx import ([@slorber](https://github.com/slorber))\\n- [#3873](https://github.com/facebook/docusaurus/pull/3873) docs(v2): From docusaurus-migrate to @docusaurus/migrate ([@manzinello](https://github.com/manzinello))\\n- [#3867](https://github.com/facebook/docusaurus/pull/3867) docs(v2): Add docusaurus-plugin-moesif to community plugins ([@dgilling](https://github.com/dgilling))\\n- [#3851](https://github.com/facebook/docusaurus/pull/3851) docs(v2): Fixed Typo: Hided => Hidden ([@woodrufs](https://github.com/woodrufs))\\n- [#3832](https://github.com/facebook/docusaurus/pull/3832) docs(v2): Add wasp to showcase ([@matijaSos](https://github.com/matijaSos))\\n- [#3813](https://github.com/facebook/docusaurus/pull/3813) docs(v2): render deployment doc ([@davidmauskop](https://github.com/davidmauskop))\\n- [#3835](https://github.com/facebook/docusaurus/pull/3835) docs(v2): update Client API docs page ([@Simek](https://github.com/Simek))\\n- [#3831](https://github.com/facebook/docusaurus/pull/3831) docs(v2): Docs refactoring and reorganization ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3912](https://github.com/facebook/docusaurus/pull/3912) chore(v2): remove docs for alpha v64 ([@lex111](https://github.com/lex111))\\n - [#3907](https://github.com/facebook/docusaurus/pull/3907) chore(ci): fix canary release filtering ([@slorber](https://github.com/slorber))\\n - [#3902](https://github.com/facebook/docusaurus/pull/3902) chore(deps): bump ini from 1.3.5 to 1.3.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3884](https://github.com/facebook/docusaurus/pull/3884) chore(ci): increase Lighthouse CI max_timeout ([@Simek](https://github.com/Simek))\\n - [#3883](https://github.com/facebook/docusaurus/pull/3883) chore(v2): remove docs for alpha v62-63 ([@lex111](https://github.com/lex111))\\n - [#3863](https://github.com/facebook/docusaurus/pull/3863) chore(ci): run V1 Build and Migration CLI tests conditionally on CI ([@Simek](https://github.com/Simek))\\n - [#3861](https://github.com/facebook/docusaurus/pull/3861) chore(ci): reduce number of jobs, remove build from lighthouse pipeline ([@Simek](https://github.com/Simek))\\n - [#3860](https://github.com/facebook/docusaurus/pull/3860) chore: add Yarn v2 cache directory to ignores ([@Simek](https://github.com/Simek))\\n - [#3858](https://github.com/facebook/docusaurus/pull/3858) chore(v2): disable Crowdin for deploy previews ([@slorber](https://github.com/slorber))\\n - [#3857](https://github.com/facebook/docusaurus/pull/3857) fix(v2): fix Crowdin ci commands ([@slorber](https://github.com/slorber))\\n - [#3849](https://github.com/facebook/docusaurus/pull/3849) chore(ci): CI scripts cleanup, add Node 14 runs, bump checkout action ([@Simek](https://github.com/Simek))\\n - [#3850](https://github.com/facebook/docusaurus/pull/3850) chore(v2): i18n CI: add write-translations call ([@slorber](https://github.com/slorber))\\n - [#3848](https://github.com/facebook/docusaurus/pull/3848) chore(v2): fix CI typo ([@slorber](https://github.com/slorber))\\n - [#3847](https://github.com/facebook/docusaurus/pull/3847) chore(v2): wire production Crowdin project + setup ([@slorber](https://github.com/slorber))\\n - [#3846](https://github.com/facebook/docusaurus/pull/3846) chore(v2): fix PRs not able to add lighthouse/buildsize comment from works ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3865](https://github.com/facebook/docusaurus/pull/3865) chore(v2): fix ignore paths and Prettier commands in themes ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#3844](https://github.com/facebook/docusaurus/pull/3844) chore(v2): fix several lint warnings, add missing types, cleanup ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#3838](https://github.com/facebook/docusaurus/pull/3838) refactor(v2): extract site title formatter to theme-common util ([@Simek](https://github.com/Simek))\\n\\n## Committers: 23\\n\\n- Aar\xf3n Garc\xeda Herv\xe1s ([@aarongarciah](https://github.com/aarongarciah))\\n- Alex1304 ([@Alex1304](https://github.com/Alex1304))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Cindy Gu ([@cindygu4](https://github.com/cindygu4))\\n- Derric Gilling ([@dgilling](https://github.com/dgilling))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Hadrien Milano ([@hmil](https://github.com/hmil))\\n- Kaartic Sivaraam ([@sivaraam](https://github.com/sivaraam))\\n- Lo\xefc Poullain ([@LoicPoullain](https://github.com/LoicPoullain))\\n- Matija Sosic ([@matijaSos](https://github.com/matijaSos))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Rami ([@Romstar](https://github.com/Romstar))\\n- Sarthak kundra ([@sarthakkundra](https://github.com/sarthakkundra))\\n- Stephen Woodruff ([@woodrufs](https://github.com/woodrufs))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varshit Shah ([@Varshit07](https://github.com/Varshit07))\\n- [@borool](https://github.com/borool)\\n- [@davidmauskop](https://github.com/davidmauskop)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))"},{"id":"/2.0.0-alpha.69","metadata":{"permalink":"/changelog/2.0.0-alpha.69","source":"@site/changelog/source/2.0.0-alpha.69.md","title":"2.0.0-alpha.69","description":"New Feature","date":"2020-11-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ma\xebl Nison","alias":"arcanis","url":"https://github.com/arcanis","imageURL":"https://github.com/arcanis.png","key":"arcanis","page":null},{"name":"camiluc","alias":"camiluc","url":"https://github.com/camiluc","imageURL":"https://github.com/camiluc.png","key":"camiluc","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-24T20:00","authors":["arcanis","camiluc","lex111","Simek","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"nextItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3802](https://github.com/facebook/docusaurus/pull/3802) feat(v2): add baseUrlIssueBanner configuration to disable banner ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3807](https://github.com/facebook/docusaurus/pull/3807) chore(v2): upgrade Infima to v0.2.0-alpha.18 ([@lex111](https://github.com/lex111))\\n - [#3806](https://github.com/facebook/docusaurus/pull/3806) fix(v2): remove aria-hidden attr from anchor link of heading ([@lex111](https://github.com/lex111))\\n - [#3784](https://github.com/facebook/docusaurus/pull/3784) fix(v2): fix missing logo in dark theme when darkSrc was not set ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3804](https://github.com/facebook/docusaurus/pull/3804) fix(v2): Algolia: allow contextualSearch + facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3796](https://github.com/facebook/docusaurus/pull/3796) Adds createRequire for preset resolution ([@arcanis](https://github.com/arcanis))\\n\\n## :memo: Documentation\\n\\n- [#3803](https://github.com/facebook/docusaurus/pull/3803) docs(v2): fix docusaurus init issue when not using @latest ([@slorber](https://github.com/slorber))\\n- [#3785](https://github.com/facebook/docusaurus/pull/3785) docs(v2): recommend Docusaurus 2 usage ([@slorber](https://github.com/slorber))\\n- [#3783](https://github.com/facebook/docusaurus/pull/3783) docs(v2): remove @next tags needed to install v2 packages ([@slorber](https://github.com/slorber))\\n- [#3781](https://github.com/facebook/docusaurus/pull/3781) docs(v2): rename zeit to vercel ([@camiluc](https://github.com/camiluc))\\n\\n## :house: Internal\\n\\n- [#3800](https://github.com/facebook/docusaurus/pull/3800) chore(v2): remove useless stylelint-copyright peerDependency ([@slorber](https://github.com/slorber))\\n- [#3786](https://github.com/facebook/docusaurus/pull/3786) chore(v2): ensure publishConfig.access presence with tests ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ma\xebl Nison ([@arcanis](https://github.com/arcanis))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@camiluc](https://github.com/camiluc)"},{"id":"/2.0.0-alpha.68","metadata":{"permalink":"/changelog/2.0.0-alpha.68","source":"@site/changelog/source/2.0.0-alpha.68.md","title":"2.0.0-alpha.68","description":"New Feature","date":"2020-11-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"iAmir","alias":"AmyrAhmady","url":"https://github.com/AmyrAhmady","imageURL":"https://github.com/AmyrAhmady.png","key":"AmyrAhmady","page":null},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"Beno\xeet Lemaire","alias":"belemaire","url":"https://github.com/belemaire","imageURL":"https://github.com/belemaire.png","key":"belemaire","page":null},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},{"name":"David Goss","alias":"davidjgoss","url":"https://github.com/davidjgoss","imageURL":"https://github.com/davidjgoss.png","key":"davidjgoss","page":null},{"name":"Bright Egbo","alias":"egbobright","url":"https://github.com/egbobright","imageURL":"https://github.com/egbobright.png","key":"egbobright","page":null},{"name":"Hai","alias":"haivp3010","url":"https://github.com/haivp3010","imageURL":"https://github.com/haivp3010.png","key":"haivp3010","page":null},{"name":"Anh Hong","alias":"hong4rc","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":"hong4rc","page":null},{"name":"Jainam Chirag Shah","alias":"jcs98","url":"https://github.com/jcs98","imageURL":"https://github.com/jcs98.png","key":"jcs98","page":null},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},{"name":"Roman Bug","alias":"ka1bi4","url":"https://github.com/ka1bi4","imageURL":"https://github.com/ka1bi4.png","key":"ka1bi4","page":null},{"name":"kenve","alias":"kenve","url":"https://github.com/kenve","imageURL":"https://github.com/kenve.png","key":"kenve","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nate Giraudeau","alias":"nategiraudeau","url":"https://github.com/nategiraudeau","imageURL":"https://github.com/nategiraudeau.png","key":"nategiraudeau","page":null},{"name":"Nico Domino","alias":"ndom91","url":"https://github.com/ndom91","imageURL":"https://github.com/ndom91.png","key":"ndom91","page":null},{"name":"Rhys Arkins","alias":"rarkins","url":"https://github.com/rarkins","imageURL":"https://github.com/rarkins.png","key":"rarkins","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},{"name":"Gergely Sinka","alias":"sigewuzhere","url":"https://github.com/sigewuzhere","imageURL":"https://github.com/sigewuzhere.png","key":"sigewuzhere","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Stephen McElhinney","alias":"smcelhinney","url":"https://github.com/smcelhinney","imageURL":"https://github.com/smcelhinney.png","key":"smcelhinney","page":null},{"name":"Thakur Karthik","alias":"ThakurKarthik","url":"https://github.com/ThakurKarthik","imageURL":"https://github.com/ThakurKarthik.png","key":"ThakurKarthik","page":null},{"name":"Marc Rabat Pla","alias":"vanbasten17","url":"https://github.com/vanbasten17","imageURL":"https://github.com/vanbasten17.png","key":"vanbasten17","page":null},{"name":"Shenwei Wang","alias":"weareoutman","url":"https://github.com/weareoutman","imageURL":"https://github.com/weareoutman.png","key":"weareoutman","page":null},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T20:00","authors":["AmyrAhmady","artemkovalyov","belemaire","charleskorn","davidjgoss","egbobright","haivp3010","hong4rc","jcs98","juzhiyuan","ka1bi4","kenve","lex111","nategiraudeau","ndom91","rarkins","SamChou19815","sammychinedu2ky","sigewuzhere","Simek","slorber","smcelhinney","ThakurKarthik","vanbasten17","weareoutman","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"nextItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#3717](https://github.com/facebook/docusaurus/pull/3717) feat(v2): official CodeSandbox support ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n- `docusaurus-init`\\n - [#3729](https://github.com/facebook/docusaurus/pull/3729) feat(v2): allow init project via npm ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3730](https://github.com/facebook/docusaurus/pull/3730) feat(v2): add ThemedImage component ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3716](https://github.com/facebook/docusaurus/pull/3716) feat(v2): introduce new minification of CSS bundle ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3694](https://github.com/facebook/docusaurus/pull/3694) feat(v2): Added the ability to specify GIT_PASS in deploy command (for CI purposes) ([@smcelhinney](https://github.com/smcelhinney))\\n - [#3621](https://github.com/facebook/docusaurus/pull/3621) feat(v2): baseUrl config issues: show help message if css/js can\'t load ([@jcs98](https://github.com/jcs98))\\n - [#3594](https://github.com/facebook/docusaurus/pull/3594) feat(v2): add support for key,cert in https ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3705](https://github.com/facebook/docusaurus/pull/3705) feat(v2): add support for sync to npm2yarn tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3658](https://github.com/facebook/docusaurus/pull/3658) feat(v2): onBrokenMarkdownLinks config ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- `docusaurus-theme-classic`\\n - [#3640](https://github.com/facebook/docusaurus/pull/3640) feat(v2): add skip to content link ([@lex111](https://github.com/lex111))\\n - [#3615](https://github.com/facebook/docusaurus/pull/3615) feat(v2): add ability to hide doc sidebar ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3749](https://github.com/facebook/docusaurus/pull/3749) fix(v2): add support for interleaving Markdown in code blocks ([@lex111](https://github.com/lex111))\\n - [#3739](https://github.com/facebook/docusaurus/pull/3739) fix(v2): add support for prefers-reduced-motion in hideable sidebar ([@lex111](https://github.com/lex111))\\n - [#3726](https://github.com/facebook/docusaurus/pull/3726) fix(v2): add thin scrollbar to proper element in TOC ([@lex111](https://github.com/lex111))\\n - [#3681](https://github.com/facebook/docusaurus/pull/3681) Revert \\"refactor(v2): improve regex matching code-block title\\" ([@lex111](https://github.com/lex111))\\n - [#3662](https://github.com/facebook/docusaurus/pull/3662) fix(v2): navbar dropdown crash when item.to is undefined ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#3669](https://github.com/facebook/docusaurus/pull/3669) fix(v2): make scrollbar styles consistent ([@nategiraudeau](https://github.com/nategiraudeau))\\n - [#3666](https://github.com/facebook/docusaurus/pull/3666) fix(v2): make optional title for footer links column ([@lex111](https://github.com/lex111))\\n - [#3647](https://github.com/facebook/docusaurus/pull/3647) fix(v2): do not set height for mobile dropdown during build ([@lex111](https://github.com/lex111))\\n - [#3650](https://github.com/facebook/docusaurus/pull/3650) fix(v2): add landmark for skip to content link ([@lex111](https://github.com/lex111))\\n - [#3627](https://github.com/facebook/docusaurus/pull/3627) fix(v2): disable tabbing on hidden doc sidebar ([@lex111](https://github.com/lex111))\\n - [#3637](https://github.com/facebook/docusaurus/pull/3637) fix(v2): wrap code blocks on print ([@haivp3010](https://github.com/haivp3010))\\n - [#3603](https://github.com/facebook/docusaurus/pull/3603) fix(v2): animate dropdown properly ([@lex111](https://github.com/lex111))\\n - [#3611](https://github.com/facebook/docusaurus/pull/3611) fix(v2): Added back support for optional logo field in theme-classic navbarConfig ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3763](https://github.com/facebook/docusaurus/pull/3763) refactor(v2): various markup improvements ([@lex111](https://github.com/lex111))\\n - [#3724](https://github.com/facebook/docusaurus/pull/3724) fix(v2): add support for non-ASCII chars in anchor link scroll ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3723](https://github.com/facebook/docusaurus/pull/3723) fix(v2): restore prefetch functionality ([@lex111](https://github.com/lex111))\\n- Other\\n - [#3760](https://github.com/facebook/docusaurus/pull/3760) fix(v2): codesandbox generated examples should use published init package ([@slorber](https://github.com/slorber))\\n - [#3701](https://github.com/facebook/docusaurus/pull/3701) fix(v2): limit images height on showcase page ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3757](https://github.com/facebook/docusaurus/pull/3757) fix(v2): escape alt text in img tag ([@lex111](https://github.com/lex111))\\n - [#3653](https://github.com/facebook/docusaurus/pull/3653) fix(v2): handle multiple asset links in one line properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#3721](https://github.com/facebook/docusaurus/pull/3721) fix(v2): use swizzled SearchPage component if any ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3704](https://github.com/facebook/docusaurus/pull/3704) refactor(v2): allow adding plugins depending on condition ([@lex111](https://github.com/lex111))\\n - [#3691](https://github.com/facebook/docusaurus/pull/3691) fix(v2): use SVGO in webpack SVGR loader ([@charleskorn](https://github.com/charleskorn))\\n - [#3667](https://github.com/facebook/docusaurus/pull/3667) fix(v2): Fix typo in BaseUrlSuggestionWarning ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-utils`\\n - [#3703](https://github.com/facebook/docusaurus/pull/3703) fix(v2): ignore export declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#3639](https://github.com/facebook/docusaurus/pull/3639) fix(v2): restore infinite scroll pagination on search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3622](https://github.com/facebook/docusaurus/pull/3622) fix(v2): docusaurus start --poll 500 should work + better config load failure error ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3765](https://github.com/facebook/docusaurus/pull/3765) chore(v2): replace wait-file with wait-on to reduce npm warnings ([@lex111](https://github.com/lex111))\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3609](https://github.com/facebook/docusaurus/pull/3609) refactor(v2): Improve SSR error message: log page path ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3764](https://github.com/facebook/docusaurus/pull/3764) refactor(v2): make accessible anchor links from keyboard ([@lex111](https://github.com/lex111))\\n - [#3745](https://github.com/facebook/docusaurus/pull/3745) refactor(v2): introduce Logo component, remove useLogo hook ([@Simek](https://github.com/Simek))\\n - [#3706](https://github.com/facebook/docusaurus/pull/3706) refactor(v2): render all tab panels at once ([@lex111](https://github.com/lex111))\\n - [#3712](https://github.com/facebook/docusaurus/pull/3712) chore(v2): upgrade Infima to v0.2.0-alpha.15 ([@lex111](https://github.com/lex111))\\n - [#3685](https://github.com/facebook/docusaurus/pull/3685) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3674](https://github.com/facebook/docusaurus/pull/3674) feat(v2): add additional wrapper class to blog pages ([@Simek](https://github.com/Simek))\\n - [#3671](https://github.com/facebook/docusaurus/pull/3671) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3654](https://github.com/facebook/docusaurus/pull/3654) refactor(v2): clean up code blocks ([@lex111](https://github.com/lex111))\\n - [#3649](https://github.com/facebook/docusaurus/pull/3649) refactor(v2): make code blocks scrollable from keyboard ([@lex111](https://github.com/lex111))\\n - [#3626](https://github.com/facebook/docusaurus/pull/3626) refactor(v2): remove focus outline from mouse users ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#3709](https://github.com/facebook/docusaurus/pull/3709) chore(v2): adjust website npm package ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3707](https://github.com/facebook/docusaurus/pull/3707) chore(v2): upgrade Infima to v0.2.0-alpha.14 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3638](https://github.com/facebook/docusaurus/pull/3638) chore(v2): migrate hapi/joi to joi ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`\\n - [#3604](https://github.com/facebook/docusaurus/pull/3604) refactor(v2): use new way to get versions for search page ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3762](https://github.com/facebook/docusaurus/pull/3762) Adding ConfigCat to showcase ([@sigewuzhere](https://github.com/sigewuzhere))\\n - [#3750](https://github.com/facebook/docusaurus/pull/3750) docs(v2): add npm2yarn to typescript install command ([@davidjgoss](https://github.com/davidjgoss))\\n - [#3743](https://github.com/facebook/docusaurus/pull/3743) docs(v2): convert teams page to MDX ([@slorber](https://github.com/slorber))\\n - [#3737](https://github.com/facebook/docusaurus/pull/3737) docs(v2): add Inline SVG color override example ([@Simek](https://github.com/Simek))\\n - [#3718](https://github.com/facebook/docusaurus/pull/3718) docs(v2): showcase Botonic ([@vanbasten17](https://github.com/vanbasten17))\\n - [#3696](https://github.com/facebook/docusaurus/pull/3696) docs(v2): normalize showcase preview images height ([@Simek](https://github.com/Simek))\\n - [#3699](https://github.com/facebook/docusaurus/pull/3699) docs(v2): deployment should use mdx extension ([@slorber](https://github.com/slorber))\\n - [#3695](https://github.com/facebook/docusaurus/pull/3695) docs(v2): add React Native website to the showcase ([@Simek](https://github.com/Simek))\\n - [#3645](https://github.com/facebook/docusaurus/pull/3645) Update Docusaurus v2 Showcase ([@ndom91](https://github.com/ndom91))\\n - [#3644](https://github.com/facebook/docusaurus/pull/3644) docs(v2): update the link of joi ([@kenve](https://github.com/kenve))\\n - [#3636](https://github.com/facebook/docusaurus/pull/3636) docs(v2): fix some misspellings ([@ka1bi4](https://github.com/ka1bi4))\\n - [#3630](https://github.com/facebook/docusaurus/pull/3630) docs: remove runme ([@juzhiyuan](https://github.com/juzhiyuan))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3624](https://github.com/facebook/docusaurus/pull/3624) Fix typo in remark-plugin-npm2yarn documentation ([@belemaire](https://github.com/belemaire))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3769](https://github.com/facebook/docusaurus/pull/3769) docs(v2): fix statements background, update footer background ([@Simek](https://github.com/Simek))\\n - [#3744](https://github.com/facebook/docusaurus/pull/3744) chore(v2): add build size bot workflow GitHub CI workflow ([@jcs98](https://github.com/jcs98))\\n - [#3741](https://github.com/facebook/docusaurus/pull/3741) chore: update yarn lock again ([@slorber](https://github.com/slorber))\\n - [#3740](https://github.com/facebook/docusaurus/pull/3740) chore: update yarn lock ([@slorber](https://github.com/slorber))\\n - [#3738](https://github.com/facebook/docusaurus/pull/3738) chore(internal): add yarn deduplicate script, cleanup lock ([@Simek](https://github.com/Simek))\\n - [#3732](https://github.com/facebook/docusaurus/pull/3732) fix(internal): fix clear script from the main package.json ([@Simek](https://github.com/Simek))\\n - [#3708](https://github.com/facebook/docusaurus/pull/3708) chore(v2): remove docs for alpha v60-61 ([@lex111](https://github.com/lex111))\\n - [#3693](https://github.com/facebook/docusaurus/pull/3693) fix(v2): fix website scripts on Windows by using cross-env ([@Simek](https://github.com/Simek))\\n - [#3673](https://github.com/facebook/docusaurus/pull/3673) test(e2e): dogfood Yarn with enableGlobalCache ([@ylemkimon](https://github.com/ylemkimon))\\n - [#3641](https://github.com/facebook/docusaurus/pull/3641) misc: fix unbound env variable in test release script ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `lqip-loader`\\n - [#3766](https://github.com/facebook/docusaurus/pull/3766) chore(v2): fix several npm warnings ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3753](https://github.com/facebook/docusaurus/pull/3753) chore(v2): fix mismatch peer dependency in MDX loader ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3742](https://github.com/facebook/docusaurus/pull/3742) chore(v2): pin version of babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3734](https://github.com/facebook/docusaurus/pull/3734) chore(v2): downgrade babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3714](https://github.com/facebook/docusaurus/pull/3714) chore(v2): fix prettier formatting ([@slorber](https://github.com/slorber))\\n - [#3619](https://github.com/facebook/docusaurus/pull/3619) refactor(v2): add better error message for yarn workspace/monorepo/terser issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3727](https://github.com/facebook/docusaurus/pull/3727) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#3715](https://github.com/facebook/docusaurus/pull/3715) chore(v2): update Browserslist ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`\\n - [#3675](https://github.com/facebook/docusaurus/pull/3675) fix(v2): add missing \'react\' and \'webpack\' peer dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3613](https://github.com/facebook/docusaurus/pull/3613) fix: add repository metadata to all packages ([@rarkins](https://github.com/rarkins))\\n\\n## Committers: 26\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anh Hong ([@hong4rc](https://github.com/hong4rc))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Beno\xeet Lemaire ([@belemaire](https://github.com/belemaire))\\n- Bright Egbo ([@egbobright](https://github.com/egbobright))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- David Goss ([@davidjgoss](https://github.com/davidjgoss))\\n- Gergely Sinka ([@sigewuzhere](https://github.com/sigewuzhere))\\n- Hai ([@haivp3010](https://github.com/haivp3010))\\n- Jainam Chirag Shah ([@jcs98](https://github.com/jcs98))\\n- Marc Rabat Pla ([@vanbasten17](https://github.com/vanbasten17))\\n- Nate Giraudeau ([@nategiraudeau](https://github.com/nategiraudeau))\\n- Nico Domino ([@ndom91](https://github.com/ndom91))\\n- Rhys Arkins ([@rarkins](https://github.com/rarkins))\\n- Roman Bug ([@ka1bi4](https://github.com/ka1bi4))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shenwei Wang ([@weareoutman](https://github.com/weareoutman))\\n- Stephen McElhinney ([@smcelhinney](https://github.com/smcelhinney))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thakur Karthik ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- iAmir ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- kenve ([@kenve](https://github.com/kenve))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.67","metadata":{"permalink":"/changelog/2.0.0-alpha.67","source":"@site/changelog/source/2.0.0-alpha.67.md","title":"2.0.0-alpha.67","description":"Failed release","date":"2020-11-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"nextItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nFailed release"},{"id":"/2.0.0-alpha.66","metadata":{"permalink":"/changelog/2.0.0-alpha.66","source":"@site/changelog/source/2.0.0-alpha.66.md","title":"2.0.0-alpha.66","description":"New Feature","date":"2020-10-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},{"name":"Abhishek Tiwari","alias":"abhishektiwari","url":"https://github.com/abhishektiwari","imageURL":"https://github.com/abhishektiwari.png","key":"abhishektiwari","page":null},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},{"name":"honlyHuang","alias":"honlyHuang","url":"https://github.com/honlyHuang","imageURL":"https://github.com/honlyHuang.png","key":"honlyHuang","page":null},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},{"name":"John Gracey","alias":"jagracey","url":"https://github.com/jagracey","imageURL":"https://github.com/jagracey.png","key":"jagracey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},{"name":"Russ Taylor","alias":"russtaylor","url":"https://github.com/russtaylor","imageURL":"https://github.com/russtaylor.png","key":"russtaylor","page":null},{"name":"SaintMalik","alias":"saintmalik","url":"https://github.com/saintmalik","imageURL":"https://github.com/saintmalik.png","key":"saintmalik","page":null},{"name":"Shubham Zanwar","alias":"shubhamzanwar","url":"https://github.com/shubhamzanwar","imageURL":"https://github.com/shubhamzanwar.png","key":"shubhamzanwar","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Umair Kamran","alias":"UmairKamran","url":"https://github.com/UmairKamran","imageURL":"https://github.com/UmairKamran.png","key":"UmairKamran","page":null},{"name":"Utkarsh Goel","alias":"utkarsh867","url":"https://github.com/utkarsh867","imageURL":"https://github.com/utkarsh867.png","key":"utkarsh867","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-19T20:00","authors":["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"nextItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3593](https://github.com/facebook/docusaurus/pull/3593) feat(v2): blog sidebar ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#3469](https://github.com/facebook/docusaurus/pull/3469) feat(v2): Extract npm2yarn plugin ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3580](https://github.com/facebook/docusaurus/pull/3580) feat(v2): allow to define custom CSS class for Tabs component ([@Simek](https://github.com/Simek))\\n - [#3553](https://github.com/facebook/docusaurus/pull/3553) feat(v2): make dropdown menu collapsible on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-migrate`, `docusaurus-types`, `docusaurus`\\n - [#3573](https://github.com/facebook/docusaurus/pull/3573) feat(v2): Add themeConfig.noIndex option #3528 ([@hamzahamidi](https://github.com/hamzahamidi))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3543](https://github.com/facebook/docusaurus/pull/3543) feat(v2): persist docs preferred version ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3548](https://github.com/facebook/docusaurus/pull/3548) feat(v2): version dropdown before/after items + move site \\"All Versions\\" link ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#3545](https://github.com/facebook/docusaurus/pull/3545) feat(v2): site client modules ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3539](https://github.com/facebook/docusaurus/pull/3539) feat(v2): doc navbar item type ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3607](https://github.com/facebook/docusaurus/pull/3607) fix(v2): fix error with required href attr of link in mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3602](https://github.com/facebook/docusaurus/pull/3602) fix(v2): make dropdown button clickable with mouse ([@lex111](https://github.com/lex111))\\n - [#3601](https://github.com/facebook/docusaurus/pull/3601) fix(v2): fix table-of-content scroll highlighting issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3599](https://github.com/facebook/docusaurus/pull/3599) fix(v2): remove event listeners on Tabs component unmount ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3531](https://github.com/facebook/docusaurus/pull/3531) fix(v2): Fixes serve cli --port option ([@UmairKamran](https://github.com/UmairKamran))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3585](https://github.com/facebook/docusaurus/pull/3585) refactor(v2): various dropdown improvements ([@lex111](https://github.com/lex111))\\n - [#3588](https://github.com/facebook/docusaurus/pull/3588) refactor(v2): make accessible copy code button from keyboard ([@lex111](https://github.com/lex111))\\n - [#3578](https://github.com/facebook/docusaurus/pull/3578) refactor(v2): apply common behavior to dropdowns ([@lex111](https://github.com/lex111))\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3587](https://github.com/facebook/docusaurus/pull/3587) refactor(v2): various fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3569](https://github.com/facebook/docusaurus/pull/3569) refactor(v2): improve broken links error message ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3576](https://github.com/facebook/docusaurus/pull/3576) docs(v2): removed obsolete \\"you\\" identifier ([@christian-bromann](https://github.com/christian-bromann))\\n - [#3589](https://github.com/facebook/docusaurus/pull/3589) docs(v2): add taro to users ([@honlyHuang](https://github.com/honlyHuang))\\n - [#3565](https://github.com/facebook/docusaurus/pull/3565) docs(v2): deployment, add required GitHub token scope infos ([@russtaylor](https://github.com/russtaylor))\\n - [#3574](https://github.com/facebook/docusaurus/pull/3574) docs(v2): adding vue-nodegui to users ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n - [#3556](https://github.com/facebook/docusaurus/pull/3556) Added Axioms to users ([@abhishektiwari](https://github.com/abhishektiwari))\\n - [#3558](https://github.com/facebook/docusaurus/pull/3558) docs(v2): embedding real source code in MDX as a code block ([@slorber](https://github.com/slorber))\\n - [#3555](https://github.com/facebook/docusaurus/pull/3555) docs(v2): add \\"Wisdom\\" dev docs website to showcase. ([@jagracey](https://github.com/jagracey))\\n - [#3532](https://github.com/facebook/docusaurus/pull/3532) docs(v2): change package name in example script ([@MatanBobi](https://github.com/MatanBobi))\\n - [#3538](https://github.com/facebook/docusaurus/pull/3538) docs(v1): added drone for 1.0 #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3533](https://github.com/facebook/docusaurus/pull/3533) docs(v1): Fix broken link in the documentation ([@saintmalik](https://github.com/saintmalik))\\n - [#3534](https://github.com/facebook/docusaurus/pull/3534) docs(v2): Fix url bugs in v2 docs ([@saintmalik](https://github.com/saintmalik))\\n- `docusaurus-theme-classic`\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-search-algolia`\\n - [#3591](https://github.com/facebook/docusaurus/pull/3591) chore(v2): enable new contextual search feature ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3586](https://github.com/facebook/docusaurus/pull/3586) chore(v2): fix/upgrade react types ([@slorber](https://github.com/slorber))\\n - [#3577](https://github.com/facebook/docusaurus/pull/3577) refactor(v2): clarify versions page ([@lex111](https://github.com/lex111))\\n - [#3560](https://github.com/facebook/docusaurus/pull/3560) feat(v2): prevent using remote image urls in showcase ([@slorber](https://github.com/slorber))\\n - [#3554](https://github.com/facebook/docusaurus/pull/3554) fix(v2): use absolute path to manifest file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3394](https://github.com/facebook/docusaurus/pull/3394) refactor(v2): add useThemeConfig hook + cleanup useless theme default values ([@imskr](https://github.com/imskr))\\n\\n## Committers: 17\\n\\n- Abhishek Tiwari ([@abhishektiwari](https://github.com/abhishektiwari))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- John Gracey ([@jagracey](https://github.com/jagracey))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Russ Taylor ([@russtaylor](https://github.com/russtaylor))\\n- SaintMalik ([@saintmalik](https://github.com/saintmalik))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Shubham Zanwar ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Umair Kamran ([@UmairKamran](https://github.com/UmairKamran))\\n- Utkarsh Goel ([@utkarsh867](https://github.com/utkarsh867))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- honlyHuang ([@honlyHuang](https://github.com/honlyHuang))"},{"id":"/2.0.0-alpha.65","metadata":{"permalink":"/changelog/2.0.0-alpha.65","source":"@site/changelog/source/2.0.0-alpha.65.md","title":"2.0.0-alpha.65","description":"New Feature","date":"2020-10-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},{"name":"Henry V\xe9lez","alias":"abadon7","url":"https://github.com/abadon7","imageURL":"https://github.com/abadon7.png","key":"abadon7","page":null},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Andrey Rublev","alias":"anru","url":"https://github.com/anru","imageURL":"https://github.com/anru.png","key":"anru","page":null},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},{"name":"Jeremy Hager","alias":"jeremyhager","url":"https://github.com/jeremyhager","imageURL":"https://github.com/jeremyhager.png","key":"jeremyhager","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Muskan Kumar","alias":"muskanvk","url":"https://github.com/muskanvk","imageURL":"https://github.com/muskanvk.png","key":"muskanvk","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tim Gates","alias":"timgates42","url":"https://github.com/timgates42","imageURL":"https://github.com/timgates42.png","key":"timgates42","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-02T20:00","authors":["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"nextItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3497](https://github.com/facebook/docusaurus/pull/3497) feat(v2): env variable TERSER_PARALLEL to customize TerserPlugin.parallel ([@aeneasr](https://github.com/aeneasr))\\n - [#3446](https://github.com/facebook/docusaurus/pull/3446) feat(v2): new docusaurus clear command ([@abadon7](https://github.com/abadon7))\\n - [#3485](https://github.com/facebook/docusaurus/pull/3485) feat(v2): Add @theme-init components to user theme ([@edno](https://github.com/edno))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#3467](https://github.com/facebook/docusaurus/pull/3467) feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#3496](https://github.com/facebook/docusaurus/pull/3496) feat(v2): migrate bootstrap components to ts ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3474](https://github.com/facebook/docusaurus/pull/3474) feat(v2): allow to use array of files in customCss field ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3457](https://github.com/facebook/docusaurus/pull/3457) feat(v2): add optional custom wrapper class name for pages based on theme classic Layout ([@Simek](https://github.com/Simek))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3517](https://github.com/facebook/docusaurus/pull/3517) fix(v1): v1 deploy preview should be available ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3498](https://github.com/facebook/docusaurus/pull/3498) fix(v2): fixed props being passed to @svgr/webpack loader ([@anru](https://github.com/anru))\\n- `docusaurus-theme-search-algolia`\\n - [#3456](https://github.com/facebook/docusaurus/pull/3456) fix(v2): use valid value for crossorigin attribute ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#3427](https://github.com/facebook/docusaurus/pull/3427) fix(v2): normalizeUrl edge cases ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-theme-classic`\\n - [#3472](https://github.com/facebook/docusaurus/pull/3472) fix(v2): Show dropdown instead of a single button when there are two versions ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#3441](https://github.com/facebook/docusaurus/pull/3441) fix(v2): fixing typo in error message ([@ayonious](https://github.com/ayonious))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3499](https://github.com/facebook/docusaurus/pull/3499) chore(v2): upgrade Infima to 0.2.0-alpha.13 ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus`\\n - [#3502](https://github.com/facebook/docusaurus/pull/3502) docs(v2): add doc for wrapping theme components with @theme-original and @theme-init ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3473](https://github.com/facebook/docusaurus/pull/3473) misc: add License to the documentation ([@muskanvk](https://github.com/muskanvk))\\n - [#3492](https://github.com/facebook/docusaurus/pull/3492) docs(v2): Added drone.io publish docs #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3479](https://github.com/facebook/docusaurus/pull/3479) docs(v2): remove redundant new line in code block ([@lex111](https://github.com/lex111))\\n - [#3448](https://github.com/facebook/docusaurus/pull/3448) chore(v2): fix theme classic navbar style docs ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-migrate`\\n - [#3504](https://github.com/facebook/docusaurus/pull/3504) chore(v1): move v1 docs inside website-1.x ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3506](https://github.com/facebook/docusaurus/pull/3506) chore(v2): v2 website should make it easy to contribute to upstream docs ([@slorber](https://github.com/slorber))\\n - [#3511](https://github.com/facebook/docusaurus/pull/3511) misc: update CODEOWNERS ([@yangshun](https://github.com/yangshun))\\n - [#3477](https://github.com/facebook/docusaurus/pull/3477) chore(v2): remove alpha 58 doc ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`\\n - [#3453](https://github.com/facebook/docusaurus/pull/3453) test(v2): add protocol relative uri validation test ([@moonrailgun](https://github.com/moonrailgun))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrey Rublev ([@anru](https://github.com/anru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Henry V\xe9lez ([@abadon7](https://github.com/abadon7))\\n- Jeremy Hager ([@jeremyhager](https://github.com/jeremyhager))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Muskan Kumar ([@muskanvk](https://github.com/muskanvk))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tim Gates ([@timgates42](https://github.com/timgates42))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))"},{"id":"/2.0.0-alpha.64","metadata":{"permalink":"/changelog/2.0.0-alpha.64","source":"@site/changelog/source/2.0.0-alpha.64.md","title":"2.0.0-alpha.64","description":"New Feature","date":"2020-09-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ash","alias":"ashscodes","url":"https://github.com/ashscodes","imageURL":"https://github.com/ashscodes.png","key":"ashscodes","page":null},{"name":"josephMG","alias":"josephMG","url":"https://github.com/josephMG","imageURL":"https://github.com/josephMG.png","key":"josephMG","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Rutik Wankhade","alias":"rutikwankhade","url":"https://github.com/rutikwankhade","imageURL":"https://github.com/rutikwankhade.png","key":"rutikwankhade","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-11T20:00","authors":["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"nextItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#3432](https://github.com/facebook/docusaurus/pull/3432) feat(v2): add style property to theme-classic navbar ([@Simek](https://github.com/Simek))\\n - [#3406](https://github.com/facebook/docusaurus/pull/3406) feat(v2): ability to add/override theme html metadatas ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#3426](https://github.com/facebook/docusaurus/pull/3426) feat(v2): add option to add trailing slash to urls in sitemap ([@mpsq](https://github.com/mpsq))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3438](https://github.com/facebook/docusaurus/pull/3438) fix(v2): docusaurus 2 PWA should work under baseurl (deploy previews) ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3435](https://github.com/facebook/docusaurus/pull/3435) fix(v2): fix empty link error message ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#3436](https://github.com/facebook/docusaurus/pull/3436) fix(v2): Correctly resolve sw.js path on windows ([@ashscodes](https://github.com/ashscodes))\\n- `docusaurus-theme-classic`\\n - [#3433](https://github.com/facebook/docusaurus/pull/3433) fix(v2): fix theme-classic announcement bar closeable style ([@Simek](https://github.com/Simek))\\n- `docusaurus-1.x`\\n - [#3429](https://github.com/facebook/docusaurus/pull/3429) fix(v1): versioned_docs and skip-next-release relative path issue ([@josephMG](https://github.com/josephMG))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3418](https://github.com/facebook/docusaurus/pull/3418) fix(v2): reset sidebar state on sidebar changes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3405](https://github.com/facebook/docusaurus/pull/3405) fix(v2): fix debug plugin unscoped inline code global css ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3428](https://github.com/facebook/docusaurus/pull/3428) docs(v2): fix grammar ([@thadguidry](https://github.com/thadguidry))\\n- [#3425](https://github.com/facebook/docusaurus/pull/3425) docs(v2): mention Eta in ssrTemplate section ([@mpsq](https://github.com/mpsq))\\n- [#3423](https://github.com/facebook/docusaurus/pull/3423) docs(v2): minor typo fix ([@rutikwankhade](https://github.com/rutikwankhade))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3439](https://github.com/facebook/docusaurus/pull/3439) chore(v2): fix serialize-javascript security issue by upgrading webpack/workbox ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3401](https://github.com/facebook/docusaurus/pull/3401) chore(deps): bump decompress from 4.2.0 to 4.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 7\\n\\n- Ash ([@ashscodes](https://github.com/ashscodes))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Rutik Wankhade ([@rutikwankhade](https://github.com/rutikwankhade))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- [@josephMG](https://github.com/josephMG)"},{"id":"/2.0.0-alpha.63","metadata":{"permalink":"/changelog/2.0.0-alpha.63","source":"@site/changelog/source/2.0.0-alpha.63.md","title":"2.0.0-alpha.63","description":"New Feature","date":"2020-09-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"Sam Ko","alias":"samsisle","url":"https://github.com/samsisle","imageURL":"https://github.com/samsisle.png","key":"samsisle","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-03T20:00","authors":["mpsq","samsisle","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"nextItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3387](https://github.com/facebook/docusaurus/pull/3387) feat(v2): allow users to specify a custom ssr HTML template ([@mpsq](https://github.com/mpsq))\\n- `docusaurus-plugin-debug`\\n - [#3392](https://github.com/facebook/docusaurus/pull/3392) feat(v2): officially release @docusaurus/plugin-debug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3388](https://github.com/facebook/docusaurus/pull/3388) feat(v2): add isCloseable property for theme-classic announcement bar ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3373](https://github.com/facebook/docusaurus/pull/3373) feat(v2): docs options.onlyIncludeVersions ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3397](https://github.com/facebook/docusaurus/pull/3397) fix(v2): DocSearch should keep working after a new release (part 2/2) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3393](https://github.com/facebook/docusaurus/pull/3393) fix(v2): DocSearch should keep working after a new release (part 1/2) ([@slorber](https://github.com/slorber))\\n - [#3381](https://github.com/facebook/docusaurus/pull/3381) fix(v2): alpha 62 doc fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3385](https://github.com/facebook/docusaurus/pull/3385) fix(v2): scripts should allow unknown values ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3382](https://github.com/facebook/docusaurus/pull/3382) fix(v2): allow using classic theme/preset without the docs plugin ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`\\n - [#3377](https://github.com/facebook/docusaurus/pull/3377) fix(v2): reject routeBasePath: \'\' ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3390](https://github.com/facebook/docusaurus/pull/3390) docs(v1, v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n- [#3344](https://github.com/facebook/docusaurus/pull/3344) docs(v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n\\n## :house: Internal\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3386](https://github.com/facebook/docusaurus/pull/3386) chore(v2): pin exact dependency versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3359](https://github.com/facebook/docusaurus/pull/3359) chore(v2): prepare v2.0.0.alpha-62 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Sam Ko ([@samsisle](https://github.com/samsisle))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))"},{"id":"/2.0.0-alpha.62","metadata":{"permalink":"/changelog/2.0.0-alpha.62","source":"@site/changelog/source/2.0.0-alpha.62.md","title":"2.0.0-alpha.62","description":"New Feature","date":"2020-08-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adinaja","alias":"adinaja","url":"https://github.com/adinaja","imageURL":"https://github.com/adinaja.png","key":"adinaja","page":null},{"name":"Franklyn Chisom","alias":"ajifrank75","url":"https://github.com/ajifrank75","imageURL":"https://github.com/ajifrank75.png","key":"ajifrank75","page":null},{"name":"Ali Hosseini","alias":"Ako92","url":"https://github.com/Ako92","imageURL":"https://github.com/Ako92.png","key":"Ako92","page":null},{"name":"Amy Lei","alias":"amy-lei","url":"https://github.com/amy-lei","imageURL":"https://github.com/amy-lei.png","key":"amy-lei","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"Archit","alias":"arcvats","url":"https://github.com/arcvats","imageURL":"https://github.com/arcvats.png","key":"arcvats","page":null},{"name":"Arthur Flam","alias":"arthur-flam","url":"https://github.com/arthur-flam","imageURL":"https://github.com/arthur-flam.png","key":"arthur-flam","page":null},{"name":"Bogdan Doroschenko","alias":"BogdanDor","url":"https://github.com/BogdanDor","imageURL":"https://github.com/BogdanDor.png","key":"BogdanDor","page":null},{"name":"alex busnelli","alias":"boosh511","url":"https://github.com/boosh511","imageURL":"https://github.com/boosh511.png","key":"boosh511","page":null},{"name":"Daniel Wilkowski","alias":"Danon","url":"https://github.com/Danon","imageURL":"https://github.com/Danon.png","key":"Danon","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Derek","alias":"dschaller","url":"https://github.com/dschaller","imageURL":"https://github.com/dschaller.png","key":"dschaller","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Nisarag","alias":"FocalChord","url":"https://github.com/FocalChord","imageURL":"https://github.com/FocalChord.png","key":"FocalChord","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Govardhan Srinivas","alias":"govardhan-srinivas","url":"https://github.com/govardhan-srinivas","imageURL":"https://github.com/govardhan-srinivas.png","key":"govardhan-srinivas","page":null},{"name":"Yang Luo","alias":"hsluoyz","url":"https://github.com/hsluoyz","imageURL":"https://github.com/hsluoyz.png","key":"hsluoyz","page":null},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},{"name":"Jean-Marc Saad","alias":"JeanMarcSaad","url":"https://github.com/JeanMarcSaad","imageURL":"https://github.com/JeanMarcSaad.png","key":"JeanMarcSaad","page":null},{"name":"Jonas Dellinger","alias":"JohnnyCrazy","url":"https://github.com/JohnnyCrazy","imageURL":"https://github.com/JohnnyCrazy.png","key":"JohnnyCrazy","page":null},{"name":"Jonathan","alias":"Jonathannsegal","url":"https://github.com/Jonathannsegal","imageURL":"https://github.com/Jonathannsegal.png","key":"Jonathannsegal","page":null},{"name":"lebogang Olifant","alias":"lebogangolifant","url":"https://github.com/lebogangolifant","imageURL":"https://github.com/lebogangolifant.png","key":"lebogangolifant","page":null},{"name":"leoigel","alias":"leoigel","url":"https://github.com/leoigel","imageURL":"https://github.com/leoigel.png","key":"leoigel","page":null},{"name":"Manuel Cepeda","alias":"mecm1993","url":"https://github.com/mecm1993","imageURL":"https://github.com/mecm1993.png","key":"mecm1993","page":null},{"name":"Mirzayev Farid","alias":"MirzayevFarid","url":"https://github.com/MirzayevFarid","imageURL":"https://github.com/MirzayevFarid.png","key":"MirzayevFarid","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Olawanle Joel","alias":"olawanlejoel","url":"https://github.com/olawanlejoel","imageURL":"https://github.com/olawanlejoel.png","key":"olawanlejoel","page":null},{"name":"Orta Therox","alias":"orta","url":"https://github.com/orta","imageURL":"https://github.com/orta.png","key":"orta","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"shalinikumari50","alias":"shalinikumari50","url":"https://github.com/shalinikumari50","imageURL":"https://github.com/shalinikumari50.png","key":"shalinikumari50","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Sourav Dey","alias":"Souravdey777","url":"https://github.com/Souravdey777","imageURL":"https://github.com/Souravdey777.png","key":"Souravdey777","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Hani Mohammed","alias":"thehanimo","url":"https://github.com/thehanimo","imageURL":"https://github.com/thehanimo.png","key":"thehanimo","page":null},{"name":"Tolunay Akbulut","alias":"tolunayakbulut","url":"https://github.com/tolunayakbulut","imageURL":"https://github.com/tolunayakbulut.png","key":"tolunayakbulut","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"Vincent","alias":"Vinnl","url":"https://github.com/Vinnl","imageURL":"https://github.com/Vinnl.png","key":"Vinnl","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-28T20:00","authors":["adinaja","ajifrank75","Ako92","amy-lei","anshulrgoyal","arcvats","arthur-flam","BogdanDor","boosh511","Danon","Drewbi","dschaller","fanny","FocalChord","francoischalifour","govardhan-srinivas","hsluoyz","imskr","JeanMarcSaad","JohnnyCrazy","Jonathannsegal","lebogangolifant","leoigel","mecm1993","MirzayevFarid","nebrelbug","olawanlejoel","orta","SamChou19815","shalinikumari50","slorber","Souravdey777","teikjun","thehanimo","tolunayakbulut","vandreleal","Vinnl","yangshun","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"nextItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3357](https://github.com/facebook/docusaurus/pull/3357) feat(v2): docs version configuration: lastVersion, version.{path,label} ([@slorber](https://github.com/slorber))\\n - [#3328](https://github.com/facebook/docusaurus/pull/3328) feat(v2): Provide docs plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3356](https://github.com/facebook/docusaurus/pull/3356) feat(v2): Provide type definitions for remaining theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#3274](https://github.com/facebook/docusaurus/pull/3274) feat(v2): add TOC to blog posts ([@amy-lei](https://github.com/amy-lei))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3354](https://github.com/facebook/docusaurus/pull/3354) feat(v2): Provide type definitions for MDXPage from page plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3348](https://github.com/facebook/docusaurus/pull/3348) feat(v2): Provide typing to most of the theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`\\n - [#3284](https://github.com/facebook/docusaurus/pull/3284) feat(v2): blog slug frontmatter ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#2981](https://github.com/facebook/docusaurus/pull/2981) feat(v2): bootstrap theme, preset, template, CI previews ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3267](https://github.com/facebook/docusaurus/pull/3267) feat(v2): Provide blog plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-debug`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-types`, `docusaurus`\\n - [#3229](https://github.com/facebook/docusaurus/pull/3229) feat(v2): debug pages + debug layout + ability to debug content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3021](https://github.com/facebook/docusaurus/pull/3021) feat(v2): update swizzle command to suggest component/theme ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3196](https://github.com/facebook/docusaurus/pull/3196) feat(v2): add support to ignore files in pages plugin ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3204](https://github.com/facebook/docusaurus/pull/3204) feat(v2): blog + docs multi-instance plugins ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3096](https://github.com/facebook/docusaurus/pull/3096) feat(v2): add support to import assets using relative link in markdown syntax ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#3358](https://github.com/facebook/docusaurus/pull/3358) fix(v2): fix migrate cli paths (sidebars/customcss) ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3311](https://github.com/facebook/docusaurus/pull/3311) fix(v2): add https support in webpack devserver ([@arcvats](https://github.com/arcvats))\\n - [#3313](https://github.com/facebook/docusaurus/pull/3313) fix(v2): resolve webpack loaders from siteDir/node_modules ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3308](https://github.com/facebook/docusaurus/pull/3308) fix(v2): brokenLinks should not report links that belong to an existing folder if folder/index.html exists ([@slorber](https://github.com/slorber))\\n - [#3273](https://github.com/facebook/docusaurus/pull/3273) fix: logic error while deciding deploymentBranch ([@thehanimo](https://github.com/thehanimo))\\n - [#3281](https://github.com/facebook/docusaurus/pull/3281) fix(v2): allow swizzling of component even if case doesn\'t match ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3222](https://github.com/facebook/docusaurus/pull/3222) fix(v2): update react-loadable-ssr-addon to solve yarn2 error ([@slorber](https://github.com/slorber))\\n - [#3191](https://github.com/facebook/docusaurus/pull/3191) fix(v2): add missing `lodash.flatmap` dependency ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-bootstrap`, `docusaurus-theme-search-algolia`, `docusaurus-types`\\n - [#3355](https://github.com/facebook/docusaurus/pull/3355) fix(v2): Add missing dependencies to packages ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3352](https://github.com/facebook/docusaurus/pull/3352) fix(v2): Allow the alt for the logo to be empty ([@Vinnl](https://github.com/Vinnl))\\n - [#3240](https://github.com/facebook/docusaurus/pull/3240) fix(v2): navbar dropdown opened with tab, not closing on click outside ([@Ako92](https://github.com/Ako92))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3347](https://github.com/facebook/docusaurus/pull/3347) fix(v2): linking to asset or external html page -> don\'t use history.push() ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3340](https://github.com/facebook/docusaurus/pull/3340) fix(v1): show images after one line code block ([@adinaja](https://github.com/adinaja))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#3290](https://github.com/facebook/docusaurus/pull/3290) fix(v1,v2): Add initial-scale=1.0 to all meta viewport tags ([@nebrelbug](https://github.com/nebrelbug))\\n- `docusaurus-theme-search-algolia`\\n - [#3297](https://github.com/facebook/docusaurus/pull/3297) fix(v2): keep DocSearch state on remounts ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3280](https://github.com/facebook/docusaurus/pull/3280) fix(v2): allow search page swizzle ([@Ako92](https://github.com/Ako92))\\n - [#3263](https://github.com/facebook/docusaurus/pull/3263) fix(v2): do not index search pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3283](https://github.com/facebook/docusaurus/pull/3283) fix(v2): pass images in static dir to webpack-loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Other\\n - [#3269](https://github.com/facebook/docusaurus/pull/3269) fix(v2): website feedback page hydration bug ([@mecm1993](https://github.com/mecm1993))\\n - [#3200](https://github.com/facebook/docusaurus/pull/3200) fix(v1): self-host user images ([@leoigel](https://github.com/leoigel))\\n- `docusaurus-plugin-google-gtag`\\n - [#3243](https://github.com/facebook/docusaurus/pull/3243) fix(v2): GTM, send page_view events on navigate ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3262](https://github.com/facebook/docusaurus/pull/3262) fix(v2): doc path special char (space or other) should lead to a valid slug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3247](https://github.com/facebook/docusaurus/pull/3247) fix(v2): modify validation schema and tests for rehype/remark + remove duplicate dependency ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-init`\\n - [#3258](https://github.com/facebook/docusaurus/pull/3258) fix(v2): fix template alt image prop ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3227](https://github.com/facebook/docusaurus/pull/3227) fix(v2): relax URI validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`\\n - [#3228](https://github.com/facebook/docusaurus/pull/3228) fix(v2): deprecate docs homePageId in favor of frontmatter \\"slug: /\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3225](https://github.com/facebook/docusaurus/pull/3225) fix(v2): swizzle minor improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#3210](https://github.com/facebook/docusaurus/pull/3210) fix(v2): fix theme validation for prism field and add tests ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3192](https://github.com/facebook/docusaurus/pull/3192) fix(v2): add missing `chalk` and `lodash` dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3188](https://github.com/facebook/docusaurus/pull/3188) fix(v2): Add a missing whitespace before prompt to use `npm run serve` ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3346](https://github.com/facebook/docusaurus/pull/3346) docs(v2): add draft doc ([@imskr](https://github.com/imskr))\\n - [#3336](https://github.com/facebook/docusaurus/pull/3336) docs(v2): add Nisarag to Fellows section ([@FocalChord](https://github.com/FocalChord))\\n - [#3335](https://github.com/facebook/docusaurus/pull/3335) docs(v2): update team profile ([@yangshun](https://github.com/yangshun))\\n - [#3334](https://github.com/facebook/docusaurus/pull/3334) docs(v2): add Drew to Fellows section ([@Drewbi](https://github.com/Drewbi))\\n - [#3333](https://github.com/facebook/docusaurus/pull/3333) docs(v2): add anshul and teikjun to fellows section of team page ([@teikjun](https://github.com/teikjun))\\n - [#3326](https://github.com/facebook/docusaurus/pull/3326) docs(v1): showcase user Casbin ([@hsluoyz](https://github.com/hsluoyz))\\n - [#3316](https://github.com/facebook/docusaurus/pull/3316) docs(v1): add Global CTO Forum to users ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n - [#3310](https://github.com/facebook/docusaurus/pull/3310) docs(v2): add \\"T-Regx\\" website to showcase ([@Danon](https://github.com/Danon))\\n - [#3307](https://github.com/facebook/docusaurus/pull/3307) docs(v2): showcase SpotifyAPI-NET ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n - [#3295](https://github.com/facebook/docusaurus/pull/3295) docs(v2): showcase Oxidizer ([@vandreleal](https://github.com/vandreleal))\\n - [#3287](https://github.com/facebook/docusaurus/pull/3287) docs: update README.md with some grammatical corrections ([@shalinikumari50](https://github.com/shalinikumari50))\\n - [#3271](https://github.com/facebook/docusaurus/pull/3271) docs(v2): fix typo ([@thehanimo](https://github.com/thehanimo))\\n - [#3277](https://github.com/facebook/docusaurus/pull/3277) docs(v1): Add Radity to users ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n - [#3276](https://github.com/facebook/docusaurus/pull/3276) docs: corrected some few typos in the docusaurus tech docs ([@ajifrank75](https://github.com/ajifrank75))\\n - [#3249](https://github.com/facebook/docusaurus/pull/3249) docs(v2): fix migration command ([@BogdanDor](https://github.com/BogdanDor))\\n - [#3248](https://github.com/facebook/docusaurus/pull/3248) Added twitter badge and modified discord Badges ([@Souravdey777](https://github.com/Souravdey777))\\n - [#3251](https://github.com/facebook/docusaurus/pull/3251) docs(v2): fix migration command for earlier versions ([@teikjun](https://github.com/teikjun))\\n - [#3252](https://github.com/facebook/docusaurus/pull/3252) docs(v2): docs typos ([@olawanlejoel](https://github.com/olawanlejoel))\\n - [#3111](https://github.com/facebook/docusaurus/pull/3111) docs(v2): clarify theme-original and theme-init ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n - [#3232](https://github.com/facebook/docusaurus/pull/3232) docs(v2): showcase user QA-Board ([@arthur-flam](https://github.com/arthur-flam))\\n - [#3205](https://github.com/facebook/docusaurus/pull/3205) docs: format reference links ([@lebogangolifant](https://github.com/lebogangolifant))\\n - [#3194](https://github.com/facebook/docusaurus/pull/3194) docs(v2): Added switch config docs to theme-classic API ([@Drewbi](https://github.com/Drewbi))\\n - [#3201](https://github.com/facebook/docusaurus/pull/3201) docs(v2): removed duplicate text under \\"Using React\\" section ([@boosh511](https://github.com/boosh511))\\n - [#3186](https://github.com/facebook/docusaurus/pull/3186) docs(v1): formatting changelog ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3202](https://github.com/facebook/docusaurus/pull/3202) fix(v2): fix svg loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3323](https://github.com/facebook/docusaurus/pull/3323) test(v2): Add unit test for migration of config file ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-theme-classic`\\n - [#3343](https://github.com/facebook/docusaurus/pull/3343) refactor(v2): announcement bar bad spelling + minor refactors ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3339](https://github.com/facebook/docusaurus/pull/3339) test(v2): make blog posts unit test ordering determinate ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3306](https://github.com/facebook/docusaurus/pull/3306) chore(v2): Define type for markdown right table of contents ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3282](https://github.com/facebook/docusaurus/pull/3282) chore(v2): fix javascript-serialize vulnerability ([@slorber](https://github.com/slorber))\\n - [#3265](https://github.com/facebook/docusaurus/pull/3265) chore(v2): upgrade terser-webpack-plugin ([@dschaller](https://github.com/dschaller))\\n- Other\\n - [#3241](https://github.com/facebook/docusaurus/pull/3241) chore(deps): bump prismjs from 1.20.0 to 1.21.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3259](https://github.com/facebook/docusaurus/pull/3259) chore(v2): fix slow commits due to lint-staged ([@slorber](https://github.com/slorber))\\n - [#3197](https://github.com/facebook/docusaurus/pull/3197) chore(v2): lockfile update ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3218](https://github.com/facebook/docusaurus/pull/3218) chore(v1): release 1.14.6 ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3238](https://github.com/facebook/docusaurus/pull/3238) refactor(v2): precompile ETA templates ([@slorber](https://github.com/slorber))\\n\\n## Committers: 39\\n\\n- Ali Hosseini ([@Ako92](https://github.com/Ako92))\\n- Amy Lei ([@amy-lei](https://github.com/amy-lei))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Archit ([@arcvats](https://github.com/arcvats))\\n- Arthur Flam ([@arthur-flam](https://github.com/arthur-flam))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Bogdan Doroschenko ([@BogdanDor](https://github.com/BogdanDor))\\n- Daniel Wilkowski ([@Danon](https://github.com/Danon))\\n- Derek ([@dschaller](https://github.com/dschaller))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Franklyn Chisom ([@ajifrank75](https://github.com/ajifrank75))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Govardhan Srinivas ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- Hani Mohammed ([@thehanimo](https://github.com/thehanimo))\\n- Jean-Marc Saad ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- Jonas Dellinger ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n- Jonathan ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n- Manuel Cepeda ([@mecm1993](https://github.com/mecm1993))\\n- Mirzayev Farid ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n- Nisarag ([@FocalChord](https://github.com/FocalChord))\\n- Olawanle Joel ([@olawanlejoel](https://github.com/olawanlejoel))\\n- Orta Therox ([@orta](https://github.com/orta))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Sourav Dey ([@Souravdey777](https://github.com/Souravdey777))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tolunay Akbulut ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Vincent ([@Vinnl](https://github.com/Vinnl))\\n- Yang Luo ([@hsluoyz](https://github.com/hsluoyz))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@adinaja](https://github.com/adinaja)\\n- [@leoigel](https://github.com/leoigel)\\n- [@shalinikumari50](https://github.com/shalinikumari50)\\n- alex busnelli ([@boosh511](https://github.com/boosh511))\\n- lebogang Olifant ([@lebogangolifant](https://github.com/lebogangolifant))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))"},{"id":"/2.0.0-alpha.61","metadata":{"permalink":"/changelog/2.0.0-alpha.61","source":"@site/changelog/source/2.0.0-alpha.61.md","title":"2.0.0-alpha.61","description":"New Feature","date":"2020-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Bucky Maler","alias":"BuckyMaler","url":"https://github.com/BuckyMaler","imageURL":"https://github.com/BuckyMaler.png","key":"BuckyMaler","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"Faizan","alias":"mdfaizan7","url":"https://github.com/mdfaizan7","imageURL":"https://github.com/mdfaizan7.png","key":"mdfaizan7","page":null},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-01T20:00","authors":["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"nextItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3083](https://github.com/facebook/docusaurus/pull/3083) feat(v2): warn user when there are conflicting routes ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3158](https://github.com/facebook/docusaurus/pull/3158) feat(v2): markdown pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3127](https://github.com/facebook/docusaurus/pull/3127) feat(v2): dark mode toggle customization ([@Drewbi](https://github.com/Drewbi))\\n- `docusaurus-theme-search-algolia`\\n - [#3166](https://github.com/facebook/docusaurus/pull/3166) feat(v2): improve Algolia search accessibility ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2359](https://github.com/facebook/docusaurus/pull/2359) feat(v2): support custom description for blog-only mode ([@zxuqian](https://github.com/zxuqian))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3180](https://github.com/facebook/docusaurus/pull/3180) fix(v2): fix markdown images always using webpack url-loader ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3171](https://github.com/facebook/docusaurus/pull/3171) fix(v2): tab label showing outline & background when clicked ([@mdfaizan7](https://github.com/mdfaizan7))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#3168](https://github.com/facebook/docusaurus/pull/3168) fix(v2): fix link items refusing attributes like target, rel etc... ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3162](https://github.com/facebook/docusaurus/pull/3162) fix(v2): inability for users to pin their docusaurus version ([@BuckyMaler](https://github.com/BuckyMaler))\\n\\n## :memo: Documentation\\n\\n- [#3163](https://github.com/facebook/docusaurus/pull/3163) docs(v2): showcase user questdb ([@mpsq](https://github.com/mpsq))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3164](https://github.com/facebook/docusaurus/pull/3164) chore(deps): bump elliptic from 6.5.2 to 6.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3157](https://github.com/facebook/docusaurus/pull/3157) chore(v2): remove alpha 59 doc ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3154](https://github.com/facebook/docusaurus/pull/3154) chore(v2): prepare v2.0.0.alpha-60 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Bucky Maler ([@BuckyMaler](https://github.com/BuckyMaler))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Faizan ([@mdfaizan7](https://github.com/mdfaizan7))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))"},{"id":"/2.0.0-alpha.60","metadata":{"permalink":"/changelog/2.0.0-alpha.60","source":"@site/changelog/source/2.0.0-alpha.60.md","title":"2.0.0-alpha.60","description":"New Feature","date":"2020-07-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Hob Adams","alias":"hobadams","url":"https://github.com/hobadams","imageURL":"https://github.com/hobadams.png","key":"hobadams","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-29T20:00","authors":["hobadams","Simek","slorber","teikjun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"nextItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3134](https://github.com/facebook/docusaurus/pull/3134) feat(v2): add validation escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3124](https://github.com/facebook/docusaurus/pull/3124) feat(v1): add \'slugPreprocessor\' config option to allow users customize the hash links ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3133](https://github.com/facebook/docusaurus/pull/3133) feat(v2): add themeConfig validation to algolia theme ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3142](https://github.com/facebook/docusaurus/pull/3142) fix(v2): config validation fixes + add tests for config validation ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#3149](https://github.com/facebook/docusaurus/pull/3149) fix(v2): BrowserOnly should not return undefined ([@slorber](https://github.com/slorber))\\n - [#3143](https://github.com/facebook/docusaurus/pull/3143) fix(v2): absolute Links should be automatically prefixed by baseurl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#3141](https://github.com/facebook/docusaurus/pull/3141) fix(v2): remove buggy routesLoaded + deprecate routesLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3140](https://github.com/facebook/docusaurus/pull/3140) fix(v2): navbar item links should allow unknown attributes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3138](https://github.com/facebook/docusaurus/pull/3138) fix(v2): add accessible label for Algolia search button ([@hobadams](https://github.com/hobadams))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3120](https://github.com/facebook/docusaurus/pull/3120) fix(v2): make config validation less strict ([@teikjun](https://github.com/teikjun))\\n\\n## :memo: Documentation\\n\\n- [#3145](https://github.com/facebook/docusaurus/pull/3145) docs(v2): add myself to /team page + add TeamProfileCard component ([@slorber](https://github.com/slorber))\\n- [#3146](https://github.com/facebook/docusaurus/pull/3146) docs(v2): prettier docs ([@slorber](https://github.com/slorber))\\n- [#3116](https://github.com/facebook/docusaurus/pull/3116) chore(v2): docs updates after release ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3130](https://github.com/facebook/docusaurus/pull/3130) chore(v2): remove old versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3114](https://github.com/facebook/docusaurus/pull/3114) chore(v2): prepare v2.0.0.alpha-59 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 4\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Hob Adams ([@hobadams](https://github.com/hobadams))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))"},{"id":"/2.0.0-alpha.59","metadata":{"permalink":"/changelog/2.0.0-alpha.59","source":"@site/changelog/source/2.0.0-alpha.59.md","title":"2.0.0-alpha.59","description":"New Feature","date":"2020-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mahfoudh Arous","alias":"aladin002dz","url":"https://github.com/aladin002dz","imageURL":"https://github.com/aladin002dz.png","key":"aladin002dz","page":null},{"name":"Eric Dobbertin","alias":"aldeed","url":"https://github.com/aldeed","imageURL":"https://github.com/aldeed.png","key":"aldeed","page":null},{"name":"Amirul Ahmad","alias":"amirulahmad","url":"https://github.com/amirulahmad","imageURL":"https://github.com/amirulahmad.png","key":"amirulahmad","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"Ayan Banerjee","alias":"ayan-b","url":"https://github.com/ayan-b","imageURL":"https://github.com/ayan-b.png","key":"ayan-b","page":null},{"name":"Jeremy Asuncion","alias":"codemonkey800","url":"https://github.com/codemonkey800","imageURL":"https://github.com/codemonkey800.png","key":"codemonkey800","page":null},{"name":"Daniel Hochman","alias":"danielhochman","url":"https://github.com/danielhochman","imageURL":"https://github.com/danielhochman.png","key":"danielhochman","page":null},{"name":"Deepak Giri","alias":"dpkg","url":"https://github.com/dpkg","imageURL":"https://github.com/dpkg.png","key":"dpkg","page":null},{"name":"ehsan jso","alias":"ehsanjso","url":"https://github.com/ehsanjso","imageURL":"https://github.com/ehsanjso.png","key":"ehsanjso","page":null},{"name":"Arsalan Khattak","alias":"eKhattak","url":"https://github.com/eKhattak","imageURL":"https://github.com/eKhattak.png","key":"eKhattak","page":null},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},{"name":"matbub","alias":"hi-matbub","url":"https://github.com/hi-matbub","imageURL":"https://github.com/hi-matbub.png","key":"hi-matbub","page":null},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"Jordan Liu","alias":"jordanliu","url":"https://github.com/jordanliu","imageURL":"https://github.com/jordanliu.png","key":"jordanliu","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Paul Cowgill","alias":"pcowgill","url":"https://github.com/pcowgill","imageURL":"https://github.com/pcowgill.png","key":"pcowgill","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Frida Hjelm","alias":"svtfrida","url":"https://github.com/svtfrida","imageURL":"https://github.com/svtfrida.png","key":"svtfrida","page":null},{"name":"Taylor Allen","alias":"taylorallen0913","url":"https://github.com/taylorallen0913","imageURL":"https://github.com/taylorallen0913.png","key":"taylorallen0913","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},{"name":"Rian Finnegan","alias":"xtellurian","url":"https://github.com/xtellurian","imageURL":"https://github.com/xtellurian.png","key":"xtellurian","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-24T20:00","authors":["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"nextItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`\\n - [#3015](https://github.com/facebook/docusaurus/pull/3015) feat: automate migration from v1 to v2 ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3105](https://github.com/facebook/docusaurus/pull/3105) feat(v2): add docusaurus script for npm users ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2815](https://github.com/facebook/docusaurus/pull/2815) feat(v2): introduce DocSearch v3 search ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-init`, `docusaurus-types`, `docusaurus`\\n - [#3059](https://github.com/facebook/docusaurus/pull/3059) feat(v2): broken links detection ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3084](https://github.com/facebook/docusaurus/pull/3084) feat(v2): absolute slugs and slug resolution system ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#3069](https://github.com/facebook/docusaurus/pull/3069) feat(v2): support for adding relative images and handling broken image links ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3080](https://github.com/facebook/docusaurus/pull/3080) feat(v2): add support for serve command ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#3058](https://github.com/facebook/docusaurus/pull/3058) feat(v2): useDocusaurusContext().siteMetadata ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3032](https://github.com/facebook/docusaurus/pull/3032) feat(v2): notify users when docusaurus version is outdated ([@teikjun](https://github.com/teikjun))\\n - [#3033](https://github.com/facebook/docusaurus/pull/3033) feat(v2): add useBaseUrlUtils() hook ([@slorber](https://github.com/slorber))\\n - [#3006](https://github.com/facebook/docusaurus/pull/3006) feat(v2): prompt user when default port is in use ([@taylorallen0913](https://github.com/taylorallen0913))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus`\\n - [#3050](https://github.com/facebook/docusaurus/pull/3050) feat(v2): Collect plugin versions to allow them to be inspected in debug plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3038](https://github.com/facebook/docusaurus/pull/3038) feat(v2): Support keywords meta in blog posts ([@dpkg](https://github.com/dpkg))\\n - [#2974](https://github.com/facebook/docusaurus/pull/2974) feat(v2): Error when hooks depends on context is used outside of Layout ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#2205](https://github.com/facebook/docusaurus/pull/2205) feat(v2): Plugin for Offline/PWA support ([@codemonkey800](https://github.com/codemonkey800))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2994](https://github.com/facebook/docusaurus/pull/2994) feat(v2): configureWebpack merge strategy + use file-loader for common asset types ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#2989](https://github.com/facebook/docusaurus/pull/2989) feat(v2): add disableVersioning config to docs plugin ([@slorber](https://github.com/slorber))\\n - [#2877](https://github.com/facebook/docusaurus/pull/2877) feat(v2): allow skipping build docs for next version ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#2955](https://github.com/facebook/docusaurus/pull/2955) feat(v1): add deletedDocs config to fix unwanted versioning fallback ([@aldeed](https://github.com/aldeed))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#2943](https://github.com/facebook/docusaurus/pull/2943) feat(v2): option and config validation life cycle method for official plugins ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3107](https://github.com/facebook/docusaurus/pull/3107) fix(v2): broken links detector: ignore existing folders ([@slorber](https://github.com/slorber))\\n - [#3112](https://github.com/facebook/docusaurus/pull/3112) fix(v2): baseUrl is wrongly appended to anchor links ([@slorber](https://github.com/slorber))\\n - [#3063](https://github.com/facebook/docusaurus/pull/3063) fix(v2): classify link hrefs with protocol identifier as internal ([@svtfrida](https://github.com/svtfrida))\\n- `docusaurus-theme-classic`\\n - [#3106](https://github.com/facebook/docusaurus/pull/3106) fix(v2): dropdown navbar item: validation too strict ([@slorber](https://github.com/slorber))\\n - [#3029](https://github.com/facebook/docusaurus/pull/3029) fix(v2): change description for blog post paginator ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3108](https://github.com/facebook/docusaurus/pull/3108) fix(v2): fix docs instance path typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#3025](https://github.com/facebook/docusaurus/pull/3025) fix(v2):pass siteConfig as prop to pages ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#3017](https://github.com/facebook/docusaurus/pull/3017) fix(v2): fix broken links on versions page ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`, `docusaurus`\\n - [#3010](https://github.com/facebook/docusaurus/pull/3010) fix(v2): make client-redirect-plugin not baseUrl sensitive ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-1.x`\\n - [#2993](https://github.com/facebook/docusaurus/pull/2993) fix(relative path): last update date and by isn\u2019t generated if localh\u2026 ([@amirulahmad](https://github.com/amirulahmad))\\n- `docusaurus-plugin-client-redirects`\\n - [#2969](https://github.com/facebook/docusaurus/pull/2969) fix: fromExtensions and toExtensions translation when used with baseUrl ([@jknoxville](https://github.com/jknoxville))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3088](https://github.com/facebook/docusaurus/pull/3088) improve navbar menu ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :memo: Documentation\\n\\n- [#3026](https://github.com/facebook/docusaurus/pull/3026) docs(v2): add documentation for migration command ([@teikjun](https://github.com/teikjun))\\n- [#3094](https://github.com/facebook/docusaurus/pull/3094) docs(v2): showcase user Clutch ([@danielhochman](https://github.com/danielhochman))\\n- [#3101](https://github.com/facebook/docusaurus/pull/3101) docs(v2):Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3098](https://github.com/facebook/docusaurus/pull/3098) docs: Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3086](https://github.com/facebook/docusaurus/pull/3086) doc(v2): replace heading position ([@eKhattak](https://github.com/eKhattak))\\n- [#3082](https://github.com/facebook/docusaurus/pull/3082) fixing few typos and enhancing few sentences clarity ([@aladin002dz](https://github.com/aladin002dz))\\n- [#3078](https://github.com/facebook/docusaurus/pull/3078) Updated link for #docusaurus-2-dev discord ([@jordanliu](https://github.com/jordanliu))\\n- [#3076](https://github.com/facebook/docusaurus/pull/3076) docs(v2): showcase Runlet ([@vandreleal](https://github.com/vandreleal))\\n- [#3040](https://github.com/facebook/docusaurus/pull/3040) docs(v2): correct the documentation for docs-only mode ([@teikjun](https://github.com/teikjun))\\n- [#3034](https://github.com/facebook/docusaurus/pull/3034) docs(v2): showcase user Tasit ([@pcowgill](https://github.com/pcowgill))\\n- [#3022](https://github.com/facebook/docusaurus/pull/3022) docs(v2): showcase Eta ([@nebrelbug](https://github.com/nebrelbug))\\n- [#3011](https://github.com/facebook/docusaurus/pull/3011) docs(v1): external links ([@slorber](https://github.com/slorber))\\n- [#2997](https://github.com/facebook/docusaurus/pull/2997) docs(v2): Document TypeScript support ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2973](https://github.com/facebook/docusaurus/pull/2973) docs(v2): Fix typo in markdown-features ([@ehsanjso](https://github.com/ehsanjso))\\n- [#2991](https://github.com/facebook/docusaurus/pull/2991) Showcase Amphora Data ([@xtellurian](https://github.com/xtellurian))\\n- [#2983](https://github.com/facebook/docusaurus/pull/2983) docs(v2): add plugin redirects production build note ([@slorber](https://github.com/slorber))\\n- [#2967](https://github.com/facebook/docusaurus/pull/2967) docs(v2): fix typos in plugin-content examples ([@hi-matbub](https://github.com/hi-matbub))\\n- [#2960](https://github.com/facebook/docusaurus/pull/2960) doc(v2): publish doc update after alpha.58 release ([@slorber](https://github.com/slorber))\\n- [#2966](https://github.com/facebook/docusaurus/pull/2966) docs(v2): fix typo in plugin-content-pages example ([@hi-matbub](https://github.com/hi-matbub))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3113](https://github.com/facebook/docusaurus/pull/3113) chore(v2): ability to test the migration cli easily ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3099](https://github.com/facebook/docusaurus/pull/3099) fix(v2): netlify.toml shouldn\'t affect v1 site deployment config ([@slorber](https://github.com/slorber))\\n - [#3068](https://github.com/facebook/docusaurus/pull/3068) chore(deps): bump lodash from 4.17.15 to 4.17.19 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2958](https://github.com/facebook/docusaurus/pull/2958) docs(v2): rename 2.0.0-alpha.57 to 2.0.0-alpha.58 ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3093](https://github.com/facebook/docusaurus/pull/3093) fix(v2): fix recent baseurl issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3055](https://github.com/facebook/docusaurus/pull/3055) chore(v2): Adopt corejs 3 and only import at entry point ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2998](https://github.com/facebook/docusaurus/pull/2998) chore(v2): refactor yarn tsc to yarn build + add theme-classic watch mode ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3007](https://github.com/facebook/docusaurus/pull/3007) fix(v2): Add two missing docusaurus core babel dependency ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#2950](https://github.com/facebook/docusaurus/pull/2950) chore(v2): Implement a simple E2E testing mechanism for `docusausus start` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`\\n - [#2996](https://github.com/facebook/docusaurus/pull/2996) chore(v2): Merge devDependencies in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2977](https://github.com/facebook/docusaurus/pull/2977) chore(v2): Remove extraneous package-lock.json ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`\\n - [#2962](https://github.com/facebook/docusaurus/pull/2962) Feat: replace yup with joi for cleaner validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2976](https://github.com/facebook/docusaurus/pull/2976) chore(v2): Fix more eslint errors ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2972](https://github.com/facebook/docusaurus/pull/2972) chore(v2): Fix a lot of eslint warnings ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## Committers: 25\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amirul Ahmad ([@amirulahmad](https://github.com/amirulahmad))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Arsalan Khattak ([@eKhattak](https://github.com/eKhattak))\\n- Ayan Banerjee ([@ayan-b](https://github.com/ayan-b))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Daniel Hochman ([@danielhochman](https://github.com/danielhochman))\\n- Deepak Giri ([@dpkg](https://github.com/dpkg))\\n- Eric Dobbertin ([@aldeed](https://github.com/aldeed))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Frida Hjelm ([@svtfrida](https://github.com/svtfrida))\\n- Jeremy Asuncion ([@codemonkey800](https://github.com/codemonkey800))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Jordan Liu ([@jordanliu](https://github.com/jordanliu))\\n- Mahfoudh Arous ([@aladin002dz](https://github.com/aladin002dz))\\n- Paul Cowgill ([@pcowgill](https://github.com/pcowgill))\\n- Rian Finnegan ([@xtellurian](https://github.com/xtellurian))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Allen ([@taylorallen0913](https://github.com/taylorallen0913))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- ehsan jso ([@ehsanjso](https://github.com/ehsanjso))\\n- matbub ([@hi-matbub](https://github.com/hi-matbub))"},{"id":"/2.0.0-alpha.58","metadata":{"permalink":"/changelog/2.0.0-alpha.58","source":"@site/changelog/source/2.0.0-alpha.58.md","title":"2.0.0-alpha.58","description":"New Feature","date":"2020-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},{"name":"belokonm","alias":"belokonm","url":"https://github.com/belokonm","imageURL":"https://github.com/belokonm.png","key":"belokonm","page":null},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Guillaume Jacquart","alias":"guillaumejacquart","url":"https://github.com/guillaumejacquart","imageURL":"https://github.com/guillaumejacquart.png","key":"guillaumejacquart","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},{"name":"Koki Nishihara","alias":"Nishikoh","url":"https://github.com/Nishikoh","imageURL":"https://github.com/Nishikoh.png","key":"Nishikoh","page":null},{"name":"Paul Glezen","alias":"pglezen","url":"https://github.com/pglezen","imageURL":"https://github.com/pglezen.png","key":"pglezen","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},{"name":"tetunori","alias":"tetunori","url":"https://github.com/tetunori","imageURL":"https://github.com/tetunori.png","key":"tetunori","page":null},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T20:00","authors":["aeneasr","anshulrgoyal","belokonm","Drewbi","fanny","guillaumejacquart","JoelMarcey","jsjoeio","lex111","moonrailgun","Nishikoh","pglezen","SamChou19815","slorber","teikjun","tetunori","TomBrien","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"nextItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2916](https://github.com/facebook/docusaurus/pull/2916) feat(v2): add a banner that links to latest version of documentation ([@teikjun](https://github.com/teikjun))\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#2928](https://github.com/facebook/docusaurus/pull/2928) feat(v2): Implement proof-of-concept Docusaurus Debug Dashboard ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus`\\n - [#2903](https://github.com/facebook/docusaurus/pull/2903) feat(v2): Allow configuring babel via babel.config.js ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#2793](https://github.com/facebook/docusaurus/pull/2793) feat(v2): docusaurus-plugin-client-redirects ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#2826](https://github.com/facebook/docusaurus/pull/2826) feat(v2): allow adding components to react-live scope ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2856](https://github.com/facebook/docusaurus/pull/2856) feat(v2): allow specifying meta image for blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2841](https://github.com/facebook/docusaurus/pull/2841) feat(v2): Allow swizzling prism-include-languages in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2905](https://github.com/facebook/docusaurus/pull/2905) fix(v2): fix docs homepage permalink issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2932](https://github.com/facebook/docusaurus/pull/2932) fix(v2): Add hooks to detect window resize, toggle off sidebar and navbar in desktop ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n - [#2909](https://github.com/facebook/docusaurus/pull/2909) fix(v2): adjust anchor offset when routes switched ([@lex111](https://github.com/lex111))\\n - [#2896](https://github.com/facebook/docusaurus/pull/2896) fix(v2): set correct canonical url for docs home page ([@lex111](https://github.com/lex111))\\n - [#2893](https://github.com/facebook/docusaurus/pull/2893) fix(v2): Do not automatically change tab when a non-existing option is selected ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2888](https://github.com/facebook/docusaurus/pull/2888) fix(v2): restore styles for menu scrollbar ([@lex111](https://github.com/lex111))\\n - [#2857](https://github.com/facebook/docusaurus/pull/2857) fix(v2): treat inline code in raw HTML as native element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2951](https://github.com/facebook/docusaurus/pull/2951) fix(v2): Add optional-chaining and nullish-coalescing babel plugin ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2921](https://github.com/facebook/docusaurus/pull/2921) fix(v2): upgrade react-loadable-ssr-addon ([@slorber](https://github.com/slorber))\\n - [#2854](https://github.com/facebook/docusaurus/pull/2854) fix(v2): fix broken build when swizzled NotFound component exist ([@lex111](https://github.com/lex111))\\n - [#2829](https://github.com/facebook/docusaurus/pull/2829) fix(v2): Fix plugin path resolution ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-preset-classic`\\n - [#2944](https://github.com/facebook/docusaurus/pull/2944) fix(v2): Declare @docusaurus-plugin-debug as dependency of preset classic ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`\\n - [#2902](https://github.com/facebook/docusaurus/pull/2902) feat(v2): add nojekyll file to static folder for all templates ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-bootstrap`\\n - [#2860](https://github.com/facebook/docusaurus/pull/2860) fix(v2): bootstrap doc sidebar ([@fanny](https://github.com/fanny))\\n- Other\\n - [#2874](https://github.com/facebook/docusaurus/pull/2874) fix(v2): Getting Started URL ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2867](https://github.com/facebook/docusaurus/pull/2867) fix(v2): fix FOUC in doc sidebar and various improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2838](https://github.com/facebook/docusaurus/pull/2838) fix(v2): use base url to navigate to search page ([@tetunori](https://github.com/tetunori))\\n- `docusaurus-utils`\\n - [#2855](https://github.com/facebook/docusaurus/pull/2855) fix(v2): strip images and footnotes for excerpt correctly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2835](https://github.com/facebook/docusaurus/pull/2835) fix(v2): set proper font for live editor ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2884](https://github.com/facebook/docusaurus/pull/2884) polish(v2): improve Docusaurus 1 to 2 migration developer experience ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2870](https://github.com/facebook/docusaurus/pull/2870) refactor(v2): combine nested theme providers into one ([@lex111](https://github.com/lex111))\\n - [#2880](https://github.com/facebook/docusaurus/pull/2880) fix(v2): render as regular text uncollapsible categories ([@lex111](https://github.com/lex111))\\n - [#2864](https://github.com/facebook/docusaurus/pull/2864) refactor(v2): add aria role for doc sidebar ([@lex111](https://github.com/lex111))\\n - [#2859](https://github.com/facebook/docusaurus/pull/2859) refactor(v2): add aria label to paginators ([@lex111](https://github.com/lex111))\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2862](https://github.com/facebook/docusaurus/pull/2862) Updated banner in solidarity ([@JoelMarcey](https://github.com/JoelMarcey))\\n\\n## :memo: Documentation\\n\\n- [#2946](https://github.com/facebook/docusaurus/pull/2946) docs(v2): add require.resolve to plugin imports on remaining pages ([@teikjun](https://github.com/teikjun))\\n- [#2941](https://github.com/facebook/docusaurus/pull/2941) docs(v2): wrap all plugin imports in require.resolve() ([@TomBrien](https://github.com/TomBrien))\\n- [#2934](https://github.com/facebook/docusaurus/pull/2934) docs(v2): add useThemeContext note ([@Drewbi](https://github.com/Drewbi))\\n- [#2935](https://github.com/facebook/docusaurus/pull/2935) docs(v2): Add router implementation note ([@Drewbi](https://github.com/Drewbi))\\n- [#2933](https://github.com/facebook/docusaurus/pull/2933) docs(v2): add documentation for multiple blogs ([@teikjun](https://github.com/teikjun))\\n- [#2910](https://github.com/facebook/docusaurus/pull/2910) docs(v2): fix GitHub action workflow in docs ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- [#2886](https://github.com/facebook/docusaurus/pull/2886) docs(v2): fix typo in command on installation page ([@pglezen](https://github.com/pglezen))\\n- [#2887](https://github.com/facebook/docusaurus/pull/2887) docs(v2): make .nojekyll warning more obvious ([@yangshun](https://github.com/yangshun))\\n- [#2865](https://github.com/facebook/docusaurus/pull/2865) docs(v2): description field in frontmatter of blog post ([@lex111](https://github.com/lex111))\\n- [#2839](https://github.com/facebook/docusaurus/pull/2839) docs(v2): \\\\_index docs page does not show a sidebar ([@aeneasr](https://github.com/aeneasr))\\n- [#2852](https://github.com/facebook/docusaurus/pull/2852) misc: move runme demo in block quote about v2 ([@lex111](https://github.com/lex111))\\n- [#2842](https://github.com/facebook/docusaurus/pull/2842) docs(v2): Update ZEIT to Vercel ([@Nishikoh](https://github.com/Nishikoh))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2948](https://github.com/facebook/docusaurus/pull/2948) refactor(v2): legacy export = syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`\\n - [#2922](https://github.com/facebook/docusaurus/pull/2922) misc(v2): better dx: yarn clear, yarn watch, yarn serve ([@slorber](https://github.com/slorber))\\n- Other\\n - [#2929](https://github.com/facebook/docusaurus/pull/2929) chore(v2): Run E2E tests in CI ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2899](https://github.com/facebook/docusaurus/pull/2899) chore(deps): bump websocket-extensions from 0.1.3 to 0.1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2897](https://github.com/facebook/docusaurus/pull/2897) refactor(v2): synchronize yarn/npm command on site ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`\\n - [#2931](https://github.com/facebook/docusaurus/pull/2931) chore(v2): remove unused hooks from bootstrap theme ([@fanny](https://github.com/fanny))\\n- `docusaurus-1.x`, `docusaurus-plugin-content-docs`\\n - [#2906](https://github.com/facebook/docusaurus/pull/2906) chore(v2): fix async tests ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-sitemap`\\n - [#2936](https://github.com/facebook/docusaurus/pull/2936) perf(v2): convert synchronous filewrite to asynchronous ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2900](https://github.com/facebook/docusaurus/pull/2900) chore(v2): replace Clipboard with copy-text-to-clipboard ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Guillaume Jacquart ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Koki Nishihara ([@Nishikoh](https://github.com/Nishikoh))\\n- Paul Glezen ([@pglezen](https://github.com/pglezen))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@belokonm](https://github.com/belokonm)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- tetunori ([@tetunori](https://github.com/tetunori))"},{"id":"/2.0.0-alpha.57","metadata":{"permalink":"/changelog/2.0.0-alpha.57","source":"@site/changelog/source/2.0.0-alpha.57.md","title":"2.0.0-alpha.57","description":"Bad release, check ## 2.0.0-alpha.58","date":"2020-06-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"nextItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\nBad release, check ## 2.0.0-alpha.58"},{"id":"/2.0.0-alpha.56","metadata":{"permalink":"/changelog/2.0.0-alpha.56","source":"@site/changelog/source/2.0.0-alpha.56.md","title":"2.0.0-alpha.56","description":"Breaking Change","date":"2020-05-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},{"name":"James McShane","alias":"jmcshane","url":"https://github.com/jmcshane","imageURL":"https://github.com/jmcshane.png","key":"jmcshane","page":null},{"name":"Kasper B\xf8gebjerg Pedersen","alias":"kasperp","url":"https://github.com/kasperp","imageURL":"https://github.com/kasperp.png","key":"kasperp","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Muhammad Ali","alias":"mrmuhammadali","url":"https://github.com/mrmuhammadali","imageURL":"https://github.com/mrmuhammadali.png","key":"mrmuhammadali","page":null},{"name":"Piotr Baran","alias":"piotros","url":"https://github.com/piotros","imageURL":"https://github.com/piotros.png","key":"piotros","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-28T20:00","authors":["jknoxville","jmcshane","kasperp","lex111","mrmuhammadali","piotros","s-pace","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"nextItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- If you refer to modules (plugins) in your config file in a string form, you will need to replace them with `require.resolve` calls, for example:\\n\\n```diff\\n- plugins: [\'@docusaurus/plugin-google-analytics\']\\n+ plugins: [require.resolve(\'@docusaurus/plugin-google-analytics\')]\\n```\\n\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2780](https://github.com/facebook/docusaurus/pull/2780) feat(v2): open external links in new tab by default ([@jknoxville](https://github.com/jknoxville))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2770](https://github.com/facebook/docusaurus/pull/2770) feat(v2): allow deploy without building website ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2645](https://github.com/facebook/docusaurus/pull/2645) fix(v2): enable scrolling for sidebar menu only ([@lex111](https://github.com/lex111))\\n - [#2800](https://github.com/facebook/docusaurus/pull/2800) fix(v2): make proper h1 font size on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2788](https://github.com/facebook/docusaurus/pull/2788) fix(v2): use `require.resolve` for all webpack presets and plugins ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#2785](https://github.com/facebook/docusaurus/pull/2785) fix(v2): do not show sidebar on reserved docs home page ([@lex111](https://github.com/lex111))\\n - [#2777](https://github.com/facebook/docusaurus/pull/2777) fix(v2): check for docs homepage correctly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2820](https://github.com/facebook/docusaurus/pull/2820) chore(v2): upgrade Infima to 0.2.0-alpha.12 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2814](https://github.com/facebook/docusaurus/pull/2814) refactor(v2): align search icon to center on mobiles ([@lex111](https://github.com/lex111))\\n - [#2799](https://github.com/facebook/docusaurus/pull/2799) refactor(v2): increase search input on medium screens ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2802](https://github.com/facebook/docusaurus/pull/2802) misc: minor improvements for init templates ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2783](https://github.com/facebook/docusaurus/pull/2783) refactor(v2): make external links more secure ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2809](https://github.com/facebook/docusaurus/pull/2809) docs(v2): add mention on DocSearch when you run the crawler on your own ([@s-pace](https://github.com/s-pace))\\n\\n## :house: Internal\\n\\n- [#2778](https://github.com/facebook/docusaurus/pull/2778) fix(v2): do not highlight root docs path in navbar ([@lex111](https://github.com/lex111))\\n\\n## Committers: 8\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- James McShane ([@jmcshane](https://github.com/jmcshane))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Kasper B\xf8gebjerg Pedersen ([@kasperp](https://github.com/kasperp))\\n- Muhammad Ali ([@mrmuhammadali](https://github.com/mrmuhammadali))\\n- Piotr Baran ([@piotros](https://github.com/piotros))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))"},{"id":"/2.0.0-alpha.55","metadata":{"permalink":"/changelog/2.0.0-alpha.55","source":"@site/changelog/source/2.0.0-alpha.55.md","title":"2.0.0-alpha.55","description":"Breaking Change","date":"2020-05-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Rajiv Singh","alias":"iamrajiv","url":"https://github.com/iamrajiv","imageURL":"https://github.com/iamrajiv.png","key":"iamrajiv","page":null},{"name":"Jimmy","alias":"jcomack","url":"https://github.com/jcomack","imageURL":"https://github.com/jcomack.png","key":"jcomack","page":null},{"name":"Julien Deniau","alias":"jdeniau","url":"https://github.com/jdeniau","imageURL":"https://github.com/jdeniau.png","key":"jdeniau","page":null},{"name":"Jonny Nabors","alias":"jonnynabors","url":"https://github.com/jonnynabors","imageURL":"https://github.com/jonnynabors.png","key":"jonnynabors","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Marco Moretti","alias":"marcosvega91","url":"https://github.com/marcosvega91","imageURL":"https://github.com/marcosvega91.png","key":"marcosvega91","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-19T20:00","authors":["artemkovalyov","fanny","iamrajiv","jcomack","jdeniau","jonnynabors","lex111","marcosvega91","nebrelbug","slorber","taylorreece","yangshun","ykzts"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"nextItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n\\n - The following Infima classes have been renamed for consistency:\\n\\n - `page-item` \u2192 `pagination__item`\\n - `pagination-nav__link--label` \u2192 `pagination-nav__label`\\n - `pagination-nav__link--sublabel` \u2192 `pagination-nav__sublabel`\\n - `tab-item` \u2192 `tabs__item`\\n - `tab-item--active` \u2192 `tabs__item--active`\\n\\n If you have swizzled components, you need to replace these class names.\\n\\n- `docusaurus`\\n\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2690](https://github.com/facebook/docusaurus/pull/2690) feat(v2): allow activeBaseTest in NavLink ([@nebrelbug](https://github.com/nebrelbug))\\n - [#2694](https://github.com/facebook/docusaurus/pull/2694) feat(v2): add canonical URL to `<head>` ([@jcomack](https://github.com/jcomack))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2652](https://github.com/facebook/docusaurus/pull/2652) feat(v2): allow home page for docs ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2756](https://github.com/facebook/docusaurus/pull/2756) feat(v2): add search page \ud83d\udd0e ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#2701](https://github.com/facebook/docusaurus/pull/2701) fix(v2): remove Markdown syntax from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2765](https://github.com/facebook/docusaurus/pull/2765) fix(v2): remove invalid attr from mobile nav links ([@lex111](https://github.com/lex111))\\n - [#2760](https://github.com/facebook/docusaurus/pull/2760) fix(v2): move anchor link to right of heading ([@lex111](https://github.com/lex111))\\n - [#2758](https://github.com/facebook/docusaurus/pull/2758) fix(v2): remove extra top margin of tab item ([@lex111](https://github.com/lex111))\\n - [#2759](https://github.com/facebook/docusaurus/pull/2759) fix(v2): restore hiding of docs toc ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2762](https://github.com/facebook/docusaurus/pull/2762) fix(v2): avoid duplication search input in navbar ([@lex111](https://github.com/lex111))\\n- `lqip-loader`\\n - [#2693](https://github.com/facebook/docusaurus/pull/2693) fix(v2): add support ES Module to lqip-loader ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-init`\\n - [#2751](https://github.com/facebook/docusaurus/pull/2751) fix(v2): fix index page features.length when 0 ([@jdeniau](https://github.com/jdeniau))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2773](https://github.com/facebook/docusaurus/pull/2773) chore(v2): upgrade Infima to 0.2.0-alpha.11 ([@lex111](https://github.com/lex111))\\n - [#2766](https://github.com/facebook/docusaurus/pull/2766) refactor(v2): remove extra active CSS class for menu item links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2767](https://github.com/facebook/docusaurus/pull/2767) refactor(v2): add support for dark mode to live code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2761](https://github.com/facebook/docusaurus/pull/2761) refactor(v2): improve UX of search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2729](https://github.com/facebook/docusaurus/pull/2729) chore(v2): upgrade Infima to 0.2.0-alpha.10 ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2696](https://github.com/facebook/docusaurus/pull/2696) refactor(v2): make semicolon optional in imports for excerpt ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2768](https://github.com/facebook/docusaurus/pull/2768) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n- [#2670](https://github.com/facebook/docusaurus/pull/2670) docs(v2): add deployment workflow manual for GitHub Actions ([@artemkovalyov](https://github.com/artemkovalyov))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2464](https://github.com/facebook/docusaurus/pull/2464) refactor(v2): add @theme-init alias to give access to initial components ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2684](https://github.com/facebook/docusaurus/pull/2684) refactor(v2): replace EJS with Eta for SSR generation ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jimmy ([@jcomack](https://github.com/jcomack))\\n- Jonny Nabors ([@jonnynabors](https://github.com/jonnynabors))\\n- Julien Deniau ([@jdeniau](https://github.com/jdeniau))\\n- Marco Moretti ([@marcosvega91](https://github.com/marcosvega91))\\n- Rajiv Singh ([@iamrajiv](https://github.com/iamrajiv))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.54","metadata":{"permalink":"/changelog/2.0.0-alpha.54","source":"@site/changelog/source/2.0.0-alpha.54.md","title":"2.0.0-alpha.54","description":"HOTFIX for 2.0.0-alpha.53.","date":"2020-04-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-28T20:00","authors":["jsjoeio","lex111","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"nextItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.53**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2688](https://github.com/facebook/docusaurus/pull/2688) fix(v2): add default value for options in theme classic ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#2687](https://github.com/facebook/docusaurus/pull/2687) fix(v2): Add all webpack module aliases to type declaration file ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- [#2680](https://github.com/facebook/docusaurus/pull/2680) docs(v2): add swizzle example ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))"},{"id":"/2.0.0-alpha.53","metadata":{"permalink":"/changelog/2.0.0-alpha.53","source":"@site/changelog/source/2.0.0-alpha.53.md","title":"2.0.0-alpha.53","description":"HOTFIX for 2.0.0-alpha.51.","date":"2020-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"nextItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.51**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2676](https://github.com/facebook/docusaurus/pull/2676) fix(v2): allow build website without custom css ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.51","metadata":{"permalink":"/changelog/2.0.0-alpha.51","source":"@site/changelog/source/2.0.0-alpha.51.md","title":"2.0.0-alpha.51","description":"Breaking Change","date":"2020-04-27T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anayo Oleru","alias":"AnayoOleru","url":"https://github.com/AnayoOleru","imageURL":"https://github.com/AnayoOleru.png","key":"AnayoOleru","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"Jay Lees","alias":"jaylees14","url":"https://github.com/jaylees14","imageURL":"https://github.com/jaylees14.png","key":"jaylees14","page":null},{"name":"Jos\xe9 Renan","alias":"JoseRenan","url":"https://github.com/JoseRenan","imageURL":"https://github.com/JoseRenan.png","key":"JoseRenan","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Kamil Kisiela","alias":"kamilkisiela","url":"https://github.com/kamilkisiela","imageURL":"https://github.com/kamilkisiela.png","key":"kamilkisiela","page":null},{"name":"Krist\xf3f Poduszl\xf3","alias":"kripod","url":"https://github.com/kripod","imageURL":"https://github.com/kripod.png","key":"kripod","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},{"name":"Chris Watson","alias":"watzon","url":"https://github.com/watzon","imageURL":"https://github.com/watzon.png","key":"watzon","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Mehmet Yatk\u0131","alias":"yatki","url":"https://github.com/yatki","imageURL":"https://github.com/yatki.png","key":"yatki","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T19:00","authors":["AnayoOleru","fanny","jaylees14","JoseRenan","jsjoeio","kamilkisiela","kripod","lex111","Noah-Silvera","RDIL","s-pace","SamChou19815","Simek","slorber","TomBrien","watzon","yangshun","yatki"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"nextItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n - The following infima variables have been renamed for consistency:\\n - `--ifm-font-base-color` \u2192 `--ifm-font-color-base`\\n - `--ifm-font-base-color-inverse` \u2192 `--ifm-font-color-base-inverse`\\n - `--ifm-font-color-secondary` \u2192 `--ifm-font-color-secondary`\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2660](https://github.com/facebook/docusaurus/pull/2660) feat(v2): add ability to specify CSS class for navbar item ([@lex111](https://github.com/lex111))\\n - [#2597](https://github.com/facebook/docusaurus/pull/2597) feat(v2): add ability set dark mode by default ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2665](https://github.com/facebook/docusaurus/pull/2665) feat(v2): add fallback to BrowserOnly component ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2630](https://github.com/facebook/docusaurus/pull/2630) feat(v2): add CLI option for polling ([@TomBrien](https://github.com/TomBrien))\\n- `docusaurus-init`\\n - [#2541](https://github.com/facebook/docusaurus/pull/2541) feat(v2): add showReadingTime and editUrl to the templates ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2524](https://github.com/facebook/docusaurus/pull/2524) feat(v2): add edit url in post page ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2531](https://github.com/facebook/docusaurus/pull/2531) feat(v2): add blog post estimated reading time ([@JoseRenan](https://github.com/JoseRenan))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2672](https://github.com/facebook/docusaurus/pull/2672) fix(v2): add a11y support for dropdown ([@lex111](https://github.com/lex111))\\n - [#2649](https://github.com/facebook/docusaurus/pull/2649) fix(v2): hide sidebar after click on child item ([@lex111](https://github.com/lex111))\\n - [#2631](https://github.com/facebook/docusaurus/pull/2631) fix(v2): hide doc sidebar on mobiles ([@lex111](https://github.com/lex111))\\n - [#2626](https://github.com/facebook/docusaurus/pull/2626) fix(v2): make border right of doc sidebar equals doc page ([@lex111](https://github.com/lex111))\\n - [#2625](https://github.com/facebook/docusaurus/pull/2625) fix(v2): disable tab focus on collapsed doc sidebar items ([@lex111](https://github.com/lex111))\\n - [#2602](https://github.com/facebook/docusaurus/pull/2602) fix(v2): inherit color for announcement bar close icon ([@lex111](https://github.com/lex111))\\n - [#2582](https://github.com/facebook/docusaurus/pull/2582) fix(v2): remove horizontal scroll on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2666](https://github.com/facebook/docusaurus/pull/2666) chore(v2): upgrade prism-react-renderer to latest version ([@lex111](https://github.com/lex111))\\n - [#2533](https://github.com/facebook/docusaurus/pull/2533) fix(v2): add rounded corners in code blocks properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2661](https://github.com/facebook/docusaurus/pull/2661) chore: upgrade shelljs to 0.8.4 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2642](https://github.com/facebook/docusaurus/pull/2642) fix(v2): use remark-admonitions separately in each plugin instead of in preset only ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2380](https://github.com/facebook/docusaurus/pull/2380) fix(v2): ignore import declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-sitemap`\\n - [#2616](https://github.com/facebook/docusaurus/pull/2616) fix(v2): don\'t include 404 page in sitemaps ([@RDIL](https://github.com/RDIL))\\n - [#2530](https://github.com/facebook/docusaurus/pull/2530) fix(v2): Use `writeFileSync` to write generated sitemap.xml to avoid early termination ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2558](https://github.com/facebook/docusaurus/pull/2558) fix(v2): properly link top-level github pages sites in deploy command ([@RDIL](https://github.com/RDIL))\\n - [#2580](https://github.com/facebook/docusaurus/pull/2580) fix(v2): do not process anchor links by router ([@lex111](https://github.com/lex111))\\n - [#2579](https://github.com/facebook/docusaurus/pull/2579) fix(v2): treat mailto and tel links properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2540](https://github.com/facebook/docusaurus/pull/2540) fix(v2): use synchronous write for generate blog feeds ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2656](https://github.com/facebook/docusaurus/pull/2656) refactor(v2): lose focus of active sidebar item after click on it ([@lex111](https://github.com/lex111))\\n - [#2627](https://github.com/facebook/docusaurus/pull/2627) refactor(v2): extract scroll position detection into separate hook ([@lex111](https://github.com/lex111))\\n - [#2595](https://github.com/facebook/docusaurus/pull/2595) refactor(v2): make margin top on blog pages as on other pages ([@lex111](https://github.com/lex111))\\n - [#2588](https://github.com/facebook/docusaurus/pull/2588) refactor(v2): remove redundant container on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2585](https://github.com/facebook/docusaurus/pull/2585) refactor(v2): use nav link component only where needed ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2556](https://github.com/facebook/docusaurus/pull/2556) refactor(v2): enhance CLI experience ([@RDIL](https://github.com/RDIL))\\n - [#2529](https://github.com/facebook/docusaurus/pull/2529) refactor(v2): replace few Lodash methods with native counterparts ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2534](https://github.com/facebook/docusaurus/pull/2534) refactor(v2): make better code blocks ([@lex111](https://github.com/lex111))\\n - [#2526](https://github.com/facebook/docusaurus/pull/2526) fix(v2): make code block nicer again ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#2519](https://github.com/facebook/docusaurus/pull/2519) chore(v2): use single method Lodash packages in docs plugin ([@Simek](https://github.com/Simek))\\n\\n## :memo: Documentation\\n\\n- [#2659](https://github.com/facebook/docusaurus/pull/2659) fix(docs): mention that appID is optional ([@s-pace](https://github.com/s-pace))\\n- [#2596](https://github.com/facebook/docusaurus/pull/2596) docs(v2): remove duplicated package.json in installation directory structure ([@jaylees14](https://github.com/jaylees14))\\n- [#2572](https://github.com/facebook/docusaurus/pull/2572) docs(v2): mention that `plugin-ideal-image` only perform compression on a production build ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2570](https://github.com/facebook/docusaurus/pull/2570) docs(v2): fix syntax error for @docusaurus/plugin-ideal-image example ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2566](https://github.com/facebook/docusaurus/pull/2566) docs(v2): be more polite ([@lex111](https://github.com/lex111))\\n- [#2559](https://github.com/facebook/docusaurus/pull/2559) doc(v2): remove legacy blog metadata ([@RDIL](https://github.com/RDIL))\\n- [#2549](https://github.com/facebook/docusaurus/pull/2549) docs(v2): command for swizzling all components ([@fanny](https://github.com/fanny))\\n- [#2547](https://github.com/facebook/docusaurus/pull/2547) docs(v2): Fix typo in team page ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2545](https://github.com/facebook/docusaurus/pull/2545) docs(v2): add community pages ([@yangshun](https://github.com/yangshun))\\n- [#2521](https://github.com/facebook/docusaurus/pull/2521) docs(v2): useThemeContext hook ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2578](https://github.com/facebook/docusaurus/pull/2578) refactor(v2): Convert docusaurus-core to TypeScript ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#2569](https://github.com/facebook/docusaurus/pull/2569) docs(v2): showcase user Tourmaline ([@watzon](https://github.com/watzon))\\n - [#2553](https://github.com/facebook/docusaurus/pull/2553) misc(v2): remove deprecated/useless lerna field ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `lqip-loader`\\n - [#2563](https://github.com/facebook/docusaurus/pull/2563) chore(v2): fix lint, tweak lqip-loader utils comment ([@Simek](https://github.com/Simek))\\n- `lqip-loader`\\n - [#2561](https://github.com/facebook/docusaurus/pull/2561) chore(v2): add lqip-loader tests, clarify loader code, improve README ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#2544](https://github.com/facebook/docusaurus/pull/2544) refactor(v2): import lqip-loader to monorepo, fix build on Node 13, fix lint-staged ([@Simek](https://github.com/Simek))\\n- `docusaurus-init`\\n - [#2542](https://github.com/facebook/docusaurus/pull/2542) chore(v2): update Prettier config ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#2538](https://github.com/facebook/docusaurus/pull/2538) chore(v2): upgrade devDependencies ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-utils`\\n - [#2536](https://github.com/facebook/docusaurus/pull/2536) refactor(v2): replace Lodash with single methods packages in utils ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#2535](https://github.com/facebook/docusaurus/pull/2535) refactor(v2): replace Lodash with single methods packages in core ([@Simek](https://github.com/Simek))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anayo Oleru ([@AnayoOleru](https://github.com/AnayoOleru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Chris Watson ([@watzon](https://github.com/watzon))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jay Lees ([@jaylees14](https://github.com/jaylees14))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Jos\xe9 Renan ([@JoseRenan](https://github.com/JoseRenan))\\n- Kamil Kisiela ([@kamilkisiela](https://github.com/kamilkisiela))\\n- Krist\xf3f Poduszl\xf3 ([@kripod](https://github.com/kripod))\\n- Mehmet Yatk\u0131 ([@yatki](https://github.com/yatki))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.50","metadata":{"permalink":"/changelog/2.0.0-alpha.50","source":"@site/changelog/source/2.0.0-alpha.50.md","title":"2.0.0-alpha.50","description":"HOTFIX for 2.0.0-alpha.49.","date":"2020-04-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Can Gencer","alias":"cangencer","url":"https://github.com/cangencer","imageURL":"https://github.com/cangencer.png","key":"cangencer","page":null},{"name":"Richard Chan","alias":"iWun","url":"https://github.com/iWun","imageURL":"https://github.com/iWun.png","key":"iWun","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-02T20:00","authors":["cangencer","iWun","lex111","SamChou19815","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"nextItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.49**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2509](https://github.com/facebook/docusaurus/pull/2509) fix(v2): synchronize code block components changes ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2498](https://github.com/facebook/docusaurus/pull/2498) fix(v2): blog item styling ([@yangshun](https://github.com/yangshun))\\n - [#2489](https://github.com/facebook/docusaurus/pull/2489) fix(v2): fix HTML issues nav dropdown and highlight docs item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2496](https://github.com/facebook/docusaurus/pull/2496) fix(v2): do not force terminate building when running deploy command ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2497](https://github.com/facebook/docusaurus/pull/2497) fix(v2): unbreak blog-only mode routing by deplicating starting forward slashes ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2505](https://github.com/facebook/docusaurus/pull/2505) fix(v2): tweak colors for announcement bar ([@yangshun](https://github.com/yangshun))\\n - [#2504](https://github.com/facebook/docusaurus/pull/2504) refactor(v2): improve announcement bar ([@lex111](https://github.com/lex111))\\n - [#2495](https://github.com/facebook/docusaurus/pull/2495) refactor(v2): update HTML markup of pagination for better a11y ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2502](https://github.com/facebook/docusaurus/pull/2502) fix(v2): make code block nicer ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2490](https://github.com/facebook/docusaurus/pull/2490) fix(v2): use lodash instead of array-map-polyfill ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-theme-classic`\\n - [#2500](https://github.com/facebook/docusaurus/pull/2500) docs(v2): misc docs updates ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- [#2486](https://github.com/facebook/docusaurus/pull/2486) misc: add instructions about test release ([@lex111](https://github.com/lex111))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Can Gencer ([@cangencer](https://github.com/cangencer))\\n- Richard Chan ([@iWun](https://github.com/iWun))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.49","metadata":{"permalink":"/changelog/2.0.0-alpha.49","source":"@site/changelog/source/2.0.0-alpha.49.md","title":"2.0.0-alpha.49","description":"New Feature","date":"2020-04-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"38elements","alias":"38elements","url":"https://github.com/38elements","imageURL":"https://github.com/38elements.png","key":"38elements","page":null},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},{"name":"bravo-kernel","alias":"bravo-kernel","url":"https://github.com/bravo-kernel","imageURL":"https://github.com/bravo-kernel.png","key":"bravo-kernel","page":null},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},{"name":"Favour Kelvin","alias":"fakela","url":"https://github.com/fakela","imageURL":"https://github.com/fakela.png","key":"fakela","page":null},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},{"name":"GermaVinsmoke","alias":"GermaVinsmoke","url":"https://github.com/GermaVinsmoke","imageURL":"https://github.com/GermaVinsmoke.png","key":"GermaVinsmoke","page":null},{"name":"iamkun","alias":"iamkun","url":"https://github.com/iamkun","imageURL":"https://github.com/iamkun.png","key":"iamkun","page":null},{"name":"Jefferson Licet","alias":"jeffersonlicet","url":"https://github.com/jeffersonlicet","imageURL":"https://github.com/jeffersonlicet.png","key":"jeffersonlicet","page":null},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Luke Collier","alias":"lukecollier","url":"https://github.com/lukecollier","imageURL":"https://github.com/lukecollier.png","key":"lukecollier","page":null},{"name":"mohrash92","alias":"mohrash92","url":"https://github.com/mohrash92","imageURL":"https://github.com/mohrash92.png","key":"mohrash92","page":null},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},{"name":"Nisar Hassan Naqvi","alias":"nisarhassan12","url":"https://github.com/nisarhassan12","imageURL":"https://github.com/nisarhassan12.png","key":"nisarhassan12","page":null},{"name":"Paul Armstrong","alias":"paularmstrong","url":"https://github.com/paularmstrong","imageURL":"https://github.com/paularmstrong.png","key":"paularmstrong","page":null},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"ZachJW34","alias":"ZachJW34","url":"https://github.com/ZachJW34","imageURL":"https://github.com/ZachJW34.png","key":"ZachJW34","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-01T20:00","authors":["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"nextItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2487](https://github.com/facebook/docusaurus/pull/2487) feat(v2): nav dropdown ([@yangshun](https://github.com/yangshun))\\n - [#2456](https://github.com/facebook/docusaurus/pull/2456) feat(v2): support comments for code highlighting ([@elviswolcott](https://github.com/elviswolcott))\\n - [#2330](https://github.com/facebook/docusaurus/pull/2330) feat(v2): add announcement bar ([@lex111](https://github.com/lex111))\\n - [#2440](https://github.com/facebook/docusaurus/pull/2440) feat(v2): make clickable sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2366](https://github.com/facebook/docusaurus/pull/2366) feat(v2): support syncing tab choices ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2323](https://github.com/facebook/docusaurus/pull/2323) feat(v2): add a way to exclude components from build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2469](https://github.com/facebook/docusaurus/pull/2469) feat(v2): add TypeScript support for theme components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2455](https://github.com/facebook/docusaurus/pull/2455) feat(v2): add @theme-original alias to give access to pre-swizzled components ([@yangshun](https://github.com/yangshun))\\n - [#2438](https://github.com/facebook/docusaurus/pull/2438) feat(v2): add version to page\'s generated meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2474](https://github.com/facebook/docusaurus/pull/2474) feat(v2): add ability to create unminimized bundles ([@lex111](https://github.com/lex111))\\n - [#2417](https://github.com/facebook/docusaurus/pull/2417) feat(v2): allow custom output directory for build ([@ZachJW34](https://github.com/ZachJW34))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2346](https://github.com/facebook/docusaurus/pull/2346) feat(v2): add filename in CodeBlock ([@KohheePeace](https://github.com/KohheePeace))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2444](https://github.com/facebook/docusaurus/pull/2444) feat(v2): allow nested sidebar category shorthand syntax ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2483](https://github.com/facebook/docusaurus/pull/2483) fix(v2): do not render sidebar logo if used sticky navbar ([@lex111](https://github.com/lex111))\\n - [#2475](https://github.com/facebook/docusaurus/pull/2475) fix(v2): make correct Open Graph title for doc page ([@lex111](https://github.com/lex111))\\n - [#2436](https://github.com/facebook/docusaurus/pull/2436) fix(v2): update twitter:card to summary_large_image ([@lex111](https://github.com/lex111))\\n - [#2434](https://github.com/facebook/docusaurus/pull/2434) fix(v2): add support dark logo for sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2420](https://github.com/facebook/docusaurus/pull/2420) fix(v2): fix external URL for og:image tag ([@38elements](https://github.com/38elements))\\n- `docusaurus-theme-live-codeblock`\\n - [#2480](https://github.com/facebook/docusaurus/pull/2480) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#2479](https://github.com/facebook/docusaurus/pull/2479) chore(v2): upgrade MDX to 1.5.8 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2476](https://github.com/facebook/docusaurus/pull/2476) fix(v2): improve code block scroll accessibility ([@lex111](https://github.com/lex111))\\n - [#2442](https://github.com/facebook/docusaurus/pull/2442) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2477](https://github.com/facebook/docusaurus/pull/2477) chore(v2): upgrade remark-admonitions for a11y fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2462](https://github.com/facebook/docusaurus/pull/2462) fix(v2): do not force terminate building when bundle analyzer is on ([@lex111](https://github.com/lex111))\\n - [#2393](https://github.com/facebook/docusaurus/pull/2393) fix(v2): normalize location for route matching ([@rlamana](https://github.com/rlamana))\\n - [#2443](https://github.com/facebook/docusaurus/pull/2443) fix(v2): always exit after successful build ([@mohrash92](https://github.com/mohrash92))\\n - [#2437](https://github.com/facebook/docusaurus/pull/2437) fix(v2): do not force terminate building if client bundle failed in development mode ([@lex111](https://github.com/lex111))\\n - [#2424](https://github.com/facebook/docusaurus/pull/2424) fix(v2): make correct internal link check ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`\\n - [#2451](https://github.com/facebook/docusaurus/pull/2451) fix(v2): pass options to remark-admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-mdx-loader`\\n - [#2426](https://github.com/facebook/docusaurus/pull/2426) fix(v2): remove HTML from heading slug ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2405](https://github.com/facebook/docusaurus/pull/2405) fix(v2): properly dedupe forward slashes in the entire URL path ([@rlamana](https://github.com/rlamana))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2485](https://github.com/facebook/docusaurus/pull/2485) refactor(v2): remove unnecessary X-UA-Compatible meta tag ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2460](https://github.com/facebook/docusaurus/pull/2460) refactor(v2): use single method package instead of whole Lodash package in blog plugin ([@Simek](https://github.com/Simek))\\n- Other\\n - [#2428](https://github.com/facebook/docusaurus/pull/2428) polish(v2): use npm-to-yarn for the npm2yarn remark plugin ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2478](https://github.com/facebook/docusaurus/pull/2478) docs(v2): mark that in dev server some features may not work ([@lex111](https://github.com/lex111))\\n - [#2472](https://github.com/facebook/docusaurus/pull/2472) docs(v2): fix typo in deployment docs ([@GermaVinsmoke](https://github.com/GermaVinsmoke))\\n - [#2423](https://github.com/facebook/docusaurus/pull/2423) docs(v2): add Sass/SCSS under the styling section ([@rlamana](https://github.com/rlamana))\\n - [#2446](https://github.com/facebook/docusaurus/pull/2446) docs(v2): add docusaurus-plugin-sass to community plugins ([@rlamana](https://github.com/rlamana))\\n - [#2408](https://github.com/facebook/docusaurus/pull/2408) docs(v2): suggest Surge for quick deployment ([@fakela](https://github.com/fakela))\\n - [#2401](https://github.com/facebook/docusaurus/pull/2401) docs(v2): add resources page ([@yangshun](https://github.com/yangshun))\\n - [#2413](https://github.com/facebook/docusaurus/pull/2413) docs(v2): include appId key for Algolia ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#2411](https://github.com/facebook/docusaurus/pull/2411) docs:(v2): add Netlify configuration warning ([@bravo-kernel](https://github.com/bravo-kernel))\\n - [#2397](https://github.com/facebook/docusaurus/pull/2397) docs(v2):update alpha version to current version ([@fakela](https://github.com/fakela))\\n - [#2395](https://github.com/facebook/docusaurus/pull/2395) docs(v2): clarify instructions on docs-only mode ([@phoqe](https://github.com/phoqe))\\n- `docusaurus-init`\\n - [#2458](https://github.com/facebook/docusaurus/pull/2458) fix(v2): expand broken admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2461](https://github.com/facebook/docusaurus/pull/2461) chore(v2): upgrade react-dev-utils ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2439](https://github.com/facebook/docusaurus/pull/2439) polish(v2): add logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2435](https://github.com/facebook/docusaurus/pull/2435) fix(v2): fix aspect ratio for Open Graph image ([@lex111](https://github.com/lex111))\\n - [#2433](https://github.com/facebook/docusaurus/pull/2433) chore(v2): ignore JetBrains editors .iml files ([@slorber](https://github.com/slorber))\\n - [#2416](https://github.com/facebook/docusaurus/pull/2416) docs(v2): Add Build Tracker to Showcase page ([@paularmstrong](https://github.com/paularmstrong))\\n - [#2388](https://github.com/facebook/docusaurus/pull/2388) docs(v1): showcase user Day.js ([@iamkun](https://github.com/iamkun))\\n- `stylelint-copyright`\\n - [#2415](https://github.com/facebook/docusaurus/pull/2415) misc: improve stylelint rule ([@ayshiff](https://github.com/ayshiff))\\n\\n## Committers: 24\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Favour Kelvin ([@fakela](https://github.com/fakela))\\n- Jefferson Licet ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n- Kohhee Peace ([@KohheePeace](https://github.com/KohheePeace))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Luke Collier ([@lukecollier](https://github.com/lukecollier))\\n- Nisar Hassan Naqvi ([@nisarhassan12](https://github.com/nisarhassan12))\\n- Paul Armstrong ([@paularmstrong](https://github.com/paularmstrong))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@38elements](https://github.com/38elements)\\n- [@GermaVinsmoke](https://github.com/GermaVinsmoke)\\n- [@ZachJW34](https://github.com/ZachJW34)\\n- [@bravo-kernel](https://github.com/bravo-kernel)\\n- [@iamkun](https://github.com/iamkun)\\n- [@mohrash92](https://github.com/mohrash92)"},{"id":"/2.0.0-alpha.48","metadata":{"permalink":"/changelog/2.0.0-alpha.48","source":"@site/changelog/source/2.0.0-alpha.48.md","title":"2.0.0-alpha.48","description":"HOTFIX for 2.0.0-alpha.44.","date":"2020-03-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"nextItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.44**.\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#2383](https://github.com/facebook/docusaurus/pull/2383) fix(v2): specify proper version for stylelint-copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2382](https://github.com/facebook/docusaurus/pull/2382) fix(v2): add missing preset-typescript dependency ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2386](https://github.com/facebook/docusaurus/pull/2386) fix(v2): add missing prismjs dependency and Noop component ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.44","metadata":{"permalink":"/changelog/2.0.0-alpha.44","source":"@site/changelog/source/2.0.0-alpha.44.md","title":"2.0.0-alpha.44","description":"New Feature","date":"2020-03-08T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Amila Welihinda","alias":"amilajack","url":"https://github.com/amilajack","imageURL":"https://github.com/amilajack.png","key":"amilajack","page":null},{"name":"Paulus Schoutsen","alias":"balloob","url":"https://github.com/balloob","imageURL":"https://github.com/balloob.png","key":"balloob","page":null},{"name":"Robert","alias":"deniaz","url":"https://github.com/deniaz","imageURL":"https://github.com/deniaz.png","key":"deniaz","page":null},{"name":"Hassan Farid","alias":"hassanfarid","url":"https://github.com/hassanfarid","imageURL":"https://github.com/hassanfarid.png","key":"hassanfarid","page":null},{"name":"jartuso","alias":"jartuso","url":"https://github.com/jartuso","imageURL":"https://github.com/jartuso.png","key":"jartuso","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Mohamed Abdel Nasser","alias":"mohamedsgap","url":"https://github.com/mohamedsgap","imageURL":"https://github.com/mohamedsgap.png","key":"mohamedsgap","page":null},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},{"name":"Scott Lee","alias":"scottilee","url":"https://github.com/scottilee","imageURL":"https://github.com/scottilee.png","key":"scottilee","page":null},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},{"name":"Zhenchao Cai","alias":"Zhencha0Cai","url":"https://github.com/Zhencha0Cai","imageURL":"https://github.com/Zhencha0Cai.png","key":"Zhencha0Cai","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T19:00","authors":["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"nextItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2250](https://github.com/facebook/docusaurus/pull/2250) feat(v2): add support specify new languages for Prism ([@lex111](https://github.com/lex111))\\n - [#2344](https://github.com/facebook/docusaurus/pull/2344) feat(v2): allow specifying custom target for logo link ([@lex111](https://github.com/lex111))\\n - [#2327](https://github.com/facebook/docusaurus/pull/2327) feat(v2): add ability to use HTML in footer copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2335](https://github.com/facebook/docusaurus/pull/2335) feat(v2): add draft feature to blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#2303](https://github.com/facebook/docusaurus/pull/2303) docs(v2): Nav links activeBasePath ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus`\\n - [#2296](https://github.com/facebook/docusaurus/pull/2296) feat(v2): add ExecutionEnvironment API ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2345](https://github.com/facebook/docusaurus/pull/2345) fix(v2): force terminate building if client bundle failed ([@lex111](https://github.com/lex111))\\n - [#2310](https://github.com/facebook/docusaurus/pull/2310) fix(v2): add @babel/preset-typescript to babel-loader ([@deniaz](https://github.com/deniaz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2371](https://github.com/facebook/docusaurus/pull/2371) fix(v2): remove line break from end of code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2326](https://github.com/facebook/docusaurus/pull/2326) fix(v2): linkify blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2324](https://github.com/facebook/docusaurus/pull/2324) fix(v2): properly set dark mode logo on build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2325](https://github.com/facebook/docusaurus/pull/2325) fix(v2): switch a toggle when system theme changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#2334](https://github.com/facebook/docusaurus/pull/2334) fix(v2): make proper path to pages in TS ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2316](https://github.com/facebook/docusaurus/pull/2316) fix(v2): properly scale logo on IE 11 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2376](https://github.com/facebook/docusaurus/pull/2376) refactor(v2): clean up and improve Algolia styles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2372](https://github.com/facebook/docusaurus/pull/2372) chore(v2): upgrade Infima and remark-admonitions ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2367](https://github.com/facebook/docusaurus/pull/2367) refactor(v2): increase CSS specificity on application container ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `stylelint-copyright`\\n - [#2363](https://github.com/facebook/docusaurus/pull/2363) fix(v2): improve stylelint copyright header rule ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-types`, `docusaurus`\\n - [#2342](https://github.com/facebook/docusaurus/pull/2342) chore(v2): mark tagline field as optional ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2378](https://github.com/facebook/docusaurus/pull/2378) docs(v2): add section for docs-only mode ([@phoqe](https://github.com/phoqe))\\n- [#2357](https://github.com/facebook/docusaurus/pull/2357) docs(v2): fix getPathsToWatch() example syntax in lifecycle APIs ([@rlamana](https://github.com/rlamana))\\n- [#2351](https://github.com/facebook/docusaurus/pull/2351) docs(v2): add examples to plugin usage doc ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2343](https://github.com/facebook/docusaurus/pull/2343) docs(v2): fix typo in remark-admonitions example ([@hassanfarid](https://github.com/hassanfarid))\\n- [#2340](https://github.com/facebook/docusaurus/pull/2340) docs(v2): mention about disabling Jekyll when using GitHub pages ([@amilajack](https://github.com/amilajack))\\n- [#2338](https://github.com/facebook/docusaurus/pull/2338) docs(v2): guide on upgrading Docusaurus within a project ([@TheodoreChu](https://github.com/TheodoreChu))\\n- [#2313](https://github.com/facebook/docusaurus/pull/2313) docs(v2): move the quotes to remark admonitions ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [#2307](https://github.com/facebook/docusaurus/pull/2307) docs(v1): fix Windows instructions for GitHub Pages publishing ([@jartuso](https://github.com/jartuso))\\n- [#2300](https://github.com/facebook/docusaurus/pull/2300) docs(v2): make blog plugin config example valid ([@balloob](https://github.com/balloob))\\n- [#2289](https://github.com/facebook/docusaurus/pull/2289) docs(v2): add instructions on Travis CI deployment ([@mohamedsgap](https://github.com/mohamedsgap))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2369](https://github.com/facebook/docusaurus/pull/2369) misc: mention about v2 in README file ([@lex111](https://github.com/lex111))\\n - [#2368](https://github.com/facebook/docusaurus/pull/2368) misc: add note about edits in versioned docs ([@lex111](https://github.com/lex111))\\n - [#2333](https://github.com/facebook/docusaurus/pull/2333) docs: update use of npm/yarn in contributing.md ([@jsjoeio](https://github.com/jsjoeio))\\n - [#2328](https://github.com/facebook/docusaurus/pull/2328) docs(v2): remove unwanted black line from DocSearch showcase image ([@s-pace](https://github.com/s-pace))\\n - [#2319](https://github.com/facebook/docusaurus/pull/2319) docs(v2): showcase user Algolia ([@scottilee](https://github.com/scottilee))\\n- `docusaurus-init`\\n - [#2322](https://github.com/facebook/docusaurus/pull/2322) docs(v2): fix misc styling ([@lex111](https://github.com/lex111))\\n\\n## Committers: 16\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amila Welihinda ([@amilajack](https://github.com/amilajack))\\n- Hassan Farid ([@hassanfarid](https://github.com/hassanfarid))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Mohamed Abdel Nasser ([@mohamedsgap](https://github.com/mohamedsgap))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Paulus Schoutsen ([@balloob](https://github.com/balloob))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- Robert ([@deniaz](https://github.com/deniaz))\\n- Scott Lee ([@scottilee](https://github.com/scottilee))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zhenchao Cai ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [@jartuso](https://github.com/jartuso)"},{"id":"/2.0.0-alpha.43","metadata":{"permalink":"/changelog/2.0.0-alpha.43","source":"@site/changelog/source/2.0.0-alpha.43.md","title":"2.0.0-alpha.43","description":"HOTFIX for 2.0.0-alpha.41.","date":"2020-02-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-18T20:00","authors":["lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"nextItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.41**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2292](https://github.com/facebook/docusaurus/pull/2292) chore(v2): update Infima to 0.2.0-alpha.4 ([@yangshun](https://github.com/yangshun))\\n - [#2291](https://github.com/facebook/docusaurus/pull/2291) fix(v2): fix build and deps install ([@lex111](https://github.com/lex111))\\n\\n## Committers: 2\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.41","metadata":{"permalink":"/changelog/2.0.0-alpha.41","source":"@site/changelog/source/2.0.0-alpha.41.md","title":"2.0.0-alpha.41","description":"New Feature","date":"2020-02-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"awalias","alias":"awalias","url":"https://github.com/awalias","imageURL":"https://github.com/awalias.png","key":"awalias","page":null},{"name":"Elie Dutheil","alias":"edwandr","url":"https://github.com/edwandr","imageURL":"https://github.com/edwandr.png","key":"edwandr","page":null},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},{"name":"Evan Rubinton","alias":"erubi","url":"https://github.com/erubi","imageURL":"https://github.com/erubi.png","key":"erubi","page":null},{"name":"Gal Havivi","alias":"galhavivi","url":"https://github.com/galhavivi","imageURL":"https://github.com/galhavivi.png","key":"galhavivi","page":null},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},{"name":"Ashley Jeffs","alias":"Jeffail","url":"https://github.com/Jeffail","imageURL":"https://github.com/Jeffail.png","key":"Jeffail","page":null},{"name":"Joshua Williams","alias":"jjwill","url":"https://github.com/jjwill","imageURL":"https://github.com/jjwill.png","key":"jjwill","page":null},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},{"name":"Jonathan Delgado","alias":"jonathanrdelgado","url":"https://github.com/jonathanrdelgado","imageURL":"https://github.com/jonathanrdelgado.png","key":"jonathanrdelgado","page":null},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Mark Terrel","alias":"mterrel","url":"https://github.com/mterrel","imageURL":"https://github.com/mterrel.png","key":"mterrel","page":null},{"name":"Ond\u0159ej Nepo\u017eitek","alias":"OndrejNepozitek","url":"https://github.com/OndrejNepozitek","imageURL":"https://github.com/OndrejNepozitek.png","key":"OndrejNepozitek","page":null},{"name":"Scott Dowding","alias":"sdowding","url":"https://github.com/sdowding","imageURL":"https://github.com/sdowding.png","key":"sdowding","page":null},{"name":"Hanseung Yoo","alias":"trustyoo86","url":"https://github.com/trustyoo86","imageURL":"https://github.com/trustyoo86.png","key":"trustyoo86","page":null},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-16T20:00","authors":["awalias","edwandr","elviswolcott","erubi","galhavivi","hbulens","Jeffail","jjwill","JoelMarcey","jonathanrdelgado","jsjoeio","KohheePeace","lex111","mterrel","OndrejNepozitek","sdowding","trustyoo86","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"nextItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2224](https://github.com/facebook/docusaurus/pull/2224) feat(v2): add remark-admonitions to @docusaurus/preset-classic ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2263](https://github.com/facebook/docusaurus/pull/2263) feat(v2): pluralize posts on tag\'s page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2261](https://github.com/facebook/docusaurus/pull/2261) feat(v2): allow to specify different logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2253](https://github.com/facebook/docusaurus/pull/2253) feat(v2): allow specify custom link for logo ([@lex111](https://github.com/lex111))\\n - [#2255](https://github.com/facebook/docusaurus/pull/2255) feat(v2): add site title to meta title ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#2221](https://github.com/facebook/docusaurus/pull/2221) feat(v2): allow for TypeScript pages and components ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2285](https://github.com/facebook/docusaurus/pull/2285) fix(v2): fix codeblock copy button not including blank lines ([@KohheePeace](https://github.com/KohheePeace))\\n - [#2241](https://github.com/facebook/docusaurus/pull/2241) fix(v2): make code blocks scrollable ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2259](https://github.com/facebook/docusaurus/pull/2259) fix(v2): use site title if enabled blog-only mode ([@lex111](https://github.com/lex111))\\n - [#2248](https://github.com/facebook/docusaurus/pull/2248) fix(v2): adjust correct behavior of navbar when active anchor ([@lex111](https://github.com/lex111))\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n - [#2162](https://github.com/facebook/docusaurus/pull/2162) fix(v2): unify anchor behavior ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2262](https://github.com/facebook/docusaurus/pull/2262) fix(v2): remove focus on search input when hovering over it ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2240](https://github.com/facebook/docusaurus/pull/2240) fix(v2): hide read more button on non-truncated posts ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2237](https://github.com/facebook/docusaurus/pull/2237) fix(v2): include base url in 404 route ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#2236](https://github.com/facebook/docusaurus/pull/2236) fix(v2): escape link text in TOC ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2227](https://github.com/facebook/docusaurus/pull/2227) fix(v2): render correct theme for live code blocks on SSR ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2254](https://github.com/facebook/docusaurus/pull/2254) refactor(v2): avoid to use raw theme values ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2281](https://github.com/facebook/docusaurus/pull/2281) docs: update windows deploy command ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- [#2257](https://github.com/facebook/docusaurus/pull/2257) docs(v2): require using JSX flavored style objects in mdx ([@wgao19](https://github.com/wgao19))\\n- [#2251](https://github.com/facebook/docusaurus/pull/2251) docs(v2): collapsible categories in sidebar ([@lex111](https://github.com/lex111))\\n- [#2218](https://github.com/facebook/docusaurus/pull/2218) docs(v2): update link to available prism themes ([@jsjoeio](https://github.com/jsjoeio))\\n- [#2216](https://github.com/facebook/docusaurus/pull/2216) docs(v2): fix plugin-content-docs config comment typo ([@sdowding](https://github.com/sdowding))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2256](https://github.com/facebook/docusaurus/pull/2256) fix(v2): add title for Feedback page ([@lex111](https://github.com/lex111))\\n - [#2246](https://github.com/facebook/docusaurus/pull/2246) docs(v2): add Benthos to showcase ([@Jeffail](https://github.com/Jeffail))\\n - [#2242](https://github.com/facebook/docusaurus/pull/2242) docs(v1): showcase user Jafar ([@galhavivi](https://github.com/galhavivi))\\n - [#2238](https://github.com/facebook/docusaurus/pull/2238) docs(v1): showcase Dime ([@hbulens](https://github.com/hbulens))\\n - [#2233](https://github.com/facebook/docusaurus/pull/2233) docs(v2): showcase user supabase ([@awalias](https://github.com/awalias))\\n - [#2226](https://github.com/facebook/docusaurus/pull/2226) docs(v1): showcase user Adapt.js ([@mterrel](https://github.com/mterrel))\\n - [#2225](https://github.com/facebook/docusaurus/pull/2225) docs(v1): add The Diff Podcast to users ([@JoelMarcey](https://github.com/JoelMarcey))\\n - [#2219](https://github.com/facebook/docusaurus/pull/2219) chore(v1): Updated users list, removing sites not using docusaurus ([@jjwill](https://github.com/jjwill))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2239](https://github.com/facebook/docusaurus/pull/2239) chore(eslint): require curly brackets on all blocks ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ashley Jeffs ([@Jeffail](https://github.com/Jeffail))\\n- Elie Dutheil ([@edwandr](https://github.com/edwandr))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Evan Rubinton ([@erubi](https://github.com/erubi))\\n- Gal Havivi ([@galhavivi](https://github.com/galhavivi))\\n- Hanseung Yoo ([@trustyoo86](https://github.com/trustyoo86))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- JavaScript Joe ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jonathan Delgado ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n- Joshua Williams ([@jjwill](https://github.com/jjwill))\\n- KohheePeace ([@KohheePeace](https://github.com/KohheePeace))\\n- Mark Terrel ([@mterrel](https://github.com/mterrel))\\n- Ond\u0159ej Nepo\u017eitek ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- Scott Dowding ([@sdowding](https://github.com/sdowding))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))\\n- [@awalias](https://github.com/awalias)"},{"id":"/2.0.0-alpha.40","metadata":{"permalink":"/changelog/2.0.0-alpha.40","source":"@site/changelog/source/2.0.0-alpha.40.md","title":"2.0.0-alpha.40","description":"New Feature","date":"2019-12-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Janko Marohni\u0107","alias":"janko","url":"https://github.com/janko","imageURL":"https://github.com/janko.png","key":"janko","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Nick McCurdy","alias":"nickmccurdy","url":"https://github.com/nickmccurdy","imageURL":"https://github.com/nickmccurdy.png","key":"nickmccurdy","page":null},{"name":"t11s","alias":"TransmissionsDev","url":"https://github.com/TransmissionsDev","imageURL":"https://github.com/TransmissionsDev.png","key":"TransmissionsDev","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-25T20:00","authors":["endiliey","janko","lex111","nickmccurdy","TransmissionsDev","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"nextItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2117](https://github.com/facebook/docusaurus/pull/2117) feat(v2): auto switch theme depending on the system theme ([@lex111](https://github.com/lex111))\\n - [#2055](https://github.com/facebook/docusaurus/pull/2055) feat(v2): hide navbar on scroll ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2145](https://github.com/facebook/docusaurus/pull/2145) fix(v2): remove style-loader, use minicssextract in both dev & prod ([@endiliey](https://github.com/endiliey))\\n - [#2122](https://github.com/facebook/docusaurus/pull/2122) fix(v2): dont collapse whitespace in minified html ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2105](https://github.com/facebook/docusaurus/pull/2105) fix(v2): move metadata export after compiling MDX to avoid weird MDX parsing error. ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2113](https://github.com/facebook/docusaurus/pull/2113) fix(v2): set stored theme only if it exists ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2129](https://github.com/facebook/docusaurus/pull/2129) fix(v2): disable scroll while mobile menu open ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2127](https://github.com/facebook/docusaurus/pull/2127) refactor(v2): toggle data-theme with vanilla js instead of react helmet ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2125](https://github.com/facebook/docusaurus/pull/2125) feat(v2): lazy load algolia css so its not render blocking ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2135](https://github.com/facebook/docusaurus/pull/2135) docs(v1): add space between \\"out\\" and \\"Docusaurus\\" ([@TransmissionsDev](https://github.com/TransmissionsDev))\\n - [#2128](https://github.com/facebook/docusaurus/pull/2128) docs(v1): showcase user Shrine ([@janko](https://github.com/janko))\\n - [#2110](https://github.com/facebook/docusaurus/pull/2110) docs(v2): fix pages routing inaccurate info ([@endiliey](https://github.com/endiliey))\\n - [#2106](https://github.com/facebook/docusaurus/pull/2106) fix(v2): add missing hyphen in color generator ([@lex111](https://github.com/lex111))\\n - [#2104](https://github.com/facebook/docusaurus/pull/2104) feat(v2): add color generator for primary colors ([@yangshun](https://github.com/yangshun))\\n - [#2103](https://github.com/facebook/docusaurus/pull/2103) docs: mention about moving docs directory into website ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2114](https://github.com/facebook/docusaurus/pull/2114) fix(v2): add syntax highlight to generated colors ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2126](https://github.com/facebook/docusaurus/pull/2126) docs: promote Docusaurus 2 usage ([@yangshun](https://github.com/yangshun))\\n - [#2119](https://github.com/facebook/docusaurus/pull/2119) fix(v2): align GH button in vertical center ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2124](https://github.com/facebook/docusaurus/pull/2124) feat(v2): add Facebook Docusaurus 2 template ([@yangshun](https://github.com/yangshun))\\n- `docusaurus`\\n - [#2111](https://github.com/facebook/docusaurus/pull/2111) feat(v2): explicit babel/runtime version ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2102](https://github.com/facebook/docusaurus/pull/2102) misc: add command to run prettier on docs ([@yangshun](https://github.com/yangshun))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2118](https://github.com/facebook/docusaurus/pull/2118) perf(v2): reduce HTML payload by eliminating chunk-map ([@endiliey](https://github.com/endiliey))\\n - [#2116](https://github.com/facebook/docusaurus/pull/2116) feat(v2): minify html ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Janko Marohni\u0107 ([@janko](https://github.com/janko))\\n- Nick McCurdy ([@nickmccurdy](https://github.com/nickmccurdy))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- t11s ([@TransmissionsDev](https://github.com/TransmissionsDev))"},{"id":"/2.0.0-alpha.39","metadata":{"permalink":"/changelog/2.0.0-alpha.39","source":"@site/changelog/source/2.0.0-alpha.39.md","title":"2.0.0-alpha.39","description":"Bug Fix","date":"2019-12-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-07T20:00","authors":["endiliey"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"nextItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2099](https://github.com/facebook/docusaurus/pull/2099) fix(v2): escape import path on windows ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2095](https://github.com/facebook/docusaurus/pull/2095) fix(v2): metadata error if markdown does not have ending line ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2100](https://github.com/facebook/docusaurus/pull/2100) chore(CI): docusaurus build on Windows with GitHub actions ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2096](https://github.com/facebook/docusaurus/pull/2096) feat(v2): better & nice looking error overlay ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 1\\n\\n- Endi ([@endiliey](https://github.com/endiliey))"},{"id":"/2.0.0-alpha.38","metadata":{"permalink":"/changelog/2.0.0-alpha.38","source":"@site/changelog/source/2.0.0-alpha.38.md","title":"2.0.0-alpha.38","description":"Breaking Change","date":"2019-12-06T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"KYY","alias":"FeynmanDNA","url":"https://github.com/FeynmanDNA","imageURL":"https://github.com/FeynmanDNA.png","key":"FeynmanDNA","page":null},{"name":"kaichu","alias":"qshiwu","url":"https://github.com/qshiwu","imageURL":"https://github.com/qshiwu.png","key":"qshiwu","page":null},{"name":"Shivangna Kaistha","alias":"shivangna","url":"https://github.com/shivangna","imageURL":"https://github.com/shivangna.png","key":"shivangna","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-06T20:00","authors":["endiliey","FeynmanDNA","qshiwu","shivangna"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"nextItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2088](https://github.com/facebook/docusaurus/pull/2088) perf(v2): smaller bundlesize by embedding metadata to content ([@endiliey](https://github.com/endiliey))\\n\\nIf you have swizzled any Docs/Blog component that depends on metadata, you\'ll have to update. If you haven\'t, no action is needed.\\n\\nFor example, if you\'ve swizzled `@theme/DocItem`. You\'ll have to update\\n\\n```diff\\n- const {metadata, content: DocContent} = props;\\n+ const {content: DocContent} = props;\\n+ const {metadata} = DocContent;\\n```\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2086](https://github.com/facebook/docusaurus/pull/2086) fix(v2): windows compatibility regression ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-ideal-image`\\n - [#2074](https://github.com/facebook/docusaurus/pull/2074) fix(v2): fix plugin-ideal-image breaking website (exports not defined) ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`\\n - [#2085](https://github.com/facebook/docusaurus/pull/2085) misc(v2): update mdx loader plugin README ([@shivangna](https://github.com/shivangna))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#2087](https://github.com/facebook/docusaurus/pull/2087) fix(v1): add key to versions.map in versions.js ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n - [#2083](https://github.com/facebook/docusaurus/pull/2083) refactor(v1): fix props for ProjectTitle ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- `docusaurus`\\n - [#2081](https://github.com/facebook/docusaurus/pull/2081) refactor(v2): move scripts/stylesheets injection to server side ([@endiliey](https://github.com/endiliey))\\n - [#2080](https://github.com/facebook/docusaurus/pull/2080) refactor(v2): minor code refactoring on component creator ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-utils`\\n - [#2089](https://github.com/facebook/docusaurus/pull/2089) perf(v2): improve dev build time by not overwriting file if possible ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`\\n - [#2079](https://github.com/facebook/docusaurus/pull/2079) perf(v2): algolia search result no longer cause full page refresh ([@endiliey](https://github.com/endiliey))\\n - [#2076](https://github.com/facebook/docusaurus/pull/2076) perf(v2): load algolia JS only when user interacts with search ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 4\\n\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- KYY ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- Shivangna Kaistha ([@shivangna](https://github.com/shivangna))\\n- kaichu ([@qshiwu](https://github.com/qshiwu))"},{"id":"/2.0.0-alpha.37","metadata":{"permalink":"/changelog/2.0.0-alpha.37","source":"@site/changelog/source/2.0.0-alpha.37.md","title":"2.0.0-alpha.37","description":"Breaking Change","date":"2019-12-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Binary Logic","alias":"binarylogic","url":"https://github.com/binarylogic","imageURL":"https://github.com/binarylogic.png","key":"binarylogic","page":null},{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Dongwoo Gim","alias":"gimdongwoo","url":"https://github.com/gimdongwoo","imageURL":"https://github.com/gimdongwoo.png","key":"gimdongwoo","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-01T20:00","authors":["binarylogic","endiliey","gimdongwoo","lex111","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"nextItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#2045](https://github.com/facebook/docusaurus/pull/2045) breaking(v2): minimum required nodejs version 8.9-> 8.10 so we can use es2017 ([@endiliey](https://github.com/endiliey))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`\\n - [#2000](https://github.com/facebook/docusaurus/pull/2000) feat(v2): add meta RSS/Atom feed links to head ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#2057](https://github.com/facebook/docusaurus/pull/2057) feat(v2): injectHtmlTags API to inject head and/or body html tags ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#2032](https://github.com/facebook/docusaurus/pull/2032) feat(v2): allow non sidebar category to be first item of sidebar ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#1983](https://github.com/facebook/docusaurus/pull/1983) feat(v2): docs versioning \u2744\ufe0f\ud83d\udd25 ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`\\n - [#2067](https://github.com/facebook/docusaurus/pull/2067) fix(v2): toc should not be broken for heading with html inline code ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2064](https://github.com/facebook/docusaurus/pull/2064) fix(v2): markdown reference to file should not be page not found ([@endiliey](https://github.com/endiliey))\\n - [#2061](https://github.com/facebook/docusaurus/pull/2061) fix(v2): fix docs sidebar highlighting if link is partially matched ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2042](https://github.com/facebook/docusaurus/pull/2042) fix(v2): remove css order warning if css imports are not sorted ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2066](https://github.com/facebook/docusaurus/pull/2066) refactor(v2): add title attribute to anchor link ([@lex111](https://github.com/lex111))\\n - [#1990](https://github.com/facebook/docusaurus/pull/1990) refactor(v2): make better a11y for tabs ([@lex111](https://github.com/lex111))\\n - [#2034](https://github.com/facebook/docusaurus/pull/2034) feat(v2): style sidebar on overflow ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2068](https://github.com/facebook/docusaurus/pull/2068) docs(v2): quick proofread docs ([@endiliey](https://github.com/endiliey))\\n - [#2047](https://github.com/facebook/docusaurus/pull/2047) docs(v2): add manual migration guide for versioning ([@endiliey](https://github.com/endiliey))\\n - [#2036](https://github.com/facebook/docusaurus/pull/2036) docs(v2): Reorganize migration guide ([@wgao19](https://github.com/wgao19))\\n - [#2052](https://github.com/facebook/docusaurus/pull/2052) fix(v2): make proper spelling of Yarn in tabs ([@lex111](https://github.com/lex111))\\n - [#2040](https://github.com/facebook/docusaurus/pull/2040) docs(v2): showcase user vector.dev :) ([@binarylogic](https://github.com/binarylogic))\\n - [#2038](https://github.com/facebook/docusaurus/pull/2038) docs(v2): add documentation on versioning ([@endiliey](https://github.com/endiliey))\\n - [#2037](https://github.com/facebook/docusaurus/pull/2037) docs(v2): display yarn and npm command on website ([@endiliey](https://github.com/endiliey))\\n - [#2051](https://github.com/facebook/docusaurus/pull/2051) docs(v2): more examples on lifecycle apis, cleanup ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`\\n - [#2072](https://github.com/facebook/docusaurus/pull/2072) refactor(v2): stronger typing for blog plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2060](https://github.com/facebook/docusaurus/pull/2060) fix(v2): clean generated manifest from previous build so we dont use the wrong one ([@endiliey](https://github.com/endiliey))\\n - [#2033](https://github.com/facebook/docusaurus/pull/2033) refactor(v2): move unused generated files out from build folder ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-types`, `docusaurus`\\n - [#2043](https://github.com/facebook/docusaurus/pull/2043) refactor(v2): stronger typing for route gen ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2044](https://github.com/facebook/docusaurus/pull/2044) chore(v2): bump deps ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2029](https://github.com/facebook/docusaurus/pull/2029) chore(v2): bump deps and remove unused deps ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#2070](https://github.com/facebook/docusaurus/pull/2070) perf(v2): more performant gtag and analytics plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2046](https://github.com/facebook/docusaurus/pull/2046) perf(v2): use webpack future version of asset emitting logic to free memory ([@endiliey](https://github.com/endiliey))\\n - [#2039](https://github.com/facebook/docusaurus/pull/2039) perf(v2): replace unnecessary json stringify(string) with inline string ([@endiliey](https://github.com/endiliey))\\n - [#2035](https://github.com/facebook/docusaurus/pull/2035) perf(v2): use @babel/runtime plugin to reduce codesize ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`\\n - [#2054](https://github.com/facebook/docusaurus/pull/2054) perf(v2): unblock metadata processing when possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Binary Logic ([@binarylogic](https://github.com/binarylogic))\\n- Dongwoo Gim ([@gimdongwoo](https://github.com/gimdongwoo))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))"},{"id":"/2.0.0-alpha.36","metadata":{"permalink":"/changelog/2.0.0-alpha.36","source":"@site/changelog/source/2.0.0-alpha.36.md","title":"2.0.0-alpha.36","description":"Breaking Change","date":"2019-11-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-22T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"nextItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#1989](https://github.com/facebook/docusaurus/pull/1989) misc(v2): change blog front matter to snake_case ([@yangshun](https://github.com/yangshun))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2012](https://github.com/facebook/docusaurus/pull/2012) feat(v2): allow hiding docs table of contents ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2007](https://github.com/facebook/docusaurus/pull/2007) feat(v2): only create one css file to avoid code-split css loading problem ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2005](https://github.com/facebook/docusaurus/pull/2005) fix(v2): adjust first-level heading offset ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2013](https://github.com/facebook/docusaurus/pull/2013) refactor(v2): split out dark mode toggle so it is easily swizzle-able ([@endiliey](https://github.com/endiliey))\\n - [#2017](https://github.com/facebook/docusaurus/pull/2017) feat(v2): style right sidebar scrollbar when overflow ([@endiliey](https://github.com/endiliey))\\n - [#2003](https://github.com/facebook/docusaurus/pull/2003) refactor(v2): improve semantic markup of blog ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2024](https://github.com/facebook/docusaurus/pull/2024) test(v2): babel exclude transpilation logic to prevent regression ([@endiliey](https://github.com/endiliey))\\n - [#2014](https://github.com/facebook/docusaurus/pull/2014) feat(v2): add meta generator docusaurus ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`\\n - [#2015](https://github.com/facebook/docusaurus/pull/2015) chore(v2): bump & remove unused deps ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#2009](https://github.com/facebook/docusaurus/pull/2009) misc(v2): branding update ([@yangshun](https://github.com/yangshun))\\n\\n## :memo: Documentation\\n\\n- [#2010](https://github.com/facebook/docusaurus/pull/2010) docs(v2): misc updates ([@yangshun](https://github.com/yangshun))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.35","metadata":{"permalink":"/changelog/2.0.0-alpha.35","source":"@site/changelog/source/2.0.0-alpha.35.md","title":"2.0.0-alpha.35","description":"New Feature","date":"2019-11-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Eric Carboni","alias":"ericcarboni","url":"https://github.com/ericcarboni","imageURL":"https://github.com/ericcarboni.png","key":"ericcarboni","page":null},{"name":"Jamie Davenport","alias":"jamiedavenport","url":"https://github.com/jamiedavenport","imageURL":"https://github.com/jamiedavenport.png","key":"jamiedavenport","page":null},{"name":"Nick McCormick","alias":"kenning","url":"https://github.com/kenning","imageURL":"https://github.com/kenning.png","key":"kenning","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Vincent van der Walt","alias":"vinnytheviking","url":"https://github.com/vinnytheviking","imageURL":"https://github.com/vinnytheviking.png","key":"vinnytheviking","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-17T20:00","authors":["endiliey","ericcarboni","jamiedavenport","kenning","lex111","vinnytheviking"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"nextItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1965](https://github.com/facebook/docusaurus/pull/1965) feat(v2): add ability specify link in footer logo ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#1992](https://github.com/facebook/docusaurus/pull/1992) fix(v2): static phrasing content should be rendered correctly in TOC ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#1999](https://github.com/facebook/docusaurus/pull/1999) fix(v2): remove hashbang when click on category ([@lex111](https://github.com/lex111))\\n - [#1962](https://github.com/facebook/docusaurus/pull/1962) fix(v2): make not clickable post title on post item page ([@lex111](https://github.com/lex111))\\n - [#1980](https://github.com/facebook/docusaurus/pull/1980) fix(v2): remove invalid label attribute of footer links ([@lex111](https://github.com/lex111))\\n - [#1978](https://github.com/facebook/docusaurus/pull/1978) fix(v2): use regular div instead of main tag for wrapper layout page ([@lex111](https://github.com/lex111))\\n - [#1975](https://github.com/facebook/docusaurus/pull/1975) fix(v2): move header inside article tag in doc page ([@lex111](https://github.com/lex111))\\n - [#1974](https://github.com/facebook/docusaurus/pull/1974) fix(v2): remove invalid attributes of nav links ([@lex111](https://github.com/lex111))\\n - [#1963](https://github.com/facebook/docusaurus/pull/1963) fix(v2): remove empty containers when no data in blog pages ([@lex111](https://github.com/lex111))\\n - [#1966](https://github.com/facebook/docusaurus/pull/1966) fix(v2): remove duplicate meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2001](https://github.com/facebook/docusaurus/pull/2001) fix(v2): improve UI of search ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#1991](https://github.com/facebook/docusaurus/pull/1991) fix(v2): remove accessible anchors via keyboard ([@lex111](https://github.com/lex111))\\n - [#1987](https://github.com/facebook/docusaurus/pull/1987) refactor(v2): replace h1 tag with h2 in blog list pages ([@lex111](https://github.com/lex111))\\n - [#1981](https://github.com/facebook/docusaurus/pull/1981) fix(v2): use tag time for showing last update of doc item ([@lex111](https://github.com/lex111))\\n - [#1977](https://github.com/facebook/docusaurus/pull/1977) feat(v2): add aria-label to read more links for a11y ([@lex111](https://github.com/lex111))\\n - [#1964](https://github.com/facebook/docusaurus/pull/1964) fix(v2): use tag time for showing post item date ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#1968](https://github.com/facebook/docusaurus/pull/1968) refactor(v2): simplify blog truncate function ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#1988](https://github.com/facebook/docusaurus/pull/1988) docs(v2): fix syntax highlighting for YML code blocks ([@lex111](https://github.com/lex111))\\n - [#1976](https://github.com/facebook/docusaurus/pull/1976) docs(v2): Add section to blog document about feed location ([@vinnytheviking](https://github.com/vinnytheviking))\\n - [#1970](https://github.com/facebook/docusaurus/pull/1970) docs(v2): update configureWebpack utility functions ([@jamiedavenport](https://github.com/jamiedavenport))\\n- `docusaurus-1.x`\\n - [#1961](https://github.com/facebook/docusaurus/pull/1961) docs(v1): remove exclusive language ([@ericcarboni](https://github.com/ericcarboni))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2002](https://github.com/facebook/docusaurus/pull/2002) fix(v2): fix browser window menu icon on smaller screen ([@lex111](https://github.com/lex111))\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#1985](https://github.com/facebook/docusaurus/pull/1985) chore(v2): update dependencies ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#1979](https://github.com/facebook/docusaurus/pull/1979) perf(v2): reduce main bundle size by using es5 if possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Eric Carboni ([@ericcarboni](https://github.com/ericcarboni))\\n- Jamie Davenport ([@jamiedavenport](https://github.com/jamiedavenport))\\n- Nick McCormick ([@kenning](https://github.com/kenning))\\n- Vincent van der Walt ([@vinnytheviking](https://github.com/vinnytheviking))"},{"id":"/2.0.0-alpha.34","metadata":{"permalink":"/changelog/2.0.0-alpha.34","source":"@site/changelog/source/2.0.0-alpha.34.md","title":"2.0.0-alpha.34","description":"New Feature","date":"2019-11-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-11T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"nextItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1956](https://github.com/facebook/docusaurus/pull/1956) feat(v2): add ability hide dark mode toggle ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#1958](https://github.com/facebook/docusaurus/pull/1958) breaking(v2): editUrl should point to website instead of docsDir ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#1959](https://github.com/facebook/docusaurus/pull/1959) fix(v2): useTOC hooks should not be called in each nested children ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#1957](https://github.com/facebook/docusaurus/pull/1957) refactor(v2): avoid synchronous/ blocking operation when possible ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- [#1953](https://github.com/facebook/docusaurus/pull/1953) fix(v2): update Infima website URL ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#1955](https://github.com/facebook/docusaurus/pull/1955) chore: bump dev dependencies ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1952](https://github.com/facebook/docusaurus/pull/1952) chore(v2): add lerna-changelog ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#1951](https://github.com/facebook/docusaurus/pull/1951) perf(v2): skip runtime fileHash cache in prod & get timestamp asynchronously ([@endiliey](https://github.com/endiliey))\\n - [#1950](https://github.com/facebook/docusaurus/pull/1950) perf(v2): more efficient hot reload & consistent filegen ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.33","metadata":{"permalink":"/changelog/2.0.0-alpha.33","source":"@site/changelog/source/2.0.0-alpha.33.md","title":"2.0.0-alpha.33","description":"Features","date":"2019-11-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-08T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"nextItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Table of contents is now highlighted depending on current active headings. (thanks to awesome @SantiagoGdaR) [#1896](https://github.com/facebook/docusaurus/pull/1896)\\n- Official blog plugin can now generate feed for blog posts. (thanks to awesome @moozzyk) [#1916](https://github.com/facebook/docusaurus/pull/1916)\\n- **BREAKING** `prismTheme` is renamed to `theme` as part new `prism` object in `themeConfig` field in your `docusaurus.config.js`. Eg:\\n ```diff\\n themeConfig: {\\n - prismTheme: require(\'prism-react-renderer/themes/dracula\'),\\n + prism: {\\n + theme: require(\'prism-react-renderer/themes/dracula\'),\\n + },\\n },\\n ```\\n- Added new `prism` option `defaultLanguage` that is used if the language is not specified in code blocks. [#1910](https://github.com/facebook/docusaurus/pull/1910)\\n\\n## Fixes\\n\\n- Fix babel/env not picking the correct browserslist configuration during development. When running `docusaurus start`, `process.env.NODE_ENV` is now consistently set to `development`.\\n- Ensure routes config generation to be more consistent in ordering. Nested routes should be placed last in routes.js. This will allow user to create `src/pages/docs.js` to create custom docs page for `/docs` or even `src/pages/docs/super.js` to create page for `/docs/super/`;\\n- Fix watcher does not trigger reload on windows.\\n- Fix build compilation error if exists only one code tab.\\n- Add minor padding to docs container so that hash-link won\'t be cut off.\\n\\n## Others\\n\\n- Misc dependency upgrades.\\n- Stability improvement (more tests) & refactoring on docs plugin to prevent regression."},{"id":"/2.0.0-alpha.32","metadata":{"permalink":"/changelog/2.0.0-alpha.32","source":"@site/changelog/source/2.0.0-alpha.32.md","title":"2.0.0-alpha.32","description":"Features","date":"2019-11-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-04T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"nextItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Add `<Redirect>` component for client side redirect. Example Usage:\\n\\n```js\\nimport React from \'react\';\\nimport {Redirect} from \'@docusaurus/router\';\\n\\nfunction Home() {\\n return <Redirect to=\\"/docs/test\\" />;\\n}\\n```\\n\\n- Allow user to add custom HTML to footer items. [#1905](https://github.com/facebook/docusaurus/pull/1905)\\n- Added code block line highlighting feature (thanks @lex111)! If you have previously swizzled the `CodeBlock` theme component, it is recommended to update your source code to have this feature. ([#1860](https://github.com/facebook/Docusaurus/issues/1860))\\n\\n## Bug Fixes\\n\\n- Fix `@theme/Tabs` component to be able to create tabs with only one item.\\n- Fix MDX `@theme/Heading` component. If there is no id, it should not create anchor link.\\n- Fixed a bug in which if `themeConfig.algolia` is not defined, the custom searchbar won\'t appear. If you\'ve swizzled Algolia `SearchBar` component before, please update your source code otherwise CSS might break. See [#1909](https://github.com/facebook/docusaurus/pull/1909/files) for reference.\\n\\n```js\\n- <Fragment>\\n+ <div className=\\"navbar__search\\" key=\\"search-box\\">\\n```\\n\\n- Slightly adjust search icon position to be more aligned on small width device. ([#1893](https://github.com/facebook/Docusaurus/issues/1893))\\n- Fix algolia styling bug, previously search suggestion result is sometimes hidden. ([#1915](https://github.com/facebook/Docusaurus/issues/1915))\\n- Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1.\\n- Fix accessing `docs/` or `/docs/xxxx` that does not match any existing doc page should return 404 (Not found) page, not blank page. ([#1903](https://github.com/facebook/Docusaurus/issues/1903))\\n- Prioritize `@docusaurus/core` dependencies/ node_modules over user\'s node_modules. This fix a bug whereby if user has core-js@3 on its own node_modules but docusaurus depends on core-js@2, we previously encounter `Module not found: core-js/modules/xxxx` (because core-js@3 doesn\'t have that).\\n- Fix a bug where docs plugin add `/docs` route even if docs folder is empty. We also improved docs plugin test coverage to 100% for stability before working on docs versioning. ([#1912](https://github.com/facebook/Docusaurus/issues/1912))\\n\\n## Performance Improvement\\n\\n- Reduce memory usage consumption. ([#1900](https://github.com/facebook/Docusaurus/issues/1900))\\n- Significantly reduce main bundle size and initial HTML payload on production build. Generated files from webpack is also shorter in name. ([#1898](https://github.com/facebook/Docusaurus/issues/1898))\\n- Simplify blog metadata. Previously, accessing `/blog/post-xxx` will request for next and prev blog post metadata too aside from target post metadata. We should only request target post metadata. ([#1908](https://github.com/facebook/Docusaurus/issues/1908))\\n\\n## Others\\n\\n- Convert sitemap plugin to TypeScript. ([#1894](https://github.com/facebook/Docusaurus/issues/1894))\\n- Refactor dark mode toggle into a hook. ([#1899](https://github.com/facebook/Docusaurus/issues/1899))"},{"id":"/2.0.0-alpha.31","metadata":{"permalink":"/changelog/2.0.0-alpha.31","source":"@site/changelog/source/2.0.0-alpha.31.md","title":"2.0.0-alpha.31","description":"- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.","date":"2019-10-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-26T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"nextItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.\\n- Footer is now also displayed in docs page for consistency.\\n- Remove empty doc sidebar container if sidebar for a particular doc page does not exist. Otherwise, it will cause an additional empty space.\\n- Default PostCSS loader now only polyfills stage 3+ features (previously it was stage 2) like Create React App. Stage 2 CSS is considered relatively unstable and subject to change while Stage 3 features will likely become a standard.\\n- Fix search bar focus bug. When you put the focus on search input, previously the focus will remain although we have clicked to other area outside of the search input.\\n- New themeConfig option `sidebarCollapsible`. It is on by default. If explicitly set to `false`, all doc items in sidebar is expanded. Otherwise, it will still be a collapsible sidebar.\\n- Disable adding hashes to the generated class names of CSS modules in dev mode. Generating unique identifiers takes some time, which can be saved since including paths to files in class names is enough to avoid collisions.\\n- Fix showing sidebar category with empty items.\\n- Update infima from 0.2.0-alpha.2 to 0.2.0-alpha.3\\n - Fix pagination nav and right sidebar color contrast ratio\\n - Fix sidebar arrow color in dark mode\\n - Fix footer mobile issue\\n - Increase sidebar width\\n - etc"},{"id":"/2.0.0-alpha.30","metadata":{"permalink":"/changelog/2.0.0-alpha.30","source":"@site/changelog/source/2.0.0-alpha.30.md","title":"2.0.0-alpha.30","description":"- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug TypeError: Cannot assign to read only property \'exports\' of object \'#\'.(#1868)","date":"2019-10-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-22T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"nextItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug `TypeError: Cannot assign to read only property \'exports\' of object \'#<Object>\'`.([#1868](https://github.com/facebook/docusaurus/pull/1868))\\n\\nIf you are still encountering the error. Please check whether you use `module.exports` for your `.js` file instead of doing `export` (mixing CJS and ES). See https://github.com/webpack/webpack/issues/4039#issuecomment-477779322 and https://github.com/webpack/webpack/issues/4039#issuecomment-273804003 for more context."},{"id":"/2.0.0-alpha.29","metadata":{"permalink":"/changelog/2.0.0-alpha.29","source":"@site/changelog/source/2.0.0-alpha.29.md","title":"2.0.0-alpha.29","description":"HOTFIX for 2.0.0-alpha.28.","date":"2019-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"nextItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.28**.\\n\\n- Fix missing `core-js` dependencies on `@docusaurus/core`.\\n- Fix wrong `@babel/env` preset configuration that causes build compilation error.\\n- New UI for webpack compilation progress bar."},{"id":"/2.0.0-alpha.28","metadata":{"permalink":"/changelog/2.0.0-alpha.28","source":"@site/changelog/source/2.0.0-alpha.28.md","title":"2.0.0-alpha.28","description":"- Further reduce memory usage to avoid heap memory allocation failure.","date":"2019-10-21T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"nextItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Further reduce memory usage to avoid heap memory allocation failure.\\n- Fix `keywords` frontmatter for SEO not working properly.\\n- Fix `swizzle` command not passing context properly to theme packages.\\n- Add `extendCli` api for plugins. This will allow plugin to further extend Docusaurus CLI.\\n- Fix `swizzle` command not being able to swizzle single js file.\\n- Fix logo URL in footer to be appended with baseUrl automatically.\\n- Add the option `--no-open` for `start` command.\\n- Set `@babel/env` useBuiltins to `usage`. This will automatically use browserlist and import polyfills required.\\n- Modified TerserWebpackPlugin `terserOptions` for better cross-browser compatibility.\\n- **BREAKING** `withBaseUrl` is renamed to `useBaseUrl` because its a React Hooks. Make sure you import/rename it correctly. Eg: `import useBaseUrl from \'@docusaurus/useBaseUrl`;\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine.\\n- Upgrade dependencies."},{"id":"/2.0.0-alpha.27","metadata":{"permalink":"/changelog/2.0.0-alpha.27","source":"@site/changelog/source/2.0.0-alpha.27.md","title":"2.0.0-alpha.27","description":"- Add @theme/Tabs which can be used to implement multi-language code tabs.","date":"2019-10-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"nextItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add `@theme/Tabs` which can be used to implement multi-language code tabs.\\n- Implement `custom_edit_url` and `hide_title` markdown header for docusaurus v1 feature parity.\\n- Reduce memory usage and slightly faster production build.\\n- Misc dependency upgrades."},{"id":"/2.0.0-alpha.26","metadata":{"permalink":"/changelog/2.0.0-alpha.26","source":"@site/changelog/source/2.0.0-alpha.26.md","title":"2.0.0-alpha.26","description":"- Docs, pages plugin is rewritten in TypeScript","date":"2019-10-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-12T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"nextItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Docs, pages plugin is rewritten in TypeScript\\n- Docs improvements and tweaks\\n - Improved metadata which results in smaller bundle size.\\n - Docs sidebar can now be more than one level deep, theoretically up to infinity\\n - Collapsible docs sidebar!\\n - Make doc page title larger\\n - Add `editUrl` option (URL for editing) to docs plugin. If this field is set, there will be an \\"Edit this page\\" link for each doc page. Example: \'https://github.com/facebook/docusaurus/edit/master/docs\'\\n - Add `showLastUpdateTime` and `showLastUpdateAuthor` options to docs plugin to further achieve v1 parity of showing last update data for a particular doc\\n- Slight tweaks to the Blog components - blog title is larger now\\n- Code Blocks\\n - Change default theme from Night Owl to Palenight\\n - Slight tweaks to playground/preview components\\n- Add `scripts` and `stylesheets` field to `docusaurus.config.js`\\n- More documentation..."},{"id":"/2.0.0-alpha.25","metadata":{"permalink":"/changelog/2.0.0-alpha.25","source":"@site/changelog/source/2.0.0-alpha.25.md","title":"2.0.0-alpha.25","description":"- Blog plugin is rewritten in TypeScript and can now support CJK","date":"2019-10-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-01T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"nextItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Blog plugin is rewritten in TypeScript and can now support CJK\\n- Upgrade key direct dependencies such as webpack, mdx and babel to latest\\n- Do not escape html and body attributes\\n- For devices with very small viewport width, the searchbar is replaced with a search icon. On tap of the search icon the searchbar is expanded and the text beside the logo is hidden and remains hidden while the search bar is expanded.\\n- Add `date` frontMatter support for blog plugin\\n- Add `truncateMarker` option to blog plugin, support string or regex.\\n- Webpack `optimization.removeAvailableModules` is now disabled for performance gain. See https://github.com/webpack/webpack/releases/tag/v4.38.0 for more context."},{"id":"/2.0.0-alpha.24","metadata":{"permalink":"/changelog/2.0.0-alpha.24","source":"@site/changelog/source/2.0.0-alpha.24.md","title":"2.0.0-alpha.24","description":"- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.","date":"2019-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-24T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"nextItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.\\n- Upgrade dependencies of css-loader from 2.x to 3.x. CSS modules localIdentName hash now only use the last 4 characters instead of 8.\\n- Fix broken markdown linking replacement for mdx files\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine. Instead of absolute path, we use relative path from site directory. Resulting in shorter webpack chunk naming and smaller bundle size.\\n- Use contenthash instead of chunkhash for better long term caching\\n- Allow user to customize generated heading from MDX. Swizzle `@theme/Heading`"},{"id":"/2.0.0-alpha.23","metadata":{"permalink":"/changelog/2.0.0-alpha.23","source":"@site/changelog/source/2.0.0-alpha.23.md","title":"2.0.0-alpha.23","description":"- Fix docusaurus route config generation for certain edge case","date":"2019-07-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"nextItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix docusaurus route config generation for certain edge case"},{"id":"/2.0.0-alpha.22","metadata":{"permalink":"/changelog/2.0.0-alpha.22","source":"@site/changelog/source/2.0.0-alpha.22.md","title":"2.0.0-alpha.22","description":"- Add missing dependencies on @docusaurus/preset-classic","date":"2019-07-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-20T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"nextItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add missing dependencies on `@docusaurus/preset-classic`\\n- New plugin `@docusaurus/plugin-ideal-image` to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)\\n- Better Twitter/discord image preview. Previously the size is too zoomed\\n- Allow prism syntax highlighting theme customization. Refer to https://docusaurus.io/docs/markdown-features#syntax-highlighting\\n- CSS is now autoprefixed using postcss\\n- Faster, lighter webpack bundle size\\n- `@docusaurus/theme-live-codeblock` is now much smaller in size and no longer only load on viewport\\n- Blog markdown files now support using the id field to specify the path"},{"id":"/2.0.0-alpha.21","metadata":{"permalink":"/changelog/2.0.0-alpha.21","source":"@site/changelog/source/2.0.0-alpha.21.md","title":"2.0.0-alpha.21","description":"- Fix babel-loader not transpiling docusaurus package","date":"2019-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"nextItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel-loader not transpiling docusaurus package"},{"id":"/2.0.0-alpha.20","metadata":{"permalink":"/changelog/2.0.0-alpha.20","source":"@site/changelog/source/2.0.0-alpha.20.md","title":"2.0.0-alpha.20","description":"- Add copy codeblock button","date":"2019-07-14T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"nextItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add copy codeblock button\\n- Add Google analytics and Google gtag plugins.\\n- Move source components to `/src`. Please create a `website/src` directory and move your `/pages` and `/theme` code into it. This is to make it easier to integrate your website with external build/static analysis tooling (you can now just pass in `src/**/*.js` as the path to process).\\n- Adde more documentation thanks to @wgao19.\\n- Deprecate the current docs plugin. The docs plugin as of 2.0.0-alpha.19 is heavily based on V1 specifications and we intend to create a better one that fixes some of the inconsistencies in V1. If you have swizzled any doc components, you will have to update their names. You are highly encourages to not swizzle the legacy doc components until we have completed the new docs plugin.\\n- Separate v2 init command to new package @docusaurus/init\\n- Render 404.html page\\n- Improve SEO\\n- Clicking on the logo in the mobile sliding navigation will now bring you to the homepage.\\n- Performance\\n - Disable webpack output pathinfo. Webpack has the ability to generate path info in the output bundle. However, this puts garbage collection pressure on projects that bundle thousands of modules. Not very useful for our case\\n - Drop cache-loader in CI and test environment because it has an initial overhead. We always start from scratch in vm instance like CI so cache-loader is useless\\n - Better splitchunks and babel default webpack config"},{"id":"/2.0.0-alpha.19","metadata":{"permalink":"/changelog/2.0.0-alpha.19","source":"@site/changelog/source/2.0.0-alpha.19.md","title":"2.0.0-alpha.19","description":"- Add a sensible default for browserslist config.","date":"2019-06-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-06-07T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"nextItem":{"title":"V2 Changelog","permalink":"/changelog/V2 Changelog"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add a sensible default for browserslist config.\\n- UI\\n - Add sun and moon emoji to the dark mode toggle.\\n - Mobile responsive menu.\\n - Right table of contents for docs is now sticky.\\n- Plugins\\n - Change plugin definitions from classes to functions. Refer to the new plugin docs.\\n - Implement Clients module API.\\n - Change format within `docusaurus.config.js` to be like presets.\\n- Deps\\n - Infima CSS is now locked down to specific versions and not relying upon the CDN which reads from trunk.\\n - Update dependencies to latest\\n- Customize/ Override infima CSS variables by passing options into the classic preset.\\n\\n```\\npresets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n theme: {\\n customCss: require.resolve(\'./css/custom.css\'),\\n },\\n ...\\n },\\n ],\\n],\\n```\\n\\n- Allow passing remark and rehype plugins to mdx-loader for docs and blog plugin\\n- Move themes component of docs and blog to be part of theme-classic\\n- Use composition style for prism syntax highlighting instead of doing it via rehype plugin\\n- Pass MDXProvider to docs and blog. To change the provided MDX components, run `docusaurus swizzle @docusaurus/theme-classic MDXComponents`\\n- Add @docusaurus/theme-livecodeblock plugin\\n- Better run-time code generation & webpack splitchunks optimization\\n- Minify css for production build\\n- Fix weird scrolling problem when navigating to a route with a `hash` location"},{"id":"/V2 Changelog","metadata":{"permalink":"/changelog/V2 Changelog","source":"@site/changelog/source/V2 Changelog.md","title":"V2 Changelog","description":"siteConfig.js changes","date":"2019-04-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-04-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n### `siteConfig.js` changes\\n\\n- `siteConfig.js` renamed to `docusaurus.config.js`.\\n- Remove the following config options:\\n - `docsUrl`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `customDocsPath`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `sidebars.json` now has to be explicitly loaded by users and passed into the plugin option on `docusaurus-plugin-content-docs`.\\n - `headerLinks` doc, page, blog is deprecated and has been to moved into `themeConfig` under the name `navbar`. The syntax is now:\\n\\n```js\\nthemeConfig: {\\n navbar: {\\n title: \'Docusaurus\',\\n logo: {\\n alt: \'Docusaurus Logo\',\\n src: \'img/docusaurus.svg\',\\n },\\n links: [\\n {to: \'docs/introduction\', label: \'Docs\', position: \'left\'},\\n {to: \'blog\', label: \'Blog\', position: \'left\'},\\n {to: \'feedback\', label: \'Feedback\', position: \'left\'},\\n {\\n href: \'https://github.com/facebook/docusaurus\',\\n label: \'GitHub\',\\n position: \'right\',\\n },\\n ],\\n },\\n}\\n```\\n\\n### Migration Guide\\n\\n_Work in Progress_\\n\\n### Presets\\n\\n- Add presets for plugins that follow the [Babel preset convention](https://babeljs.io/docs/en/presets)."}],"blogListPaginated":[{"items":["/3.4.0","/3.3.2","/3.3.1","/3.3.0","/3.2.1","/3.2.0","/3.1.1","/3.1.0","/3.0.1","/3.0.0","/2.4.3","/2.4.2","/2.4.1","/2.4.0","/2.3.1","/2.3.0","/2.2.0","/2.1.0","/2.0.1","/2.0.0"],"metadata":{"permalink":"/changelog","page":1,"postsPerPage":20,"totalPages":5,"totalCount":97,"nextPage":"/changelog/page/2","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-rc.1","/2.0.0-beta.22","/2.0.0-beta.21","/2.0.0-beta.20","/2.0.0-beta.19","/2.0.0-beta.18","/2.0.0-beta.17","/2.0.0-beta.16","/2.0.0-beta.15","/2.0.0-beta.14","/2.0.0-beta.13","/2.0.0-beta.12","/2.0.0-beta.11","/2.0.0-beta.10","/2.0.0-beta.9","/2.0.0-beta.8","/2.0.0-beta.7","/2.0.0-beta.6","/2.0.0-beta.5","/2.0.0-beta.4"],"metadata":{"permalink":"/changelog/page/2","page":2,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog","nextPage":"/changelog/page/3","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-beta.3","/2.0.0-beta.2","/2.0.0-beta.1","/2.0.0-beta.0","/2.0.0-alpha.75","/2.0.0-alpha.74","/2.0.0-alpha.73","/2.0.0-alpha.72","/2.0.0-alpha.71","/2.0.0-alpha.70","/2.0.0-alpha.69","/2.0.0-alpha.68","/2.0.0-alpha.67","/2.0.0-alpha.66","/2.0.0-alpha.65","/2.0.0-alpha.64","/2.0.0-alpha.63","/2.0.0-alpha.62","/2.0.0-alpha.61","/2.0.0-alpha.60"],"metadata":{"permalink":"/changelog/page/3","page":3,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/2","nextPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.59","/2.0.0-alpha.58","/2.0.0-alpha.57","/2.0.0-alpha.56","/2.0.0-alpha.55","/2.0.0-alpha.54","/2.0.0-alpha.53","/2.0.0-alpha.51","/2.0.0-alpha.50","/2.0.0-alpha.49","/2.0.0-alpha.48","/2.0.0-alpha.44","/2.0.0-alpha.43","/2.0.0-alpha.41","/2.0.0-alpha.40","/2.0.0-alpha.39","/2.0.0-alpha.38","/2.0.0-alpha.37","/2.0.0-alpha.36","/2.0.0-alpha.35"],"metadata":{"permalink":"/changelog/page/4","page":4,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/3","nextPage":"/changelog/page/5","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.34","/2.0.0-alpha.33","/2.0.0-alpha.32","/2.0.0-alpha.31","/2.0.0-alpha.30","/2.0.0-alpha.29","/2.0.0-alpha.28","/2.0.0-alpha.27","/2.0.0-alpha.26","/2.0.0-alpha.25","/2.0.0-alpha.24","/2.0.0-alpha.23","/2.0.0-alpha.22","/2.0.0-alpha.21","/2.0.0-alpha.20","/2.0.0-alpha.19","/V2 Changelog"],"metadata":{"permalink":"/changelog/page/5","page":5,"postsPerPage":20,"totalPages":5,"totalCount":97,"previousPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}],"blogTags":{},"blogTagsListPath":"/changelog/tags","authorsMap":{"6543":{"name":"6543","alias":"6543","url":"https://github.com/6543","imageURL":"https://github.com/6543.png","key":"6543","page":null},"1084350607":{"name":"\u4e45\u67d3 | JiuRan","alias":"1084350607","url":"https://github.com/1084350607","imageURL":"https://github.com/1084350607.png","key":"1084350607","page":null},"Arsero":{"name":"Azzedine E.","alias":"Arsero","url":"https://github.com/Arsero","imageURL":"https://github.com/Arsero.png","key":"Arsero","page":null},"CodeDoctorDE":{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE","page":null},"homotechsual":{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual","page":null},"ilmedova":{"name":"Mahri Ilmedova","alias":"ilmedova","url":"https://github.com/ilmedova","imageURL":"https://github.com/ilmedova.png","key":"ilmedova","page":null},"namnguyenthanhwork":{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork","page":null},"ncoughlin":{"name":"Nick Coughlin","alias":"ncoughlin","url":"https://github.com/ncoughlin","imageURL":"https://github.com/ncoughlin.png","key":"ncoughlin","page":null},"OzakIOne":{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne","page":null},"PetarMc1":{"name":"Petar_mc","alias":"PetarMc1","url":"https://github.com/PetarMc1","imageURL":"https://github.com/PetarMc1.png","key":"PetarMc1","page":null},"revi":{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi","page":null},"slorber":{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},"tats-u":{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u","page":null},"Abdullah-03":{"name":"Abdullah Saud","alias":"Abdullah-03","url":"https://github.com/Abdullah-03","imageURL":"https://github.com/Abdullah-03.png","key":"Abdullah-03","page":null},"andrmaz":{"name":"Andrea Mazzucchelli","alias":"andrmaz","url":"https://github.com/andrmaz","imageURL":"https://github.com/andrmaz.png","key":"andrmaz","page":null},"d4nyll":{"name":"Daniel Li","alias":"d4nyll","url":"https://github.com/d4nyll","imageURL":"https://github.com/d4nyll.png","key":"d4nyll","page":null},"eldemcan":{"name":"Can Eldem","alias":"eldemcan","url":"https://github.com/eldemcan","imageURL":"https://github.com/eldemcan.png","key":"eldemcan","page":null},"gagdiez":{"name":"Guille","alias":"gagdiez","url":"https://github.com/gagdiez","imageURL":"https://github.com/gagdiez.png","key":"gagdiez","page":null},"h3nr1ke":{"name":"H3NR1KE","alias":"h3nr1ke","url":"https://github.com/h3nr1ke","imageURL":"https://github.com/h3nr1ke.png","key":"h3nr1ke","page":null},"iAdramelk":{"name":"Alexey Ivanov","alias":"iAdramelk","url":"https://github.com/iAdramelk","imageURL":"https://github.com/iAdramelk.png","key":"iAdramelk","page":null},"johnnyreilly":{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly","page":null},"kaihoffman":{"name":"Kai Hoffman","alias":"kaihoffman","url":"https://github.com/kaihoffman","imageURL":"https://github.com/kaihoffman.png","key":"kaihoffman","page":null},"lebalz":{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz","page":null},"pearmini":{"name":"Bairui Su","alias":"pearmini","url":"https://github.com/pearmini","imageURL":"https://github.com/pearmini.png","key":"pearmini","page":null},"SandPod":{"name":"Alexander Sandor","alias":"SandPod","url":"https://github.com/SandPod","imageURL":"https://github.com/SandPod.png","key":"SandPod","page":null},"tomsotte":{"name":"Tommaso Sotte","alias":"tomsotte","url":"https://github.com/tomsotte","imageURL":"https://github.com/tomsotte.png","key":"tomsotte","page":null},"tomy0000000":{"name":"Tomy Hsieh","alias":"tomy0000000","url":"https://github.com/tomy0000000","imageURL":"https://github.com/tomy0000000.png","key":"tomy0000000","page":null},"Virgil993":{"name":"Virgil993","alias":"Virgil993","url":"https://github.com/Virgil993","imageURL":"https://github.com/Virgil993.png","key":"Virgil993","page":null},"volcanofr":{"name":"volcanofr","alias":"volcanofr","url":"https://github.com/volcanofr","imageURL":"https://github.com/volcanofr.png","key":"volcanofr","page":null},"Zwyx":{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx","page":null},"4troDev":{"name":"Josue [4tro] A","alias":"4troDev","url":"https://github.com/4troDev","imageURL":"https://github.com/4troDev.png","key":"4troDev","page":null},"anatolykopyl":{"name":"Anatoly Kopyl","alias":"anatolykopyl","url":"https://github.com/anatolykopyl","imageURL":"https://github.com/anatolykopyl.png","key":"anatolykopyl","page":null},"axel7083":{"name":"axel7083","alias":"axel7083","url":"https://github.com/axel7083","imageURL":"https://github.com/axel7083.png","key":"axel7083","page":null},"baradusov":{"name":"\u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432","alias":"baradusov","url":"https://github.com/baradusov","imageURL":"https://github.com/baradusov.png","key":"baradusov","page":null},"chris-bateman":{"name":"Chris Bateman","alias":"chris-bateman","url":"https://github.com/chris-bateman","imageURL":"https://github.com/chris-bateman.png","key":"chris-bateman","page":null},"GingerGeek":{"name":"Zed Spencer-Milnes","alias":"GingerGeek","url":"https://github.com/GingerGeek","imageURL":"https://github.com/GingerGeek.png","key":"GingerGeek","page":null},"Hallinn":{"name":"Hallbj\xf6rn Magn\xfasson","alias":"Hallinn","url":"https://github.com/Hallinn","imageURL":"https://github.com/Hallinn.png","key":"Hallinn","page":null},"ilg-ul":{"name":"Liviu Ionescu","alias":"ilg-ul","url":"https://github.com/ilg-ul","imageURL":"https://github.com/ilg-ul.png","key":"ilg-ul","page":null},"Its-Just-Nans":{"name":"n4n5","alias":"Its-Just-Nans","url":"https://github.com/Its-Just-Nans","imageURL":"https://github.com/Its-Just-Nans.png","key":"Its-Just-Nans","page":null},"Josh-Cena":{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena","page":null},"kaymomin":{"name":"krinza.eth","alias":"kaymomin","url":"https://github.com/kaymomin","imageURL":"https://github.com/kaymomin.png","key":"kaymomin","page":null},"mxschmitt":{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt","page":null},"Oreoxmt":{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt","page":null},"Rafael-Martins":{"name":"Rafael Martins","alias":"Rafael-Martins","url":"https://github.com/Rafael-Martins","imageURL":"https://github.com/Rafael-Martins.png","key":"Rafael-Martins","page":null},"Suenaga-Ryuya":{"name":"suenryu","alias":"Suenaga-Ryuya","url":"https://github.com/Suenaga-Ryuya","imageURL":"https://github.com/Suenaga-Ryuya.png","key":"Suenaga-Ryuya","page":null},"sunkanmii":{"name":"Fafowora Sunkanmi","alias":"sunkanmii","url":"https://github.com/sunkanmii","imageURL":"https://github.com/sunkanmii.png","key":"sunkanmii","page":null},"VahidNaderi":{"name":"Vahid Naderi","alias":"VahidNaderi","url":"https://github.com/VahidNaderi","imageURL":"https://github.com/VahidNaderi.png","key":"VahidNaderi","page":null},"vlad-nestorov":{"name":"Vlad Nestorov","alias":"vlad-nestorov","url":"https://github.com/vlad-nestorov","imageURL":"https://github.com/vlad-nestorov.png","key":"vlad-nestorov","page":null},"yixiaojiu":{"name":"\u7fca\u5c0f\u4e45","alias":"yixiaojiu","url":"https://github.com/yixiaojiu","imageURL":"https://github.com/yixiaojiu.png","key":"yixiaojiu","page":null},"dawei-wang":{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang","page":null},"eitsupi":{"name":"eitsupi","alias":"eitsupi","url":"https://github.com/eitsupi","imageURL":"https://github.com/eitsupi.png","key":"eitsupi","page":null},"jack-robson":{"name":"Jack Robson","alias":"jack-robson","url":"https://github.com/jack-robson","imageURL":"https://github.com/jack-robson.png","key":"jack-robson","page":null},"sanjaiyan-dev":{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev","page":null},"axmmisaka":{"name":"axmmisaka","alias":"axmmisaka","url":"https://github.com/axmmisaka","imageURL":"https://github.com/axmmisaka.png","key":"axmmisaka","page":null},"c0h1b4":{"name":"c0h1b4","alias":"c0h1b4","url":"https://github.com/c0h1b4","imageURL":"https://github.com/c0h1b4.png","key":"c0h1b4","page":null},"jgarrow":{"name":"Janessa Garrow","alias":"jgarrow","url":"https://github.com/jgarrow","imageURL":"https://github.com/jgarrow.png","key":"jgarrow","page":null},"SimenB":{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB","page":null},"harryzcy":{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy","page":null},"mcrstudio":{"name":"MCR Studio","alias":"mcrstudio","url":"https://github.com/mcrstudio","imageURL":"https://github.com/mcrstudio.png","key":"mcrstudio","page":null},"NickGerleman":{"name":"Nick Gerleman","alias":"NickGerleman","url":"https://github.com/NickGerleman","imageURL":"https://github.com/NickGerleman.png","key":"NickGerleman","page":null},"reece-white":{"name":"reece-white","alias":"reece-white","url":"https://github.com/reece-white","imageURL":"https://github.com/reece-white.png","key":"reece-white","page":null},"Shreesh09":{"name":"Shreesh Nautiyal","alias":"Shreesh09","url":"https://github.com/Shreesh09","imageURL":"https://github.com/Shreesh09.png","key":"Shreesh09","page":null},"0420syj":{"name":"Wan Sim","alias":"0420syj","url":"https://github.com/0420syj","imageURL":"https://github.com/0420syj.png","key":"0420syj","page":null},"abhinandanwadwa":{"name":"Abhinandan Wadhwa","alias":"abhinandanwadwa","url":"https://github.com/abhinandanwadwa","imageURL":"https://github.com/abhinandanwadwa.png","key":"abhinandanwadwa","page":null},"Abinashbunty":{"name":"Abinash Satapathy","alias":"Abinashbunty","url":"https://github.com/Abinashbunty","imageURL":"https://github.com/Abinashbunty.png","key":"Abinashbunty","page":null},"adampatterson":{"name":"Adam Patterson","alias":"adampatterson","url":"https://github.com/adampatterson","imageURL":"https://github.com/adampatterson.png","key":"adampatterson","page":null},"adithyaakrishna":{"name":"Adithya Krishna","alias":"adithyaakrishna","url":"https://github.com/adithyaakrishna","imageURL":"https://github.com/adithyaakrishna.png","key":"adithyaakrishna","page":null},"AFRUITPIE":{"name":"Hayden Hong","alias":"AFRUITPIE","url":"https://github.com/AFRUITPIE","imageURL":"https://github.com/AFRUITPIE.png","key":"AFRUITPIE","page":null},"AgentEnder":{"name":"Craigory Coppola","alias":"AgentEnder","url":"https://github.com/AgentEnder","imageURL":"https://github.com/AgentEnder.png","key":"AgentEnder","page":null},"akshaybhalotia":{"name":"Akshay Bhalotia","alias":"akshaybhalotia","url":"https://github.com/akshaybhalotia","imageURL":"https://github.com/akshaybhalotia.png","key":"akshaybhalotia","page":null},"allyw2002":{"name":"allyw2002","alias":"allyw2002","url":"https://github.com/allyw2002","imageURL":"https://github.com/allyw2002.png","key":"allyw2002","page":null},"amdshrif":{"name":"Ahmad Shrif","alias":"amdshrif","url":"https://github.com/amdshrif","imageURL":"https://github.com/amdshrif.png","key":"amdshrif","page":null},"amm98d":{"name":"Ahmed Mustafa Malik","alias":"amm98d","url":"https://github.com/amm98d","imageURL":"https://github.com/amm98d.png","key":"amm98d","page":null},"anaclumos":{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos","page":null},"andrewnicols":{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols","page":null},"antonk52":{"name":"Anton Kastritskii","alias":"antonk52","url":"https://github.com/antonk52","imageURL":"https://github.com/antonk52.png","key":"antonk52","page":null},"antonyoni":{"name":"Antony Onipko","alias":"antonyoni","url":"https://github.com/antonyoni","imageURL":"https://github.com/antonyoni.png","key":"antonyoni","page":null},"aqueeb":{"name":"Aqueeb","alias":"aqueeb","url":"https://github.com/aqueeb","imageURL":"https://github.com/aqueeb.png","key":"aqueeb","page":null},"attitude":{"name":"Martin Adamko","alias":"attitude","url":"https://github.com/attitude","imageURL":"https://github.com/attitude.png","key":"attitude","page":null},"billy1624":{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624","page":null},"biplavmz":{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz","page":null},"bitpredator":{"name":"bitpredator","alias":"bitpredator","url":"https://github.com/bitpredator","imageURL":"https://github.com/bitpredator.png","key":"bitpredator","page":null},"BubbaJoe":{"name":"Joe Williams","alias":"BubbaJoe","url":"https://github.com/BubbaJoe","imageURL":"https://github.com/BubbaJoe.png","key":"BubbaJoe","page":null},"chillinPanda":{"name":"Dinh Bao Dang","alias":"chillinPanda","url":"https://github.com/chillinPanda","imageURL":"https://github.com/chillinPanda.png","key":"chillinPanda","page":null},"chubei":{"name":"Bei Chu","alias":"chubei","url":"https://github.com/chubei","imageURL":"https://github.com/chubei.png","key":"chubei","page":null},"chudongvip":{"name":"\u521d\u51ac","alias":"chudongvip","url":"https://github.com/chudongvip","imageURL":"https://github.com/chudongvip.png","key":"chudongvip","page":null},"cm-igarashi-ryosuke":{"name":"Ryosuke Igarashi","alias":"cm-igarashi-ryosuke","url":"https://github.com/cm-igarashi-ryosuke","imageURL":"https://github.com/cm-igarashi-ryosuke.png","key":"cm-igarashi-ryosuke","page":null},"colinhacks":{"name":"Colin McDonnell","alias":"colinhacks","url":"https://github.com/colinhacks","imageURL":"https://github.com/colinhacks.png","key":"colinhacks","page":null},"conlacda":{"name":"conlacda","alias":"conlacda","url":"https://github.com/conlacda","imageURL":"https://github.com/conlacda.png","key":"conlacda","page":null},"dandv":{"name":"Dan Dascalescu","alias":"dandv","url":"https://github.com/dandv","imageURL":"https://github.com/dandv.png","key":"dandv","page":null},"danilowoz":{"name":"Danilo Woznica","alias":"danilowoz","url":"https://github.com/danilowoz","imageURL":"https://github.com/danilowoz.png","key":"danilowoz","page":null},"DanRoscigno":{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno","page":null},"DavidJFelix":{"name":"David J. Felix","alias":"DavidJFelix","url":"https://github.com/DavidJFelix","imageURL":"https://github.com/DavidJFelix.png","key":"DavidJFelix","page":null},"debs-obrien":{"name":"Debbie O\'Brien","alias":"debs-obrien","url":"https://github.com/debs-obrien","imageURL":"https://github.com/debs-obrien.png","key":"debs-obrien","page":null},"Devansu-Yadav":{"name":"Devansu Yadav","alias":"Devansu-Yadav","url":"https://github.com/Devansu-Yadav","imageURL":"https://github.com/Devansu-Yadav.png","key":"Devansu-Yadav","page":null},"Djunnni":{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni","page":null},"Dr-Electron":{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron","page":null},"e-minguez":{"name":"Eduardo M\xednguez","alias":"e-minguez","url":"https://github.com/e-minguez","imageURL":"https://github.com/e-minguez.png","key":"e-minguez","page":null},"edno":{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno","page":null},"FlorinaPacurar":{"name":"FlorinaPacurar","alias":"FlorinaPacurar","url":"https://github.com/FlorinaPacurar","imageURL":"https://github.com/FlorinaPacurar.png","key":"FlorinaPacurar","page":null},"Foosballfan":{"name":"Charles Killer","alias":"Foosballfan","url":"https://github.com/Foosballfan","imageURL":"https://github.com/Foosballfan.png","key":"Foosballfan","page":null},"forresst":{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst","page":null},"FrancescoXX":{"name":"Francesco Ciulla","alias":"FrancescoXX","url":"https://github.com/FrancescoXX","imageURL":"https://github.com/FrancescoXX.png","key":"FrancescoXX","page":null},"fredrikstave":{"name":"Fredrik Stave","alias":"fredrikstave","url":"https://github.com/fredrikstave","imageURL":"https://github.com/fredrikstave.png","key":"fredrikstave","page":null},"fxpby":{"name":"Fxpby","alias":"fxpby","url":"https://github.com/fxpby","imageURL":"https://github.com/fxpby.png","key":"fxpby","page":null},"gabrielcsapo":{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo","page":null},"GalexyN":{"name":"Alexander Nguyen","alias":"GalexyN","url":"https://github.com/GalexyN","imageURL":"https://github.com/GalexyN.png","key":"GalexyN","page":null},"gazab":{"name":"Gustav Ton\xe9r","alias":"gazab","url":"https://github.com/gazab","imageURL":"https://github.com/gazab.png","key":"gazab","page":null},"gracefullight":{"name":"Eunkwang Shin","alias":"gracefullight","url":"https://github.com/gracefullight","imageURL":"https://github.com/gracefullight.png","key":"gracefullight","page":null},"gregberge":{"name":"Greg Berg\xe9","alias":"gregberge","url":"https://github.com/gregberge","imageURL":"https://github.com/gregberge.png","key":"gregberge","page":null},"heysujal":{"name":"Sujal Gupta","alias":"heysujal","url":"https://github.com/heysujal","imageURL":"https://github.com/heysujal.png","key":"heysujal","page":null},"hidde":{"name":"Hidde de Vries","alias":"hidde","url":"https://github.com/hidde","imageURL":"https://github.com/hidde.png","key":"hidde","page":null},"hslee2008":{"name":"Hyunseung","alias":"hslee2008","url":"https://github.com/hslee2008","imageURL":"https://github.com/hslee2008.png","key":"hslee2008","page":null},"HumbleDeer":{"name":"Anna","alias":"HumbleDeer","url":"https://github.com/HumbleDeer","imageURL":"https://github.com/HumbleDeer.png","key":"HumbleDeer","page":null},"HyeokjinKang":{"name":"Coupy","alias":"HyeokjinKang","url":"https://github.com/HyeokjinKang","imageURL":"https://github.com/HyeokjinKang.png","key":"HyeokjinKang","page":null},"jean-humann":{"name":"Jean Humann","alias":"jean-humann","url":"https://github.com/jean-humann","imageURL":"https://github.com/jean-humann.png","key":"jean-humann","page":null},"jeengbe":{"name":"Jesper Engberg","alias":"jeengbe","url":"https://github.com/jeengbe","imageURL":"https://github.com/jeengbe.png","key":"jeengbe","page":null},"jhcao23":{"name":"John Cao","alias":"jhcao23","url":"https://github.com/jhcao23","imageURL":"https://github.com/jhcao23.png","key":"jhcao23","page":null},"jj-style":{"name":"JJ Style","alias":"jj-style","url":"https://github.com/jj-style","imageURL":"https://github.com/jj-style.png","key":"jj-style","page":null},"jodyheavener":{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener","page":null},"JohnVicke":{"name":"Viktor Malmedal","alias":"JohnVicke","url":"https://github.com/JohnVicke","imageURL":"https://github.com/JohnVicke.png","key":"JohnVicke","page":null},"JorensM":{"name":"Jorens Merenjanu","alias":"JorensM","url":"https://github.com/JorensM","imageURL":"https://github.com/JorensM.png","key":"JorensM","page":null},"juanpicado":{"name":"Juan Picado","alias":"juanpicado","url":"https://github.com/juanpicado","imageURL":"https://github.com/juanpicado.png","key":"juanpicado","page":null},"KarthickSakthi":{"name":"0x24Karthick","alias":"KarthickSakthi","url":"https://github.com/KarthickSakthi","imageURL":"https://github.com/KarthickSakthi.png","key":"KarthickSakthi","page":null},"Kesyau":{"name":"Serenus","alias":"Kesyau","url":"https://github.com/Kesyau","imageURL":"https://github.com/Kesyau.png","key":"Kesyau","page":null},"knownasnaffy":{"name":"Naffy Dharni","alias":"knownasnaffy","url":"https://github.com/knownasnaffy","imageURL":"https://github.com/knownasnaffy.png","key":"knownasnaffy","page":null},"la55u":{"name":"la55u","alias":"la55u","url":"https://github.com/la55u","imageURL":"https://github.com/la55u.png","key":"la55u","page":null},"lanegoolsby":{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby","page":null},"layershifter":{"name":"Oleksandr Fediashov","alias":"layershifter","url":"https://github.com/layershifter","imageURL":"https://github.com/layershifter.png","key":"layershifter","page":null},"lex111":{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111","page":null},"lorenzolewis":{"name":"Lorenzo Lewis","alias":"lorenzolewis","url":"https://github.com/lorenzolewis","imageURL":"https://github.com/lorenzolewis.png","key":"lorenzolewis","page":null},"maliMirkec":{"name":"Silvestar Bistrovi\u0107","alias":"maliMirkec","url":"https://github.com/maliMirkec","imageURL":"https://github.com/maliMirkec.png","key":"maliMirkec","page":null},"manuel-rw":{"name":"Manuel","alias":"manuel-rw","url":"https://github.com/manuel-rw","imageURL":"https://github.com/manuel-rw.png","key":"manuel-rw","page":null},"MarkShawn2020":{"name":"Markshawn","alias":"MarkShawn2020","url":"https://github.com/MarkShawn2020","imageURL":"https://github.com/MarkShawn2020.png","key":"MarkShawn2020","page":null},"mcallisto":{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto","page":null},"mickremedi":{"name":"Michael Remediakis","alias":"mickremedi","url":"https://github.com/mickremedi","imageURL":"https://github.com/mickremedi.png","key":"mickremedi","page":null},"ModupeD":{"name":"ModupeD","alias":"ModupeD","url":"https://github.com/ModupeD","imageURL":"https://github.com/ModupeD.png","key":"ModupeD","page":null},"Mogyuchi":{"name":"Mogyuchi","alias":"Mogyuchi","url":"https://github.com/Mogyuchi","imageURL":"https://github.com/Mogyuchi.png","key":"Mogyuchi","page":null},"moojing":{"name":"Mu-Jing-Tsai","alias":"moojing","url":"https://github.com/moojing","imageURL":"https://github.com/moojing.png","key":"moojing","page":null},"mrazauskas":{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas","page":null},"mstroppel":{"name":"Marco Stroppel","alias":"mstroppel","url":"https://github.com/mstroppel","imageURL":"https://github.com/mstroppel.png","key":"mstroppel","page":null},"Mysterious-Dev":{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev","page":null},"NamanGarg2075":{"name":"Naman Garg","alias":"NamanGarg2075","url":"https://github.com/NamanGarg2075","imageURL":"https://github.com/NamanGarg2075.png","key":"NamanGarg2075","page":null},"ntucker":{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker","page":null},"oluwatobiss":{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss","page":null},"palmiak":{"name":"Maciek Palmowski","alias":"palmiak","url":"https://github.com/palmiak","imageURL":"https://github.com/palmiak.png","key":"palmiak","page":null},"PaulRBerg":{"name":"Paul Razvan Berg","alias":"PaulRBerg","url":"https://github.com/PaulRBerg","imageURL":"https://github.com/PaulRBerg.png","key":"PaulRBerg","page":null},"pinakipb2":{"name":"Pinaki Bhattacharjee","alias":"pinakipb2","url":"https://github.com/pinakipb2","imageURL":"https://github.com/pinakipb2.png","key":"pinakipb2","page":null},"prateekbytes":{"name":"prateekbytes","alias":"prateekbytes","url":"https://github.com/prateekbytes","imageURL":"https://github.com/prateekbytes.png","key":"prateekbytes","page":null},"qwerzl":{"name":"qwerzl","alias":"qwerzl","url":"https://github.com/qwerzl","imageURL":"https://github.com/qwerzl.png","key":"qwerzl","page":null},"rashidmya":{"name":"Rashid","alias":"rashidmya","url":"https://github.com/rashidmya","imageURL":"https://github.com/rashidmya.png","key":"rashidmya","page":null},"razzeee":{"name":"Kolja","alias":"razzeee","url":"https://github.com/razzeee","imageURL":"https://github.com/razzeee.png","key":"razzeee","page":null},"rbarbazz":{"name":"Rapha\xebl Barbazza","alias":"rbarbazz","url":"https://github.com/rbarbazz","imageURL":"https://github.com/rbarbazz.png","key":"rbarbazz","page":null},"recallwei":{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei","page":null},"rojakcoder":{"name":"Chua Chee How","alias":"rojakcoder","url":"https://github.com/rojakcoder","imageURL":"https://github.com/rojakcoder.png","key":"rojakcoder","page":null},"rsteele6":{"name":"rsteele6","alias":"rsteele6","url":"https://github.com/rsteele6","imageURL":"https://github.com/rsteele6.png","key":"rsteele6","page":null},"sadikkuzu":{"name":"SADIK KUZU","alias":"sadikkuzu","url":"https://github.com/sadikkuzu","imageURL":"https://github.com/sadikkuzu.png","key":"sadikkuzu","page":null},"Sainan":{"name":"Sainan","alias":"Sainan","url":"https://github.com/Sainan","imageURL":"https://github.com/Sainan.png","key":"Sainan","page":null},"samatt14":{"name":"samatt14","alias":"samatt14","url":"https://github.com/samatt14","imageURL":"https://github.com/samatt14.png","key":"samatt14","page":null},"sashashura":{"name":"Alex","alias":"sashashura","url":"https://github.com/sashashura","imageURL":"https://github.com/sashashura.png","key":"sashashura","page":null},"schneegansm":{"name":"Marie","alias":"schneegansm","url":"https://github.com/schneegansm","imageURL":"https://github.com/schneegansm.png","key":"schneegansm","page":null},"scubamaggo":{"name":"Marco Kuper","alias":"scubamaggo","url":"https://github.com/scubamaggo","imageURL":"https://github.com/scubamaggo.png","key":"scubamaggo","page":null},"ShahriarKh":{"name":"Shahriar","alias":"ShahriarKh","url":"https://github.com/ShahriarKh","imageURL":"https://github.com/ShahriarKh.png","key":"ShahriarKh","page":null},"shawshankkumar":{"name":"Shashank Kumar","alias":"shawshankkumar","url":"https://github.com/shawshankkumar","imageURL":"https://github.com/shawshankkumar.png","key":"shawshankkumar","page":null},"shortcuts":{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts","page":null},"shwaka":{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka","page":null},"sixhobbits":{"name":"Gareth Dwyer","alias":"sixhobbits","url":"https://github.com/sixhobbits","imageURL":"https://github.com/sixhobbits.png","key":"sixhobbits","page":null},"suravshrestha":{"name":"Surav Shrestha","alias":"suravshrestha","url":"https://github.com/suravshrestha","imageURL":"https://github.com/suravshrestha.png","key":"suravshrestha","page":null},"sykp241095":{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095","page":null},"tamalchowdhury":{"name":"Tamal Anwar Chowdhury","alias":"tamalchowdhury","url":"https://github.com/tamalchowdhury","imageURL":"https://github.com/tamalchowdhury.png","key":"tamalchowdhury","page":null},"tarunrajput":{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput","page":null},"thadguidry":{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry","page":null},"thatrobotdev":{"name":"James Kerrane","alias":"thatrobotdev","url":"https://github.com/thatrobotdev","imageURL":"https://github.com/thatrobotdev.png","key":"thatrobotdev","page":null},"thedevwonder":{"name":"thedevwonder","alias":"thedevwonder","url":"https://github.com/thedevwonder","imageURL":"https://github.com/thedevwonder.png","key":"thedevwonder","page":null},"Villanuevand":{"name":"Andr\xe9s Villanueva","alias":"Villanuevand","url":"https://github.com/Villanuevand","imageURL":"https://github.com/Villanuevand.png","key":"Villanuevand","page":null},"VinceCYLiao":{"name":"VinceCYLiao","alias":"VinceCYLiao","url":"https://github.com/VinceCYLiao","imageURL":"https://github.com/VinceCYLiao.png","key":"VinceCYLiao","page":null},"waldyrious":{"name":"Waldir Pimenta","alias":"waldyrious","url":"https://github.com/waldyrious","imageURL":"https://github.com/waldyrious.png","key":"waldyrious","page":null},"wceolin":{"name":"Will Ceolin","alias":"wceolin","url":"https://github.com/wceolin","imageURL":"https://github.com/wceolin.png","key":"wceolin","page":null},"webbertakken":{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken","page":null},"werner33":{"name":"Jordan Manley","alias":"werner33","url":"https://github.com/werner33","imageURL":"https://github.com/werner33.png","key":"werner33","page":null},"yangshun":{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null},"yosukekato165":{"name":"yosukekato165","alias":"yosukekato165","url":"https://github.com/yosukekato165","imageURL":"https://github.com/yosukekato165.png","key":"yosukekato165","page":null},"ori-shalom":{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom","page":null},"TheCatLady":{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady","page":null},"armano2":{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2","page":null},"LiberaTeMetuMortis":{"name":"MetuMortis","alias":"LiberaTeMetuMortis","url":"https://github.com/LiberaTeMetuMortis","imageURL":"https://github.com/LiberaTeMetuMortis.png","key":"LiberaTeMetuMortis","page":null},"morsko1":{"name":"Aleksandr Vladykin","alias":"morsko1","url":"https://github.com/morsko1","imageURL":"https://github.com/morsko1.png","key":"morsko1","page":null},"SACHINnANYAKKARA":{"name":"Sachin Nanayakkara","alias":"SACHINnANYAKKARA","url":"https://github.com/SACHINnANYAKKARA","imageURL":"https://github.com/SACHINnANYAKKARA.png","key":"SACHINnANYAKKARA","page":null},"Anasqx":{"name":"Anas","alias":"Anasqx","url":"https://github.com/Anasqx","imageURL":"https://github.com/Anasqx.png","key":"Anasqx","page":null},"dewanshDT":{"name":"Dewansh Thakur","alias":"dewanshDT","url":"https://github.com/dewanshDT","imageURL":"https://github.com/dewanshDT.png","key":"dewanshDT","page":null},"dr0nn1":{"name":"Petter Dr\xf8nnen","alias":"dr0nn1","url":"https://github.com/dr0nn1","imageURL":"https://github.com/dr0nn1.png","key":"dr0nn1","page":null},"kagankan":{"name":"Kagan","alias":"kagankan","url":"https://github.com/kagankan","imageURL":"https://github.com/kagankan.png","key":"kagankan","page":null},"pReya":{"name":"Moritz St\xfcckler","alias":"pReya","url":"https://github.com/pReya","imageURL":"https://github.com/pReya.png","key":"pReya","page":null},"tannerdolby":{"name":"Tanner Dolby","alias":"tannerdolby","url":"https://github.com/tannerdolby","imageURL":"https://github.com/tannerdolby.png","key":"tannerdolby","page":null},"trueqap":{"name":"TrueQAP","alias":"trueqap","url":"https://github.com/trueqap","imageURL":"https://github.com/trueqap.png","key":"trueqap","page":null},"Vishruta-Patil":{"name":"Vishruta Patil","alias":"Vishruta-Patil","url":"https://github.com/Vishruta-Patil","imageURL":"https://github.com/Vishruta-Patil.png","key":"Vishruta-Patil","page":null},"ZarakiKanzaki":{"name":"Davide Donadio","alias":"ZarakiKanzaki","url":"https://github.com/ZarakiKanzaki","imageURL":"https://github.com/ZarakiKanzaki.png","key":"ZarakiKanzaki","page":null},"scastiel":{"name":"S\xe9bastien Castiel","alias":"scastiel","url":"https://github.com/scastiel","imageURL":"https://github.com/scastiel.png","key":"scastiel","page":null},"0916dhkim":{"name":"Danny Kim","alias":"0916dhkim","url":"https://github.com/0916dhkim","imageURL":"https://github.com/0916dhkim.png","key":"0916dhkim","page":null},"3v0k4":{"name":"Riccardo","alias":"3v0k4","url":"https://github.com/3v0k4","imageURL":"https://github.com/3v0k4.png","key":"3v0k4","page":null},"denis-alkhelali":{"name":"Denis Al-Khelali","alias":"denis-alkhelali","url":"https://github.com/denis-alkhelali","imageURL":"https://github.com/denis-alkhelali.png","key":"denis-alkhelali","page":null},"friederbluemle":{"name":"Frieder Bluemle","alias":"friederbluemle","url":"https://github.com/friederbluemle","imageURL":"https://github.com/friederbluemle.png","key":"friederbluemle","page":null},"JoshuaKGoldberg":{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg","page":null},"lachieh":{"name":"Lachlan Heywood","alias":"lachieh","url":"https://github.com/lachieh","imageURL":"https://github.com/lachieh.png","key":"lachieh","page":null},"MatijaSi":{"name":"Matija Sirk","alias":"MatijaSi","url":"https://github.com/MatijaSi","imageURL":"https://github.com/MatijaSi.png","key":"MatijaSi","page":null},"mhnaeem":{"name":"Muhammad Hammad","alias":"mhnaeem","url":"https://github.com/mhnaeem","imageURL":"https://github.com/mhnaeem.png","key":"mhnaeem","page":null},"mturoci":{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci","page":null},"SJFCS":{"name":"\u5b8b\u9526\u4e30","alias":"SJFCS","url":"https://github.com/SJFCS","imageURL":"https://github.com/SJFCS.png","key":"SJFCS","page":null},"stnor":{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor","page":null},"Thomascogez":{"name":"Thomas.CA","alias":"Thomascogez","url":"https://github.com/Thomascogez","imageURL":"https://github.com/Thomascogez.png","key":"Thomascogez","page":null},"adnanhashmi09":{"name":"Adnan Hashmi","alias":"adnanhashmi09","url":"https://github.com/adnanhashmi09","imageURL":"https://github.com/adnanhashmi09.png","key":"adnanhashmi09","page":null},"birjj":{"name":"Johan Fagerberg","alias":"birjj","url":"https://github.com/birjj","imageURL":"https://github.com/birjj.png","key":"birjj","page":null},"e-im":{"name":"evan","alias":"e-im","url":"https://github.com/e-im","imageURL":"https://github.com/e-im.png","key":"e-im","page":null},"forgeRW":{"name":"forgeRW","alias":"forgeRW","url":"https://github.com/forgeRW","imageURL":"https://github.com/forgeRW.png","key":"forgeRW","page":null},"jeferson-sb":{"name":"Jeferson S. Brito","alias":"jeferson-sb","url":"https://github.com/jeferson-sb","imageURL":"https://github.com/jeferson-sb.png","key":"jeferson-sb","page":null},"JPeer264":{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264","page":null},"LittleboyHarry":{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry","page":null},"pasora":{"name":"Masahiko Hara","alias":"pasora","url":"https://github.com/pasora","imageURL":"https://github.com/pasora.png","key":"pasora","page":null},"Pranav2612000":{"name":"Pranav Joglekar","alias":"Pranav2612000","url":"https://github.com/Pranav2612000","imageURL":"https://github.com/Pranav2612000.png","key":"Pranav2612000","page":null},"ramazansancar":{"name":"Ramazan SANCAR","alias":"ramazansancar","url":"https://github.com/ramazansancar","imageURL":"https://github.com/ramazansancar.png","key":"ramazansancar","page":null},"shanpriyan":{"name":"Shanmughapriyan S","alias":"shanpriyan","url":"https://github.com/shanpriyan","imageURL":"https://github.com/shanpriyan.png","key":"shanpriyan","page":null},"sjwall":{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall","page":null},"Xabilahu":{"name":"Xabier Lahuerta Vazquez","alias":"Xabilahu","url":"https://github.com/Xabilahu","imageURL":"https://github.com/Xabilahu.png","key":"Xabilahu","page":null},"adventure-yunfei":{"name":"adventure-yunfei","alias":"adventure-yunfei","url":"https://github.com/adventure-yunfei","imageURL":"https://github.com/adventure-yunfei.png","key":"adventure-yunfei","page":null},"b-ovsepian":{"name":"Bagdasar Ovsepyan","alias":"b-ovsepian","url":"https://github.com/b-ovsepian","imageURL":"https://github.com/b-ovsepian.png","key":"b-ovsepian","page":null},"datlechin":{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin","page":null},"Kosai106":{"name":"Kevin \xd8sterkilde","alias":"Kosai106","url":"https://github.com/Kosai106","imageURL":"https://github.com/Kosai106.png","key":"Kosai106","page":null},"mdubus":{"name":"Morgane Dubus","alias":"mdubus","url":"https://github.com/mdubus","imageURL":"https://github.com/mdubus.png","key":"mdubus","page":null},"whiteand":{"name":"whiteand","alias":"whiteand","url":"https://github.com/whiteand","imageURL":"https://github.com/whiteand.png","key":"whiteand","page":null},"YoniChechik":{"name":"Yoni Chechik","alias":"YoniChechik","url":"https://github.com/YoniChechik","imageURL":"https://github.com/YoniChechik.png","key":"YoniChechik","page":null},"yzhe819":{"name":"yzhe819","alias":"yzhe819","url":"https://github.com/yzhe819","imageURL":"https://github.com/yzhe819.png","key":"yzhe819","page":null},"DigiPie":{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie","page":null},"Gary50613":{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613","page":null},"ghostsquad":{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad","page":null},"jeffreyaven":{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven","page":null},"LichLord91":{"name":"LichLord91","alias":"LichLord91","url":"https://github.com/LichLord91","imageURL":"https://github.com/LichLord91.png","key":"LichLord91","page":null},"RoiArthurB":{"name":"Arthur Brugi\xe8re","alias":"RoiArthurB","url":"https://github.com/RoiArthurB","imageURL":"https://github.com/RoiArthurB.png","key":"RoiArthurB","page":null},"treoden":{"name":"The Nguyen","alias":"treoden","url":"https://github.com/treoden","imageURL":"https://github.com/treoden.png","key":"treoden","page":null},"201flaviosilva":{"name":"Fl\xe1vio Silva","alias":"201flaviosilva","url":"https://github.com/201flaviosilva","imageURL":"https://github.com/201flaviosilva.png","key":"201flaviosilva","page":null},"7Wate":{"name":"7Wate","alias":"7Wate","url":"https://github.com/7Wate","imageURL":"https://github.com/7Wate.png","key":"7Wate","page":null},"AkagiYui":{"name":"\u8d64\u57ce\u7ed3\u8863","alias":"AkagiYui","url":"https://github.com/AkagiYui","imageURL":"https://github.com/AkagiYui.png","key":"AkagiYui","page":null},"alewolf":{"name":"alewolf","alias":"alewolf","url":"https://github.com/alewolf","imageURL":"https://github.com/alewolf.png","key":"alewolf","page":null},"alexandernst":{"name":"Alexander Nestorov","alias":"alexandernst","url":"https://github.com/alexandernst","imageURL":"https://github.com/alexandernst.png","key":"alexandernst","page":null},"Altomy":{"name":"Ahmed Altomy","alias":"Altomy","url":"https://github.com/Altomy","imageURL":"https://github.com/Altomy.png","key":"Altomy","page":null},"bcabanes":{"name":"Benjamin Cabanes","alias":"bcabanes","url":"https://github.com/bcabanes","imageURL":"https://github.com/bcabanes.png","key":"bcabanes","page":null},"BenDMyers":{"name":"Ben Myers","alias":"BenDMyers","url":"https://github.com/BenDMyers","imageURL":"https://github.com/BenDMyers.png","key":"BenDMyers","page":null},"Boulet-":{"name":"Boulet","alias":"Boulet-","url":"https://github.com/Boulet-","imageURL":"https://github.com/Boulet-.png","key":"Boulet-","page":null},"cbebe":{"name":"Charles Ancheta","alias":"cbebe","url":"https://github.com/cbebe","imageURL":"https://github.com/cbebe.png","key":"cbebe","page":null},"clemiee":{"name":"Clemie McCartney","alias":"clemiee","url":"https://github.com/clemiee","imageURL":"https://github.com/clemiee.png","key":"clemiee","page":null},"DharsanB":{"name":"Dharsan B","alias":"DharsanB","url":"https://github.com/DharsanB","imageURL":"https://github.com/DharsanB.png","key":"DharsanB","page":null},"dht":{"name":"dht","alias":"dht","url":"https://github.com/dht","imageURL":"https://github.com/dht.png","key":"dht","page":null},"difranca":{"name":"Diego Fran\xe7a","alias":"difranca","url":"https://github.com/difranca","imageURL":"https://github.com/difranca.png","key":"difranca","page":null},"dpang314":{"name":"dpang314","alias":"dpang314","url":"https://github.com/dpang314","imageURL":"https://github.com/dpang314.png","key":"dpang314","page":null},"emattia":{"name":"emattia","alias":"emattia","url":"https://github.com/emattia","imageURL":"https://github.com/emattia.png","key":"emattia","page":null},"HyunseungLee-Travis":{"name":"Hyunseung Lee","alias":"HyunseungLee-Travis","url":"https://github.com/HyunseungLee-Travis","imageURL":"https://github.com/HyunseungLee-Travis.png","key":"HyunseungLee-Travis","page":null},"JeremyDolle":{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle","page":null},"johnie":{"name":"Johnie Hjelm","alias":"johnie","url":"https://github.com/johnie","imageURL":"https://github.com/johnie.png","key":"johnie","page":null},"jpdriver":{"name":"JP","alias":"jpdriver","url":"https://github.com/jpdriver","imageURL":"https://github.com/jpdriver.png","key":"jpdriver","page":null},"jqshuv":{"name":"Joshua Schmitt","alias":"jqshuv","url":"https://github.com/jqshuv","imageURL":"https://github.com/jqshuv.png","key":"jqshuv","page":null},"kursatsmsek":{"name":"K\xfcr\u015fat \u015eim\u015fek","alias":"kursatsmsek","url":"https://github.com/kursatsmsek","imageURL":"https://github.com/kursatsmsek.png","key":"kursatsmsek","page":null},"matkoch":{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch","page":null},"metal-young":{"name":"\u674e\u5c0f\u96e8","alias":"metal-young","url":"https://github.com/metal-young","imageURL":"https://github.com/metal-young.png","key":"metal-young","page":null},"pincman":{"name":"pincman","alias":"pincman","url":"https://github.com/pincman","imageURL":"https://github.com/pincman.png","key":"pincman","page":null},"redcamel":{"name":"Redcamel","alias":"redcamel","url":"https://github.com/redcamel","imageURL":"https://github.com/redcamel.png","key":"redcamel","page":null},"reinvanhaaren":{"name":"Rein van Haaren","alias":"reinvanhaaren","url":"https://github.com/reinvanhaaren","imageURL":"https://github.com/reinvanhaaren.png","key":"reinvanhaaren","page":null},"RudraSen2":{"name":"Rudra Sen","alias":"RudraSen2","url":"https://github.com/RudraSen2","imageURL":"https://github.com/RudraSen2.png","key":"RudraSen2","page":null},"sado0823":{"name":"sado","alias":"sado0823","url":"https://github.com/sado0823","imageURL":"https://github.com/sado0823.png","key":"sado0823","page":null},"saosangmo":{"name":"Dzung Do","alias":"saosangmo","url":"https://github.com/saosangmo","imageURL":"https://github.com/saosangmo.png","key":"saosangmo","page":null},"scopsy":{"name":"Dima Grossman","alias":"scopsy","url":"https://github.com/scopsy","imageURL":"https://github.com/scopsy.png","key":"scopsy","page":null},"SheetJSDev":{"name":"SheetJSDev","alias":"SheetJSDev","url":"https://github.com/SheetJSDev","imageURL":"https://github.com/SheetJSDev.png","key":"SheetJSDev","page":null},"sigwinch28":{"name":"Joe Harrison","alias":"sigwinch28","url":"https://github.com/sigwinch28","imageURL":"https://github.com/sigwinch28.png","key":"sigwinch28","page":null},"Smilefounder":{"name":"Huy Nguyen","alias":"Smilefounder","url":"https://github.com/Smilefounder","imageURL":"https://github.com/Smilefounder.png","key":"Smilefounder","page":null},"sserrata":{"name":"Steven Serrata","alias":"sserrata","url":"https://github.com/sserrata","imageURL":"https://github.com/sserrata.png","key":"sserrata","page":null},"szilarddoro":{"name":"Szil\xe1rd D\xf3r\xf3","alias":"szilarddoro","url":"https://github.com/szilarddoro","imageURL":"https://github.com/szilarddoro.png","key":"szilarddoro","page":null},"vannyle":{"name":"Le Thi Van","alias":"vannyle","url":"https://github.com/vannyle","imageURL":"https://github.com/vannyle.png","key":"vannyle","page":null},"zpao":{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao","page":null},"BenDz":{"name":"Benjamin Diolez","alias":"BenDz","url":"https://github.com/BenDz","imageURL":"https://github.com/BenDz.png","key":"BenDz","page":null},"charleskorn":{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn","page":null},"Designatory":{"name":"Designatory","alias":"Designatory","url":"https://github.com/Designatory","imageURL":"https://github.com/Designatory.png","key":"Designatory","page":null},"ggicci":{"name":"Ggicci","alias":"ggicci","url":"https://github.com/ggicci","imageURL":"https://github.com/ggicci.png","key":"ggicci","page":null},"jrmyw92":{"name":"Jeremy","alias":"jrmyw92","url":"https://github.com/jrmyw92","imageURL":"https://github.com/jrmyw92.png","key":"jrmyw92","page":null},"junjieweb":{"name":"Junjie","alias":"junjieweb","url":"https://github.com/junjieweb","imageURL":"https://github.com/junjieweb.png","key":"junjieweb","page":null},"massoudmaboudi":{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi","page":null},"Messiahhh":{"name":"Akara","alias":"Messiahhh","url":"https://github.com/Messiahhh","imageURL":"https://github.com/Messiahhh.png","key":"Messiahhh","page":null},"mhughes2k":{"name":"Michael Hughes","alias":"mhughes2k","url":"https://github.com/mhughes2k","imageURL":"https://github.com/mhughes2k.png","key":"mhughes2k","page":null},"nitya":{"name":"Nitya Narasimhan","alias":"nitya","url":"https://github.com/nitya","imageURL":"https://github.com/nitya.png","key":"nitya","page":null},"pranabdas":{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas","page":null},"RuiAAPeres":{"name":"Rui Peres","alias":"RuiAAPeres","url":"https://github.com/RuiAAPeres","imageURL":"https://github.com/RuiAAPeres.png","key":"RuiAAPeres","page":null},"Zamiell":{"name":"James","alias":"Zamiell","url":"https://github.com/Zamiell","imageURL":"https://github.com/Zamiell.png","key":"Zamiell","page":null},"pepopowitz":{"name":"Steven Hicks","alias":"pepopowitz","url":"https://github.com/pepopowitz","imageURL":"https://github.com/pepopowitz.png","key":"pepopowitz","page":null},"RDIL":{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL","page":null},"sgromkov":{"name":"Sergey Gromkov","alias":"sgromkov","url":"https://github.com/sgromkov","imageURL":"https://github.com/sgromkov.png","key":"sgromkov","page":null},"aerovulpe":{"name":"Aaron Nwabuoku","alias":"aerovulpe","url":"https://github.com/aerovulpe","imageURL":"https://github.com/aerovulpe.png","key":"aerovulpe","page":null},"AkiraVoid":{"name":"AkiraVoid","alias":"AkiraVoid","url":"https://github.com/AkiraVoid","imageURL":"https://github.com/AkiraVoid.png","key":"AkiraVoid","page":null},"AntonPalmqvist":{"name":"apq","alias":"AntonPalmqvist","url":"https://github.com/AntonPalmqvist","imageURL":"https://github.com/AntonPalmqvist.png","key":"AntonPalmqvist","page":null},"ApsarasX":{"name":"ApsarasX","alias":"ApsarasX","url":"https://github.com/ApsarasX","imageURL":"https://github.com/ApsarasX.png","key":"ApsarasX","page":null},"chelproc":{"name":"chelproc","alias":"chelproc","url":"https://github.com/chelproc","imageURL":"https://github.com/chelproc.png","key":"chelproc","page":null},"chernodub":{"name":"Viktor Chernodub","alias":"chernodub","url":"https://github.com/chernodub","imageURL":"https://github.com/chernodub.png","key":"chernodub","page":null},"CuratorCat":{"name":"curatorcat.pcc.eth","alias":"CuratorCat","url":"https://github.com/CuratorCat","imageURL":"https://github.com/CuratorCat.png","key":"CuratorCat","page":null},"cwen0":{"name":"Cwen Yin","alias":"cwen0","url":"https://github.com/cwen0","imageURL":"https://github.com/cwen0.png","key":"cwen0","page":null},"cxOrz":{"name":"Fusang\u2740","alias":"cxOrz","url":"https://github.com/cxOrz","imageURL":"https://github.com/cxOrz.png","key":"cxOrz","page":null},"deiucanta":{"name":"Andrei Canta","alias":"deiucanta","url":"https://github.com/deiucanta","imageURL":"https://github.com/deiucanta.png","key":"deiucanta","page":null},"deployn":{"name":"deployn","alias":"deployn","url":"https://github.com/deployn","imageURL":"https://github.com/deployn.png","key":"deployn","page":null},"dr-ngubo":{"name":"Chinazaekpere Ngubo","alias":"dr-ngubo","url":"https://github.com/dr-ngubo","imageURL":"https://github.com/dr-ngubo.png","key":"dr-ngubo","page":null},"duanwilliam":{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam","page":null},"elias-pap":{"name":"Elias Papavasileiou","alias":"elias-pap","url":"https://github.com/elias-pap","imageURL":"https://github.com/elias-pap.png","key":"elias-pap","page":null},"imsingh":{"name":"Indermohan Singh","alias":"imsingh","url":"https://github.com/imsingh","imageURL":"https://github.com/imsingh.png","key":"imsingh","page":null},"JohnnyMcWeed":{"name":"JMW","alias":"JohnnyMcWeed","url":"https://github.com/JohnnyMcWeed","imageURL":"https://github.com/JohnnyMcWeed.png","key":"JohnnyMcWeed","page":null},"kaycebasques":{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques","page":null},"kgolubic":{"name":"kgolubic","alias":"kgolubic","url":"https://github.com/kgolubic","imageURL":"https://github.com/kgolubic.png","key":"kgolubic","page":null},"layerzzzio":{"name":"loic","alias":"layerzzzio","url":"https://github.com/layerzzzio","imageURL":"https://github.com/layerzzzio.png","key":"layerzzzio","page":null},"leedom92":{"name":"Leedom","alias":"leedom92","url":"https://github.com/leedom92","imageURL":"https://github.com/leedom92.png","key":"leedom92","page":null},"LeviticusMB":{"name":"Martin Blom","alias":"LeviticusMB","url":"https://github.com/LeviticusMB","imageURL":"https://github.com/LeviticusMB.png","key":"LeviticusMB","page":null},"lukasbach":{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach","page":null},"mjau-mjau":{"name":"Karl Ward","alias":"mjau-mjau","url":"https://github.com/mjau-mjau","imageURL":"https://github.com/mjau-mjau.png","key":"mjau-mjau","page":null},"mxhdx":{"name":"mehdim","alias":"mxhdx","url":"https://github.com/mxhdx","imageURL":"https://github.com/mxhdx.png","key":"mxhdx","page":null},"nartc":{"name":"Chau Tran","alias":"nartc","url":"https://github.com/nartc","imageURL":"https://github.com/nartc.png","key":"nartc","page":null},"naveensrinivasan":{"name":"Naveen","alias":"naveensrinivasan","url":"https://github.com/naveensrinivasan","imageURL":"https://github.com/naveensrinivasan.png","key":"naveensrinivasan","page":null},"pcordon":{"name":"Pablo Cordon","alias":"pcordon","url":"https://github.com/pcordon","imageURL":"https://github.com/pcordon.png","key":"pcordon","page":null},"phryneas":{"name":"Lenz Weber-Tronic","alias":"phryneas","url":"https://github.com/phryneas","imageURL":"https://github.com/phryneas.png","key":"phryneas","page":null},"Pierre-Gilles":{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles","page":null},"redhat123456":{"name":"redhat123456","alias":"redhat123456","url":"https://github.com/redhat123456","imageURL":"https://github.com/redhat123456.png","key":"redhat123456","page":null},"rev4324":{"name":"rev","alias":"rev4324","url":"https://github.com/rev4324","imageURL":"https://github.com/rev4324.png","key":"rev4324","page":null},"sandypockets":{"name":"Zac A","alias":"sandypockets","url":"https://github.com/sandypockets","imageURL":"https://github.com/sandypockets.png","key":"sandypockets","page":null},"shczhen":{"name":"czhen","alias":"shczhen","url":"https://github.com/shczhen","imageURL":"https://github.com/shczhen.png","key":"shczhen","page":null},"sulu5890":{"name":"Evan","alias":"sulu5890","url":"https://github.com/sulu5890","imageURL":"https://github.com/sulu5890.png","key":"sulu5890","page":null},"surendran82":{"name":"surendran82","alias":"surendran82","url":"https://github.com/surendran82","imageURL":"https://github.com/surendran82.png","key":"surendran82","page":null},"svix-ken":{"name":"svix-ken","alias":"svix-ken","url":"https://github.com/svix-ken","imageURL":"https://github.com/svix-ken.png","key":"svix-ken","page":null},"zzzhangqi":{"name":"Qi Zhang","alias":"zzzhangqi","url":"https://github.com/zzzhangqi","imageURL":"https://github.com/zzzhangqi.png","key":"zzzhangqi","page":null},"afonsojramos":{"name":"Afonso Jorge Ramos","alias":"afonsojramos","url":"https://github.com/afonsojramos","imageURL":"https://github.com/afonsojramos.png","key":"afonsojramos","page":null},"alefesta":{"name":"Alessandro Festa","alias":"alefesta","url":"https://github.com/alefesta","imageURL":"https://github.com/alefesta.png","key":"alefesta","page":null},"aloisklink":{"name":"Alois Klink","alias":"aloisklink","url":"https://github.com/aloisklink","imageURL":"https://github.com/aloisklink.png","key":"aloisklink","page":null},"arifszn":{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn","page":null},"dragomano":{"name":"Bugo","alias":"dragomano","url":"https://github.com/dragomano","imageURL":"https://github.com/dragomano.png","key":"dragomano","page":null},"felipecrs":{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs","page":null},"hand-dot":{"name":"Kyohei Fukuda","alias":"hand-dot","url":"https://github.com/hand-dot","imageURL":"https://github.com/hand-dot.png","key":"hand-dot","page":null},"heowc":{"name":"WonChul Heo","alias":"heowc","url":"https://github.com/heowc","imageURL":"https://github.com/heowc.png","key":"heowc","page":null},"jadonn":{"name":"Jadon N","alias":"jadonn","url":"https://github.com/jadonn","imageURL":"https://github.com/jadonn.png","key":"jadonn","page":null},"jrvidal":{"name":"Roberto Vidal","alias":"jrvidal","url":"https://github.com/jrvidal","imageURL":"https://github.com/jrvidal.png","key":"jrvidal","page":null},"moonrailgun":{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun","page":null},"nathan-contino-mongo":{"name":"nate contino","alias":"nathan-contino-mongo","url":"https://github.com/nathan-contino-mongo","imageURL":"https://github.com/nathan-contino-mongo.png","key":"nathan-contino-mongo","page":null},"odarpi":{"name":"Odarpi","alias":"odarpi","url":"https://github.com/odarpi","imageURL":"https://github.com/odarpi.png","key":"odarpi","page":null},"PatelN123":{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123","page":null},"pkowaluk":{"name":"Pawel Kowaluk","alias":"pkowaluk","url":"https://github.com/pkowaluk","imageURL":"https://github.com/pkowaluk.png","key":"pkowaluk","page":null},"rccttwd":{"name":"Tsz W. TAM","alias":"rccttwd","url":"https://github.com/rccttwd","imageURL":"https://github.com/rccttwd.png","key":"rccttwd","page":null},"samgutentag":{"name":"Sam Gutentag","alias":"samgutentag","url":"https://github.com/samgutentag","imageURL":"https://github.com/samgutentag.png","key":"samgutentag","page":null},"seladb":{"name":"seladb","alias":"seladb","url":"https://github.com/seladb","imageURL":"https://github.com/seladb.png","key":"seladb","page":null},"taejs":{"name":"tae","alias":"taejs","url":"https://github.com/taejs","imageURL":"https://github.com/taejs.png","key":"taejs","page":null},"vedantmgoyal2009":{"name":"Begula","alias":"vedantmgoyal2009","url":"https://github.com/vedantmgoyal2009","imageURL":"https://github.com/vedantmgoyal2009.png","key":"vedantmgoyal2009","page":null},"yorkie":{"name":"Yorkie Liu","alias":"yorkie","url":"https://github.com/yorkie","imageURL":"https://github.com/yorkie.png","key":"yorkie","page":null},"anicholls":{"name":"Alex Nicholls","alias":"anicholls","url":"https://github.com/anicholls","imageURL":"https://github.com/anicholls.png","key":"anicholls","page":null},"dmitryvinn":{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn","page":null},"dstotijn":{"name":"David Stotijn","alias":"dstotijn","url":"https://github.com/dstotijn","imageURL":"https://github.com/dstotijn.png","key":"dstotijn","page":null},"vaibhavshn":{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn","page":null},"apidev234":{"name":"Gaurish","alias":"apidev234","url":"https://github.com/apidev234","imageURL":"https://github.com/apidev234.png","key":"apidev234","page":null},"artemkovalyov":{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov","page":null},"BigDataWriter":{"name":"BigDataWriter","alias":"BigDataWriter","url":"https://github.com/BigDataWriter","imageURL":"https://github.com/BigDataWriter.png","key":"BigDataWriter","page":null},"cdemonchy-pro":{"name":"Clement Demonchy","alias":"cdemonchy-pro","url":"https://github.com/cdemonchy-pro","imageURL":"https://github.com/cdemonchy-pro.png","key":"cdemonchy-pro","page":null},"CookieJarApps":{"name":"CookieJarApps","alias":"CookieJarApps","url":"https://github.com/CookieJarApps","imageURL":"https://github.com/CookieJarApps.png","key":"CookieJarApps","page":null},"dmitryvinn-fb":{"name":"Dmitry Vinnik | Meta","alias":"dmitryvinn-fb","url":"https://github.com/dmitryvinn-fb","imageURL":"https://github.com/dmitryvinn-fb.png","key":"dmitryvinn-fb","page":null},"ebarojas":{"name":"Everardo J. Barojas M.","alias":"ebarojas","url":"https://github.com/ebarojas","imageURL":"https://github.com/ebarojas.png","key":"ebarojas","page":null},"erickzhao":{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao","page":null},"kalevski":{"name":"Daniel Kalevski","alias":"kalevski","url":"https://github.com/kalevski","imageURL":"https://github.com/kalevski.png","key":"kalevski","page":null},"kgajera":{"name":"Kishan Gajera","alias":"kgajera","url":"https://github.com/kgajera","imageURL":"https://github.com/kgajera.png","key":"kgajera","page":null},"koistya":{"name":"Konstantin Tarkus","alias":"koistya","url":"https://github.com/koistya","imageURL":"https://github.com/koistya.png","key":"koistya","page":null},"milesj":{"name":"Miles Johnson","alias":"milesj","url":"https://github.com/milesj","imageURL":"https://github.com/milesj.png","key":"milesj","page":null},"mrbrunelli":{"name":"Matheus Ricardo Brunelli","alias":"mrbrunelli","url":"https://github.com/mrbrunelli","imageURL":"https://github.com/mrbrunelli.png","key":"mrbrunelli","page":null},"NaseelNiyas":{"name":"Naseel Niyas","alias":"NaseelNiyas","url":"https://github.com/NaseelNiyas","imageURL":"https://github.com/NaseelNiyas.png","key":"NaseelNiyas","page":null},"nick-verida":{"name":"nick-verida","alias":"nick-verida","url":"https://github.com/nick-verida","imageURL":"https://github.com/nick-verida.png","key":"nick-verida","page":null},"nschonni":{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni","page":null},"redhoyasa":{"name":"Muhammad Redho Ayassa","alias":"redhoyasa","url":"https://github.com/redhoyasa","imageURL":"https://github.com/redhoyasa.png","key":"redhoyasa","page":null},"Ruben-Arushanyan":{"name":"Ruben Arushanyan","alias":"Ruben-Arushanyan","url":"https://github.com/Ruben-Arushanyan","imageURL":"https://github.com/Ruben-Arushanyan.png","key":"Ruben-Arushanyan","page":null},"seyoon20087":{"name":"seyoon20087","alias":"seyoon20087","url":"https://github.com/seyoon20087","imageURL":"https://github.com/seyoon20087.png","key":"seyoon20087","page":null},"tamalweb":{"name":"Tamal Web","alias":"tamalweb","url":"https://github.com/tamalweb","imageURL":"https://github.com/tamalweb.png","key":"tamalweb","page":null},"thedanielhanke":{"name":"Daniel Hanke","alias":"thedanielhanke","url":"https://github.com/thedanielhanke","imageURL":"https://github.com/thedanielhanke.png","key":"thedanielhanke","page":null},"toto6038":{"name":"toto6038","alias":"toto6038","url":"https://github.com/toto6038","imageURL":"https://github.com/toto6038.png","key":"toto6038","page":null},"vidarc":{"name":"Matthew Ailes","alias":"vidarc","url":"https://github.com/vidarc","imageURL":"https://github.com/vidarc.png","key":"vidarc","page":null},"winterlood":{"name":"\uc774\uc815\ud658","alias":"winterlood","url":"https://github.com/winterlood","imageURL":"https://github.com/winterlood.png","key":"winterlood","page":null},"abahmed":{"name":"Abdelrahman Ahmed","alias":"abahmed","url":"https://github.com/abahmed","imageURL":"https://github.com/abahmed.png","key":"abahmed","page":null},"ajrice6713":{"name":"AJ Rice","alias":"ajrice6713","url":"https://github.com/ajrice6713","imageURL":"https://github.com/ajrice6713.png","key":"ajrice6713","page":null},"alexgrigoras":{"name":"Alexandru Grigoras","alias":"alexgrigoras","url":"https://github.com/alexgrigoras","imageURL":"https://github.com/alexgrigoras.png","key":"alexgrigoras","page":null},"alias-mac":{"name":"Filipe Guerra","alias":"alias-mac","url":"https://github.com/alias-mac","imageURL":"https://github.com/alias-mac.png","key":"alias-mac","page":null},"amir2mi":{"name":"Amir M. Mohamadi","alias":"amir2mi","url":"https://github.com/amir2mi","imageURL":"https://github.com/amir2mi.png","key":"amir2mi","page":null},"antmcc49":{"name":"Anthony McCaigue","alias":"antmcc49","url":"https://github.com/antmcc49","imageURL":"https://github.com/antmcc49.png","key":"antmcc49","page":null},"brendannee":{"name":"Brendan Nee","alias":"brendannee","url":"https://github.com/brendannee","imageURL":"https://github.com/brendannee.png","key":"brendannee","page":null},"cerkiewny":{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny","page":null},"davidebianchi":{"name":"Davide Bianchi","alias":"davidebianchi","url":"https://github.com/davidebianchi","imageURL":"https://github.com/davidebianchi.png","key":"davidebianchi","page":null},"edouardb":{"name":"Edouard Bonlieu","alias":"edouardb","url":"https://github.com/edouardb","imageURL":"https://github.com/edouardb.png","key":"edouardb","page":null},"FeodorFitsner":{"name":"Feodor Fitsner","alias":"FeodorFitsner","url":"https://github.com/FeodorFitsner","imageURL":"https://github.com/FeodorFitsner.png","key":"FeodorFitsner","page":null},"HiChen404":{"name":"Chen","alias":"HiChen404","url":"https://github.com/HiChen404","imageURL":"https://github.com/HiChen404.png","key":"HiChen404","page":null},"josephriosIO":{"name":"Joseph","alias":"josephriosIO","url":"https://github.com/josephriosIO","imageURL":"https://github.com/josephriosIO.png","key":"josephriosIO","page":null},"jwitz":{"name":"Jake Witz","alias":"jwitz","url":"https://github.com/jwitz","imageURL":"https://github.com/jwitz.png","key":"jwitz","page":null},"kaustubhk24":{"name":"Kaustubh Kulkarni","alias":"kaustubhk24","url":"https://github.com/kaustubhk24","imageURL":"https://github.com/kaustubhk24.png","key":"kaustubhk24","page":null},"kuizuo":{"name":"kuizuo","alias":"kuizuo","url":"https://github.com/kuizuo","imageURL":"https://github.com/kuizuo.png","key":"kuizuo","page":null},"lmpham1":{"name":"Minh Pham","alias":"lmpham1","url":"https://github.com/lmpham1","imageURL":"https://github.com/lmpham1.png","key":"lmpham1","page":null},"ltm":{"name":"Lars Mikkelsen","alias":"ltm","url":"https://github.com/ltm","imageURL":"https://github.com/ltm.png","key":"ltm","page":null},"megasanjay":{"name":"Sanjay Soundarajan","alias":"megasanjay","url":"https://github.com/megasanjay","imageURL":"https://github.com/megasanjay.png","key":"megasanjay","page":null},"MorookaKotaro":{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro","page":null},"noomorph":{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph","page":null},"omeraplak":{"name":"\xd6mer Faruk APLAK","alias":"omeraplak","url":"https://github.com/omeraplak","imageURL":"https://github.com/omeraplak.png","key":"omeraplak","page":null},"rishi-raj-jain":{"name":"Rishi Raj Jain","alias":"rishi-raj-jain","url":"https://github.com/rishi-raj-jain","imageURL":"https://github.com/rishi-raj-jain.png","key":"rishi-raj-jain","page":null},"roydukkey":{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey","page":null},"ruanqizhen":{"name":"ruanqizhen","alias":"ruanqizhen","url":"https://github.com/ruanqizhen","imageURL":"https://github.com/ruanqizhen.png","key":"ruanqizhen","page":null},"sgenoud":{"name":"sgenoud","alias":"sgenoud","url":"https://github.com/sgenoud","imageURL":"https://github.com/sgenoud.png","key":"sgenoud","page":null},"tapanchudasama":{"name":"Tapan Chudasama","alias":"tapanchudasama","url":"https://github.com/tapanchudasama","imageURL":"https://github.com/tapanchudasama.png","key":"tapanchudasama","page":null},"vandreleal":{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal","page":null},"wood3n":{"name":"wood3n","alias":"wood3n","url":"https://github.com/wood3n","imageURL":"https://github.com/wood3n.png","key":"wood3n","page":null},"christopherklint97":{"name":"Christopher Klint","alias":"christopherklint97","url":"https://github.com/christopherklint97","imageURL":"https://github.com/christopherklint97.png","key":"christopherklint97","page":null},"cmpadden":{"name":"colton","alias":"cmpadden","url":"https://github.com/cmpadden","imageURL":"https://github.com/cmpadden.png","key":"cmpadden","page":null},"Drylozu":{"name":"Drylozu","alias":"Drylozu","url":"https://github.com/Drylozu","imageURL":"https://github.com/Drylozu.png","key":"Drylozu","page":null},"favna":{"name":"Jeroen Claassens","alias":"favna","url":"https://github.com/favna","imageURL":"https://github.com/favna.png","key":"favna","page":null},"HarshCasper":{"name":"Harsh Mishra","alias":"HarshCasper","url":"https://github.com/HarshCasper","imageURL":"https://github.com/HarshCasper.png","key":"HarshCasper","page":null},"himanshu007-creator":{"name":"Himanshu","alias":"himanshu007-creator","url":"https://github.com/himanshu007-creator","imageURL":"https://github.com/himanshu007-creator.png","key":"himanshu007-creator","page":null},"merceyz":{"name":"Kristoffer K.","alias":"merceyz","url":"https://github.com/merceyz","imageURL":"https://github.com/merceyz.png","key":"merceyz","page":null},"notzheng":{"name":"\u4e0d\u90d1","alias":"notzheng","url":"https://github.com/notzheng","imageURL":"https://github.com/notzheng.png","key":"notzheng","page":null},"wewoor":{"name":"Ziv","alias":"wewoor","url":"https://github.com/wewoor","imageURL":"https://github.com/wewoor.png","key":"wewoor","page":null},"withshubh":{"name":"Shubhendra Singh Chauhan","alias":"withshubh","url":"https://github.com/withshubh","imageURL":"https://github.com/withshubh.png","key":"withshubh","page":null},"wowtvds":{"name":"Wout Vandesompele","alias":"wowtvds","url":"https://github.com/wowtvds","imageURL":"https://github.com/wowtvds.png","key":"wowtvds","page":null},"afshinm":{"name":"Afshin Mehrabani","alias":"afshinm","url":"https://github.com/afshinm","imageURL":"https://github.com/afshinm.png","key":"afshinm","page":null},"agrawal-rohit":{"name":"Rohit Agrawal","alias":"agrawal-rohit","url":"https://github.com/agrawal-rohit","imageURL":"https://github.com/agrawal-rohit.png","key":"agrawal-rohit","page":null},"cchaudier":{"name":"Christophe Chaudier","alias":"cchaudier","url":"https://github.com/cchaudier","imageURL":"https://github.com/cchaudier.png","key":"cchaudier","page":null},"chimailo":{"name":"chima ilo","alias":"chimailo","url":"https://github.com/chimailo","imageURL":"https://github.com/chimailo.png","key":"chimailo","page":null},"dexbiobot":{"name":"Shoaib Sajid","alias":"dexbiobot","url":"https://github.com/dexbiobot","imageURL":"https://github.com/dexbiobot.png","key":"dexbiobot","page":null},"dsmmcken":{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken","page":null},"fishmandev":{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev","page":null},"fsmaia":{"name":"Fernando Maia","alias":"fsmaia","url":"https://github.com/fsmaia","imageURL":"https://github.com/fsmaia.png","key":"fsmaia","page":null},"hbulens":{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens","page":null},"HemantSachdeva":{"name":"Hemant Sachdeva","alias":"HemantSachdeva","url":"https://github.com/HemantSachdeva","imageURL":"https://github.com/HemantSachdeva.png","key":"HemantSachdeva","page":null},"JararvisQ":{"name":"Jarar","alias":"JararvisQ","url":"https://github.com/JararvisQ","imageURL":"https://github.com/JararvisQ.png","key":"JararvisQ","page":null},"jeffski":{"name":"Jeff Shillitto","alias":"jeffski","url":"https://github.com/jeffski","imageURL":"https://github.com/jeffski.png","key":"jeffski","page":null},"juffalow":{"name":"Matej Jellus","alias":"juffalow","url":"https://github.com/juffalow","imageURL":"https://github.com/juffalow.png","key":"juffalow","page":null},"juzhiyuan":{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan","page":null},"KonstHardy":{"name":"Konstantin Popov","alias":"KonstHardy","url":"https://github.com/KonstHardy","imageURL":"https://github.com/KonstHardy.png","key":"KonstHardy","page":null},"ludofischer":{"name":"Ludovico Fischer","alias":"ludofischer","url":"https://github.com/ludofischer","imageURL":"https://github.com/ludofischer.png","key":"ludofischer","page":null},"Martinsos":{"name":"Martin \u0160o\u0161i\u0107","alias":"Martinsos","url":"https://github.com/Martinsos","imageURL":"https://github.com/Martinsos.png","key":"Martinsos","page":null},"matthijsgroen":{"name":"Matthijs Groen","alias":"matthijsgroen","url":"https://github.com/matthijsgroen","imageURL":"https://github.com/matthijsgroen.png","key":"matthijsgroen","page":null},"MisterFISHUP":{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP","page":null},"molly":{"name":"Molly White","alias":"molly","url":"https://github.com/molly","imageURL":"https://github.com/molly.png","key":"molly","page":null},"oriooctopus":{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus","page":null},"pal-sig":{"name":"pal-sig","alias":"pal-sig","url":"https://github.com/pal-sig","imageURL":"https://github.com/pal-sig.png","key":"pal-sig","page":null},"Patitotective":{"name":"Patitotective","alias":"Patitotective","url":"https://github.com/Patitotective","imageURL":"https://github.com/Patitotective.png","key":"Patitotective","page":null},"patrikmasiar":{"name":"Patrik M\xe4siar","alias":"patrikmasiar","url":"https://github.com/patrikmasiar","imageURL":"https://github.com/patrikmasiar.png","key":"patrikmasiar","page":null},"pbiggar":{"name":"Paul Biggar","alias":"pbiggar","url":"https://github.com/pbiggar","imageURL":"https://github.com/pbiggar.png","key":"pbiggar","page":null},"polarathene":{"name":"Brennan Kinney","alias":"polarathene","url":"https://github.com/polarathene","imageURL":"https://github.com/polarathene.png","key":"polarathene","page":null},"robinmetral":{"name":"Robin M\xe9tral","alias":"robinmetral","url":"https://github.com/robinmetral","imageURL":"https://github.com/robinmetral.png","key":"robinmetral","page":null},"ronnyroeller":{"name":"Ronny Roeller","alias":"ronnyroeller","url":"https://github.com/ronnyroeller","imageURL":"https://github.com/ronnyroeller.png","key":"ronnyroeller","page":null},"rootwork":{"name":"Ivan Boothe","alias":"rootwork","url":"https://github.com/rootwork","imageURL":"https://github.com/rootwork.png","key":"rootwork","page":null},"rsapkf":{"name":"Rey","alias":"rsapkf","url":"https://github.com/rsapkf","imageURL":"https://github.com/rsapkf.png","key":"rsapkf","page":null},"semoal":{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal","page":null},"shafy":{"name":"Can Olcer","alias":"shafy","url":"https://github.com/shafy","imageURL":"https://github.com/shafy.png","key":"shafy","page":null},"sivapalan":{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan","page":null},"skoech":{"name":"Sharon Koech","alias":"skoech","url":"https://github.com/skoech","imageURL":"https://github.com/skoech.png","key":"skoech","page":null},"sohamsshah":{"name":"Soham Shah","alias":"sohamsshah","url":"https://github.com/sohamsshah","imageURL":"https://github.com/sohamsshah.png","key":"sohamsshah","page":null},"spyke01":{"name":"Paden Clayton","alias":"spyke01","url":"https://github.com/spyke01","imageURL":"https://github.com/spyke01.png","key":"spyke01","page":null},"StanKocken":{"name":"Stan Kocken","alias":"StanKocken","url":"https://github.com/StanKocken","imageURL":"https://github.com/StanKocken.png","key":"StanKocken","page":null},"swalahamani":{"name":"Swalah Amani","alias":"swalahamani","url":"https://github.com/swalahamani","imageURL":"https://github.com/swalahamani.png","key":"swalahamani","page":null},"swapnilmmane":{"name":"Swapnil M Mane","alias":"swapnilmmane","url":"https://github.com/swapnilmmane","imageURL":"https://github.com/swapnilmmane.png","key":"swapnilmmane","page":null},"wpyoga":{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga","page":null},"AviVahl":{"name":"Avi Vahl","alias":"AviVahl","url":"https://github.com/AviVahl","imageURL":"https://github.com/AviVahl.png","key":"AviVahl","page":null},"dominikmeyersap":{"name":"Dominik Meyer","alias":"dominikmeyersap","url":"https://github.com/dominikmeyersap","imageURL":"https://github.com/dominikmeyersap.png","key":"dominikmeyersap","page":null},"gabrielfalcao":{"name":"Gabriel Falc\xe3o","alias":"gabrielfalcao","url":"https://github.com/gabrielfalcao","imageURL":"https://github.com/gabrielfalcao.png","key":"gabrielfalcao","page":null},"oscard0m":{"name":"Oscar Dominguez","alias":"oscard0m","url":"https://github.com/oscard0m","imageURL":"https://github.com/oscard0m.png","key":"oscard0m","page":null},"robbieaverill":{"name":"Robbie Averill","alias":"robbieaverill","url":"https://github.com/robbieaverill","imageURL":"https://github.com/robbieaverill.png","key":"robbieaverill","page":null},"utajum":{"name":"Vladimir Tasic","alias":"utajum","url":"https://github.com/utajum","imageURL":"https://github.com/utajum.png","key":"utajum","page":null},"wingclover":{"name":"Ying Wang","alias":"wingclover","url":"https://github.com/wingclover","imageURL":"https://github.com/wingclover.png","key":"wingclover","page":null},"ataft":{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft","page":null},"canercanbaz":{"name":"Caner Canbaz","alias":"canercanbaz","url":"https://github.com/canercanbaz","imageURL":"https://github.com/canercanbaz.png","key":"canercanbaz","page":null},"DimiMikadze":{"name":"Dimi Mikadze","alias":"DimiMikadze","url":"https://github.com/DimiMikadze","imageURL":"https://github.com/DimiMikadze.png","key":"DimiMikadze","page":null},"ipavlic":{"name":"Ilija Pavlic","alias":"ipavlic","url":"https://github.com/ipavlic","imageURL":"https://github.com/ipavlic.png","key":"ipavlic","page":null},"nlfurniss":{"name":"Nathaniel Furniss","alias":"nlfurniss","url":"https://github.com/nlfurniss","imageURL":"https://github.com/nlfurniss.png","key":"nlfurniss","page":null},"philipp985":{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985","page":null},"thanasis00":{"name":"Thanasis Katsadas","alias":"thanasis00","url":"https://github.com/thanasis00","imageURL":"https://github.com/thanasis00.png","key":"thanasis00","page":null},"zxuqian":{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian","page":null},"akajla09":{"name":"Aditya Kajla","alias":"akajla09","url":"https://github.com/akajla09","imageURL":"https://github.com/akajla09.png","key":"akajla09","page":null},"Andrewnt219":{"name":"Andrew Nguyen","alias":"Andrewnt219","url":"https://github.com/Andrewnt219","imageURL":"https://github.com/Andrewnt219.png","key":"Andrewnt219","page":null},"BattleOfPlassey":{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey","page":null},"bmiddha":{"name":"Bharat Middha","alias":"bmiddha","url":"https://github.com/bmiddha","imageURL":"https://github.com/bmiddha.png","key":"bmiddha","page":null},"caleeli":{"name":"David Callizaya","alias":"caleeli","url":"https://github.com/caleeli","imageURL":"https://github.com/caleeli.png","key":"caleeli","page":null},"ChrisChinchilla":{"name":"Chris Chinchilla","alias":"ChrisChinchilla","url":"https://github.com/ChrisChinchilla","imageURL":"https://github.com/ChrisChinchilla.png","key":"ChrisChinchilla","page":null},"djamaile":{"name":"djamaile","alias":"djamaile","url":"https://github.com/djamaile","imageURL":"https://github.com/djamaile.png","key":"djamaile","page":null},"dr5hn":{"name":"Darshan Gada","alias":"dr5hn","url":"https://github.com/dr5hn","imageURL":"https://github.com/dr5hn.png","key":"dr5hn","page":null},"EkaterinaMozheiko":{"name":"Ekaterina Mozheiko","alias":"EkaterinaMozheiko","url":"https://github.com/EkaterinaMozheiko","imageURL":"https://github.com/EkaterinaMozheiko.png","key":"EkaterinaMozheiko","page":null},"gtnardy":{"name":"Gabriel T. Nardy","alias":"gtnardy","url":"https://github.com/gtnardy","imageURL":"https://github.com/gtnardy.png","key":"gtnardy","page":null},"headline-design":{"name":"headline-design","alias":"headline-design","url":"https://github.com/headline-design","imageURL":"https://github.com/headline-design.png","key":"headline-design","page":null},"hughlilly":{"name":"Hugh Lilly","alias":"hughlilly","url":"https://github.com/hughlilly","imageURL":"https://github.com/hughlilly.png","key":"hughlilly","page":null},"ivarconr":{"name":"Ivar Conradi \xd8sthus","alias":"ivarconr","url":"https://github.com/ivarconr","imageURL":"https://github.com/ivarconr.png","key":"ivarconr","page":null},"jasonbosco":{"name":"Jason Bosco","alias":"jasonbosco","url":"https://github.com/jasonbosco","imageURL":"https://github.com/jasonbosco.png","key":"jasonbosco","page":null},"jkhaui":{"name":"Jordan Lee","alias":"jkhaui","url":"https://github.com/jkhaui","imageURL":"https://github.com/jkhaui.png","key":"jkhaui","page":null},"kingo55":{"name":"Robert Kingston","alias":"kingo55","url":"https://github.com/kingo55","imageURL":"https://github.com/kingo55.png","key":"kingo55","page":null},"KyrietS":{"name":"Kyriet","alias":"KyrietS","url":"https://github.com/KyrietS","imageURL":"https://github.com/KyrietS.png","key":"KyrietS","page":null},"MrTechHunter":{"name":"Mahdi Hamldar","alias":"MrTechHunter","url":"https://github.com/MrTechHunter","imageURL":"https://github.com/MrTechHunter.png","key":"MrTechHunter","page":null},"ohkimur":{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur","page":null},"printf-ana":{"name":"Ana Carolina","alias":"printf-ana","url":"https://github.com/printf-ana","imageURL":"https://github.com/printf-ana.png","key":"printf-ana","page":null},"Shrugsy":{"name":"Shrugsy","alias":"Shrugsy","url":"https://github.com/Shrugsy","imageURL":"https://github.com/Shrugsy.png","key":"Shrugsy","page":null},"sw-yx":{"name":"swyx","alias":"sw-yx","url":"https://github.com/sw-yx","imageURL":"https://github.com/sw-yx.png","key":"sw-yx","page":null},"vinckr":{"name":"Vincent","alias":"vinckr","url":"https://github.com/vinckr","imageURL":"https://github.com/vinckr.png","key":"vinckr","page":null},"Whirl21":{"name":"Whirl","alias":"Whirl21","url":"https://github.com/Whirl21","imageURL":"https://github.com/Whirl21.png","key":"Whirl21","page":null},"3alisaki":{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki","page":null},"antonym":{"name":"Antony Messerli","alias":"antonym","url":"https://github.com/antonym","imageURL":"https://github.com/antonym.png","key":"antonym","page":null},"farshidinanloo":{"name":"farshid","alias":"farshidinanloo","url":"https://github.com/farshidinanloo","imageURL":"https://github.com/farshidinanloo.png","key":"farshidinanloo","page":null},"oscarlorentzon":{"name":"Oscar Lorentzon","alias":"oscarlorentzon","url":"https://github.com/oscarlorentzon","imageURL":"https://github.com/oscarlorentzon.png","key":"oscarlorentzon","page":null},"rohit-gohri":{"name":"Rohit Gohri","alias":"rohit-gohri","url":"https://github.com/rohit-gohri","imageURL":"https://github.com/rohit-gohri.png","key":"rohit-gohri","page":null},"dbseal":{"name":"David Seal","alias":"dbseal","url":"https://github.com/dbseal","imageURL":"https://github.com/dbseal.png","key":"dbseal","page":null},"deepakprabhakara":{"name":"Deepak Prabhakara","alias":"deepakprabhakara","url":"https://github.com/deepakprabhakara","imageURL":"https://github.com/deepakprabhakara.png","key":"deepakprabhakara","page":null},"faloi":{"name":"Federico Aloi","alias":"faloi","url":"https://github.com/faloi","imageURL":"https://github.com/faloi.png","key":"faloi","page":null},"fouad":{"name":"Fouad Matin","alias":"fouad","url":"https://github.com/fouad","imageURL":"https://github.com/fouad.png","key":"fouad","page":null},"gulien":{"name":"Julien Neuhart","alias":"gulien","url":"https://github.com/gulien","imageURL":"https://github.com/gulien.png","key":"gulien","page":null},"hamzahamidi":{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi","page":null},"HaochenQ":{"name":"HaochenQ","alias":"HaochenQ","url":"https://github.com/HaochenQ","imageURL":"https://github.com/HaochenQ.png","key":"HaochenQ","page":null},"incendial":{"name":"Dmitry Zhifarsky","alias":"incendial","url":"https://github.com/incendial","imageURL":"https://github.com/incendial.png","key":"incendial","page":null},"isaac-philip":{"name":"Isaac Philip","alias":"isaac-philip","url":"https://github.com/isaac-philip","imageURL":"https://github.com/isaac-philip.png","key":"isaac-philip","page":null},"jansivans":{"name":"Yan Ivan Evdokimov","alias":"jansivans","url":"https://github.com/jansivans","imageURL":"https://github.com/jansivans.png","key":"jansivans","page":null},"JonnyBurger":{"name":"Jonny Burger","alias":"JonnyBurger","url":"https://github.com/JonnyBurger","imageURL":"https://github.com/JonnyBurger.png","key":"JonnyBurger","page":null},"metmarkosaric":{"name":"Marko Saric","alias":"metmarkosaric","url":"https://github.com/metmarkosaric","imageURL":"https://github.com/metmarkosaric.png","key":"metmarkosaric","page":null},"michalsanger":{"name":"Michal S\xe4nger","alias":"michalsanger","url":"https://github.com/michalsanger","imageURL":"https://github.com/michalsanger.png","key":"michalsanger","page":null},"neaped":{"name":"Garry","alias":"neaped","url":"https://github.com/neaped","imageURL":"https://github.com/neaped.png","key":"neaped","page":null},"sparanoid":{"name":"Tunghsiao Liu","alias":"sparanoid","url":"https://github.com/sparanoid","imageURL":"https://github.com/sparanoid.png","key":"sparanoid","page":null},"wan-nyan-wan":{"name":"wan-nyan-wan","alias":"wan-nyan-wan","url":"https://github.com/wan-nyan-wan","imageURL":"https://github.com/wan-nyan-wan.png","key":"wan-nyan-wan","page":null},"antonvasilev52":{"name":"antonvasilev52","alias":"antonvasilev52","url":"https://github.com/antonvasilev52","imageURL":"https://github.com/antonvasilev52.png","key":"antonvasilev52","page":null},"arnaudjnn":{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn","page":null},"cmfcmf":{"name":"Christian Flach","alias":"cmfcmf","url":"https://github.com/cmfcmf","imageURL":"https://github.com/cmfcmf.png","key":"cmfcmf","page":null},"covalentbond":{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond","page":null},"davidzhao":{"name":"David Zhao","alias":"davidzhao","url":"https://github.com/davidzhao","imageURL":"https://github.com/davidzhao.png","key":"davidzhao","page":null},"dbrrt":{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt","page":null},"dgeb":{"name":"Dan Gebhardt","alias":"dgeb","url":"https://github.com/dgeb","imageURL":"https://github.com/dgeb.png","key":"dgeb","page":null},"fmassot":{"name":"Fran\xe7ois Massot","alias":"fmassot","url":"https://github.com/fmassot","imageURL":"https://github.com/fmassot.png","key":"fmassot","page":null},"lennartkoopmann":{"name":"Lennart Koopmann","alias":"lennartkoopmann","url":"https://github.com/lennartkoopmann","imageURL":"https://github.com/lennartkoopmann.png","key":"lennartkoopmann","page":null},"marssaljr":{"name":"Mar\xe7al Junior","alias":"marssaljr","url":"https://github.com/marssaljr","imageURL":"https://github.com/marssaljr.png","key":"marssaljr","page":null},"mweststrate":{"name":"Michel Weststrate","alias":"mweststrate","url":"https://github.com/mweststrate","imageURL":"https://github.com/mweststrate.png","key":"mweststrate","page":null},"NazarStreletskyi":{"name":"Nazar","alias":"NazarStreletskyi","url":"https://github.com/NazarStreletskyi","imageURL":"https://github.com/NazarStreletskyi.png","key":"NazarStreletskyi","page":null},"nirtamir2":{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2","page":null},"pcho":{"name":"Przemys\u0142aw Chojecki","alias":"pcho","url":"https://github.com/pcho","imageURL":"https://github.com/pcho.png","key":"pcho","page":null},"pmuens":{"name":"Philipp Muens","alias":"pmuens","url":"https://github.com/pmuens","imageURL":"https://github.com/pmuens.png","key":"pmuens","page":null},"rluvaton":{"name":"Raz Luvaton","alias":"rluvaton","url":"https://github.com/rluvaton","imageURL":"https://github.com/rluvaton.png","key":"rluvaton","page":null},"taylorreece":{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece","page":null},"tohidnateghi":{"name":"tohid nateghi","alias":"tohidnateghi","url":"https://github.com/tohidnateghi","imageURL":"https://github.com/tohidnateghi.png","key":"tohidnateghi","page":null},"wenerme":{"name":"\u9648\u6768\u6587","alias":"wenerme","url":"https://github.com/wenerme","imageURL":"https://github.com/wenerme.png","key":"wenerme","page":null},"AuHau":{"name":"Adam Uhl\xed\u0159","alias":"AuHau","url":"https://github.com/AuHau","imageURL":"https://github.com/AuHau.png","key":"AuHau","page":null},"bperlmutter":{"name":"bperlmutter","alias":"bperlmutter","url":"https://github.com/bperlmutter","imageURL":"https://github.com/bperlmutter.png","key":"bperlmutter","page":null},"dirslashls":{"name":"dirslashls","alias":"dirslashls","url":"https://github.com/dirslashls","imageURL":"https://github.com/dirslashls.png","key":"dirslashls","page":null},"iamayushdas":{"name":"Ayush das","alias":"iamayushdas","url":"https://github.com/iamayushdas","imageURL":"https://github.com/iamayushdas.png","key":"iamayushdas","page":null},"jsamr":{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr","page":null},"kdrag0n":{"name":"Danny Lin","alias":"kdrag0n","url":"https://github.com/kdrag0n","imageURL":"https://github.com/kdrag0n.png","key":"kdrag0n","page":null},"ramiy":{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy","page":null},"eshantri":{"name":"Eshan Tripathi","alias":"eshantri","url":"https://github.com/eshantri","imageURL":"https://github.com/eshantri.png","key":"eshantri","page":null},"loozhengyuan":{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan","page":null},"manuelmeurer":{"name":"Manuel Meurer","alias":"manuelmeurer","url":"https://github.com/manuelmeurer","imageURL":"https://github.com/manuelmeurer.png","key":"manuelmeurer","page":null},"teikjun":{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun","page":null},"tomekpapiernik":{"name":"Tomasz Papiernik","alias":"tomekpapiernik","url":"https://github.com/tomekpapiernik","imageURL":"https://github.com/tomekpapiernik.png","key":"tomekpapiernik","page":null},"antonygibbs":{"name":"antonygibbs","alias":"antonygibbs","url":"https://github.com/antonygibbs","imageURL":"https://github.com/antonygibbs.png","key":"antonygibbs","page":null},"ArtFlag":{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag","page":null},"besemuna":{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna","page":null},"Christopher-Hsieh":{"name":"Christopher Hsieh","alias":"Christopher-Hsieh","url":"https://github.com/Christopher-Hsieh","imageURL":"https://github.com/Christopher-Hsieh.png","key":"Christopher-Hsieh","page":null},"dabeeeenster":{"name":"Ben Rometsch","alias":"dabeeeenster","url":"https://github.com/dabeeeenster","imageURL":"https://github.com/dabeeeenster.png","key":"dabeeeenster","page":null},"e271828-":{"name":"e271828-","alias":"e271828-","url":"https://github.com/e271828-","imageURL":"https://github.com/e271828-.png","key":"e271828-","page":null},"fgatti675":{"name":"fgatti675","alias":"fgatti675","url":"https://github.com/fgatti675","imageURL":"https://github.com/fgatti675.png","key":"fgatti675","page":null},"HunteRoi":{"name":"Tina\xebl Devresse","alias":"HunteRoi","url":"https://github.com/HunteRoi","imageURL":"https://github.com/HunteRoi.png","key":"HunteRoi","page":null},"jmazin":{"name":"Jonathan Mazin","alias":"jmazin","url":"https://github.com/jmazin","imageURL":"https://github.com/jmazin.png","key":"jmazin","page":null},"Joelpo":{"name":"Joel","alias":"Joelpo","url":"https://github.com/Joelpo","imageURL":"https://github.com/Joelpo.png","key":"Joelpo","page":null},"jonbarker68":{"name":"Jon Barker","alias":"jonbarker68","url":"https://github.com/jonbarker68","imageURL":"https://github.com/jonbarker68.png","key":"jonbarker68","page":null},"l0u1sg":{"name":"Louis Gallet","alias":"l0u1sg","url":"https://github.com/l0u1sg","imageURL":"https://github.com/l0u1sg.png","key":"l0u1sg","page":null},"limkinZero":{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero","page":null},"liorheber":{"name":"Lior Heber","alias":"liorheber","url":"https://github.com/liorheber","imageURL":"https://github.com/liorheber.png","key":"liorheber","page":null},"louistiti":{"name":"Louis Grenard","alias":"louistiti","url":"https://github.com/louistiti","imageURL":"https://github.com/louistiti.png","key":"louistiti","page":null},"Massibian":{"name":"Massibian","alias":"Massibian","url":"https://github.com/Massibian","imageURL":"https://github.com/Massibian.png","key":"Massibian","page":null},"nam-hle":{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle","page":null},"Neilblaze":{"name":"Pratyay Banerjee","alias":"Neilblaze","url":"https://github.com/Neilblaze","imageURL":"https://github.com/Neilblaze.png","key":"Neilblaze","page":null},"phwt":{"name":"phwt.smwt","alias":"phwt","url":"https://github.com/phwt","imageURL":"https://github.com/phwt.png","key":"phwt","page":null},"pmqueiroz":{"name":"Pedro Queiroz","alias":"pmqueiroz","url":"https://github.com/pmqueiroz","imageURL":"https://github.com/pmqueiroz.png","key":"pmqueiroz","page":null},"PsychTechApS":{"name":"PsychTech","alias":"PsychTechApS","url":"https://github.com/PsychTechApS","imageURL":"https://github.com/PsychTechApS.png","key":"PsychTechApS","page":null},"SamChou19815":{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815","page":null},"silva-nick":{"name":"silva-nick","alias":"silva-nick","url":"https://github.com/silva-nick","imageURL":"https://github.com/silva-nick.png","key":"silva-nick","page":null},"tiny-dancer":{"name":"mg","alias":"tiny-dancer","url":"https://github.com/tiny-dancer","imageURL":"https://github.com/tiny-dancer.png","key":"tiny-dancer","page":null},"tsirlucas":{"name":"Lucas Correia","alias":"tsirlucas","url":"https://github.com/tsirlucas","imageURL":"https://github.com/tsirlucas.png","key":"tsirlucas","page":null},"wise-introvert":{"name":"Fardeen Panjwani","alias":"wise-introvert","url":"https://github.com/wise-introvert","imageURL":"https://github.com/wise-introvert.png","key":"wise-introvert","page":null},"ChrisOwen101":{"name":"Chris Owen","alias":"ChrisOwen101","url":"https://github.com/ChrisOwen101","imageURL":"https://github.com/ChrisOwen101.png","key":"ChrisOwen101","page":null},"gianu":{"name":"Sergio Rafael Gianazza","alias":"gianu","url":"https://github.com/gianu","imageURL":"https://github.com/gianu.png","key":"gianu","page":null},"joelhans":{"name":"Joel Hans","alias":"joelhans","url":"https://github.com/joelhans","imageURL":"https://github.com/joelhans.png","key":"joelhans","page":null},"KostyaTretyak":{"name":"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a","alias":"KostyaTretyak","url":"https://github.com/KostyaTretyak","imageURL":"https://github.com/KostyaTretyak.png","key":"KostyaTretyak","page":null},"rodmoreno":{"name":"Rodrigo Moreno","alias":"rodmoreno","url":"https://github.com/rodmoreno","imageURL":"https://github.com/rodmoreno.png","key":"rodmoreno","page":null},"yiliansource":{"name":"Ian Hornik","alias":"yiliansource","url":"https://github.com/yiliansource","imageURL":"https://github.com/yiliansource.png","key":"yiliansource","page":null},"gempain":{"name":"Geoffroy Empain","alias":"gempain","url":"https://github.com/gempain","imageURL":"https://github.com/gempain.png","key":"gempain","page":null},"tommy351":{"name":"Tommy Chen","alias":"tommy351","url":"https://github.com/tommy351","imageURL":"https://github.com/tommy351.png","key":"tommy351","page":null},"alena-ko":{"name":"alena-ko","alias":"alena-ko","url":"https://github.com/alena-ko","imageURL":"https://github.com/alena-ko.png","key":"alena-ko","page":null},"kazk":{"name":"kazk","alias":"kazk","url":"https://github.com/kazk","imageURL":"https://github.com/kazk.png","key":"kazk","page":null},"lisa761":{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761","page":null},"luism3861":{"name":"Luis Medina Huerta","alias":"luism3861","url":"https://github.com/luism3861","imageURL":"https://github.com/luism3861.png","key":"luism3861","page":null},"react-learner":{"name":"Tommy","alias":"react-learner","url":"https://github.com/react-learner","imageURL":"https://github.com/react-learner.png","key":"react-learner","page":null},"aehrea":{"name":"aehrea","alias":"aehrea","url":"https://github.com/aehrea","imageURL":"https://github.com/aehrea.png","key":"aehrea","page":null},"ajeetraina":{"name":"Ajeet Singh Raina, Docker Captain, RedisLabs","alias":"ajeetraina","url":"https://github.com/ajeetraina","imageURL":"https://github.com/ajeetraina.png","key":"ajeetraina","page":null},"akepecs":{"name":"akepecs","alias":"akepecs","url":"https://github.com/akepecs","imageURL":"https://github.com/akepecs.png","key":"akepecs","page":null},"AnthonyBobsin":{"name":"Anthony Bobsin","alias":"AnthonyBobsin","url":"https://github.com/AnthonyBobsin","imageURL":"https://github.com/AnthonyBobsin.png","key":"AnthonyBobsin","page":null},"arturcarvalho":{"name":"Artur Carvalho","alias":"arturcarvalho","url":"https://github.com/arturcarvalho","imageURL":"https://github.com/arturcarvalho.png","key":"arturcarvalho","page":null},"atomicpages":{"name":"Dennis Thompson","alias":"atomicpages","url":"https://github.com/atomicpages","imageURL":"https://github.com/atomicpages.png","key":"atomicpages","page":null},"clarus":{"name":"Guillaume Claret","alias":"clarus","url":"https://github.com/clarus","imageURL":"https://github.com/clarus.png","key":"clarus","page":null},"dickwyn":{"name":"Dick Wyn Yong","alias":"dickwyn","url":"https://github.com/dickwyn","imageURL":"https://github.com/dickwyn.png","key":"dickwyn","page":null},"Foxeye-Rinx":{"name":"Foxeye-Rinx","alias":"Foxeye-Rinx","url":"https://github.com/Foxeye-Rinx","imageURL":"https://github.com/Foxeye-Rinx.png","key":"Foxeye-Rinx","page":null},"gitbrent":{"name":"Brent Ely","alias":"gitbrent","url":"https://github.com/gitbrent","imageURL":"https://github.com/gitbrent.png","key":"gitbrent","page":null},"gumacahin":{"name":"Marco Enrico","alias":"gumacahin","url":"https://github.com/gumacahin","imageURL":"https://github.com/gumacahin.png","key":"gumacahin","page":null},"jknoxville":{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville","page":null},"kaytwo":{"name":"Chris Kanich","alias":"kaytwo","url":"https://github.com/kaytwo","imageURL":"https://github.com/kaytwo.png","key":"kaytwo","page":null},"lucalves":{"name":"Lucas Alves","alias":"lucalves","url":"https://github.com/lucalves","imageURL":"https://github.com/lucalves.png","key":"lucalves","page":null},"miku86":{"name":"miku86","alias":"miku86","url":"https://github.com/miku86","imageURL":"https://github.com/miku86.png","key":"miku86","page":null},"pepibumur":{"name":"Pedro Pi\xf1era Buend\xeda","alias":"pepibumur","url":"https://github.com/pepibumur","imageURL":"https://github.com/pepibumur.png","key":"pepibumur","page":null},"serut":{"name":"serut","alias":"serut","url":"https://github.com/serut","imageURL":"https://github.com/serut.png","key":"serut","page":null},"ShinteiMai":{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai","page":null},"steveworley":{"name":"Steve","alias":"steveworley","url":"https://github.com/steveworley","imageURL":"https://github.com/steveworley.png","key":"steveworley","page":null},"sunny0826":{"name":"guoxudong","alias":"sunny0826","url":"https://github.com/sunny0826","imageURL":"https://github.com/sunny0826.png","key":"sunny0826","page":null},"talesporto":{"name":"Tales Porto","alias":"talesporto","url":"https://github.com/talesporto","imageURL":"https://github.com/talesporto.png","key":"talesporto","page":null},"thiagog3":{"name":"Thiago Sciotta","alias":"thiagog3","url":"https://github.com/thiagog3","imageURL":"https://github.com/thiagog3.png","key":"thiagog3","page":null},"tiago-rr":{"name":"Tiago Ribeiro","alias":"tiago-rr","url":"https://github.com/tiago-rr","imageURL":"https://github.com/tiago-rr.png","key":"tiago-rr","page":null},"tomrav":{"name":"Tom Raviv","alias":"tomrav","url":"https://github.com/tomrav","imageURL":"https://github.com/tomrav.png","key":"tomrav","page":null},"tony":{"name":"Tony Narlock","alias":"tony","url":"https://github.com/tony","imageURL":"https://github.com/tony.png","key":"tony","page":null},"Harvtronix":{"name":"Harvtronix","alias":"Harvtronix","url":"https://github.com/Harvtronix","imageURL":"https://github.com/Harvtronix.png","key":"Harvtronix","page":null},"koko8829":{"name":"Joon-Ha Lee","alias":"koko8829","url":"https://github.com/koko8829","imageURL":"https://github.com/koko8829.png","key":"koko8829","page":null},"leandrooriente":{"name":"Leandro Oriente","alias":"leandrooriente","url":"https://github.com/leandrooriente","imageURL":"https://github.com/leandrooriente.png","key":"leandrooriente","page":null},"longlho":{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho","page":null},"lowenhere":{"name":"Lowen","alias":"lowenhere","url":"https://github.com/lowenhere","imageURL":"https://github.com/lowenhere.png","key":"lowenhere","page":null},"quanengineering":{"name":"Quan","alias":"quanengineering","url":"https://github.com/quanengineering","imageURL":"https://github.com/quanengineering.png","key":"quanengineering","page":null},"Rhodanthe1116":{"name":"Rhodanthe1116","alias":"Rhodanthe1116","url":"https://github.com/Rhodanthe1116","imageURL":"https://github.com/Rhodanthe1116.png","key":"Rhodanthe1116","page":null},"zkochan":{"name":"Zoltan Kochan","alias":"zkochan","url":"https://github.com/zkochan","imageURL":"https://github.com/zkochan.png","key":"zkochan","page":null},"9oelM":{"name":"Joel M","alias":"9oelM","url":"https://github.com/9oelM","imageURL":"https://github.com/9oelM.png","key":"9oelM","page":null},"apurvaojas":{"name":"Apurva Ojas","alias":"apurvaojas","url":"https://github.com/apurvaojas","imageURL":"https://github.com/apurvaojas.png","key":"apurvaojas","page":null},"asystentka-jolka":{"name":"Jola","alias":"asystentka-jolka","url":"https://github.com/asystentka-jolka","imageURL":"https://github.com/asystentka-jolka.png","key":"asystentka-jolka","page":null},"aukokyong":{"name":"aukokyong","alias":"aukokyong","url":"https://github.com/aukokyong","imageURL":"https://github.com/aukokyong.png","key":"aukokyong","page":null},"ayonious":{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious","page":null},"B4nan":{"name":"Martin Ad\xe1mek","alias":"B4nan","url":"https://github.com/B4nan","imageURL":"https://github.com/B4nan.png","key":"B4nan","page":null},"ben-qnimble":{"name":"Ben","alias":"ben-qnimble","url":"https://github.com/ben-qnimble","imageURL":"https://github.com/ben-qnimble.png","key":"ben-qnimble","page":null},"bennodev19":{"name":"BennoDev","alias":"bennodev19","url":"https://github.com/bennodev19","imageURL":"https://github.com/bennodev19.png","key":"bennodev19","page":null},"caglarturali":{"name":"\xc7a\u011flar Tural\u0131","alias":"caglarturali","url":"https://github.com/caglarturali","imageURL":"https://github.com/caglarturali.png","key":"caglarturali","page":null},"christian-bromann":{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann","page":null},"edulazaro":{"name":"Eduardo L\xe1zaro","alias":"edulazaro","url":"https://github.com/edulazaro","imageURL":"https://github.com/edulazaro.png","key":"edulazaro","page":null},"eric-hc":{"name":"Eric Carboni","alias":"eric-hc","url":"https://github.com/eric-hc","imageURL":"https://github.com/eric-hc.png","key":"eric-hc","page":null},"iamshadmirza":{"name":"Mohd Shad Mirza","alias":"iamshadmirza","url":"https://github.com/iamshadmirza","imageURL":"https://github.com/iamshadmirza.png","key":"iamshadmirza","page":null},"imbhargav5":{"name":"Bhargav Ponnapalli","alias":"imbhargav5","url":"https://github.com/imbhargav5","imageURL":"https://github.com/imbhargav5.png","key":"imbhargav5","page":null},"iruzevic":{"name":"Ivan Ru\u017eevi\u0107","alias":"iruzevic","url":"https://github.com/iruzevic","imageURL":"https://github.com/iruzevic.png","key":"iruzevic","page":null},"jlin27":{"name":"Jessica Lin","alias":"jlin27","url":"https://github.com/jlin27","imageURL":"https://github.com/jlin27.png","key":"jlin27","page":null},"JoelMarcey":{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey","page":null},"juancarlosjr97":{"name":"Juan Carlos Blanco Delgado","alias":"juancarlosjr97","url":"https://github.com/juancarlosjr97","imageURL":"https://github.com/juancarlosjr97.png","key":"juancarlosjr97","page":null},"kumaraditya303":{"name":"Kumar Aditya","alias":"kumaraditya303","url":"https://github.com/kumaraditya303","imageURL":"https://github.com/kumaraditya303.png","key":"kumaraditya303","page":null},"linyuxuanlin":{"name":"Power Lin","alias":"linyuxuanlin","url":"https://github.com/linyuxuanlin","imageURL":"https://github.com/linyuxuanlin.png","key":"linyuxuanlin","page":null},"manzinello":{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello","page":null},"MatanBobi":{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi","page":null},"miroiu":{"name":"Miroiu Emanuel","alias":"miroiu","url":"https://github.com/miroiu","imageURL":"https://github.com/miroiu.png","key":"miroiu","page":null},"natac13":{"name":"Sean Campbell","alias":"natac13","url":"https://github.com/natac13","imageURL":"https://github.com/natac13.png","key":"natac13","page":null},"nicojs":{"name":"Nico Jansen","alias":"nicojs","url":"https://github.com/nicojs","imageURL":"https://github.com/nicojs.png","key":"nicojs","page":null},"NikolayS":{"name":"Nikolay Samokhvalov","alias":"NikolayS","url":"https://github.com/NikolayS","imageURL":"https://github.com/NikolayS.png","key":"NikolayS","page":null},"ntbosscher":{"name":"Nathan Bosscher","alias":"ntbosscher","url":"https://github.com/ntbosscher","imageURL":"https://github.com/ntbosscher.png","key":"ntbosscher","page":null},"oze4":{"name":"Matt Oestreich","alias":"oze4","url":"https://github.com/oze4","imageURL":"https://github.com/oze4.png","key":"oze4","page":null},"saihaj":{"name":"Saihajpreet Singh","alias":"saihaj","url":"https://github.com/saihaj","imageURL":"https://github.com/saihaj.png","key":"saihaj","page":null},"samhrncir":{"name":"Sam Hrncir","alias":"samhrncir","url":"https://github.com/samhrncir","imageURL":"https://github.com/samhrncir.png","key":"samhrncir","page":null},"sammychinedu2ky":{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky","page":null},"saydo17":{"name":"saydo17","alias":"saydo17","url":"https://github.com/saydo17","imageURL":"https://github.com/saydo17.png","key":"saydo17","page":null},"Siemienik":{"name":"Siemienik Pawel","alias":"Siemienik","url":"https://github.com/Siemienik","imageURL":"https://github.com/Siemienik.png","key":"Siemienik","page":null},"Simek":{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek","page":null},"sksamuel":{"name":"Sam Sam","alias":"sksamuel","url":"https://github.com/sksamuel","imageURL":"https://github.com/sksamuel.png","key":"sksamuel","page":null},"theankurkedia":{"name":"Ankur Kedia","alias":"theankurkedia","url":"https://github.com/theankurkedia","imageURL":"https://github.com/theankurkedia.png","key":"theankurkedia","page":null},"TheodoreChu":{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu","page":null},"tienvx":{"name":"Tien Vo Xuan","alias":"tienvx","url":"https://github.com/tienvx","imageURL":"https://github.com/tienvx.png","key":"tienvx","page":null},"tokarchyn":{"name":"tokarchyn","alias":"tokarchyn","url":"https://github.com/tokarchyn","imageURL":"https://github.com/tokarchyn.png","key":"tokarchyn","page":null},"tomsfernandez":{"name":"Tomas Fernandez","alias":"tomsfernandez","url":"https://github.com/tomsfernandez","imageURL":"https://github.com/tomsfernandez.png","key":"tomsfernandez","page":null},"vamsi3":{"name":"Vamsi Krishna Reddy Satti","alias":"vamsi3","url":"https://github.com/vamsi3","imageURL":"https://github.com/vamsi3.png","key":"vamsi3","page":null},"viglucci":{"name":"Kevin Viglucci","alias":"viglucci","url":"https://github.com/viglucci","imageURL":"https://github.com/viglucci.png","key":"viglucci","page":null},"wellyshen":{"name":"Welly","alias":"wellyshen","url":"https://github.com/wellyshen","imageURL":"https://github.com/wellyshen.png","key":"wellyshen","page":null},"wolf20482":{"name":"wolf20482","alias":"wolf20482","url":"https://github.com/wolf20482","imageURL":"https://github.com/wolf20482.png","key":"wolf20482","page":null},"YashTotale":{"name":"Yash Totale","alias":"YashTotale","url":"https://github.com/YashTotale","imageURL":"https://github.com/YashTotale.png","key":"YashTotale","page":null},"ykzts":{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts","page":null},"ysulyma":{"name":"Yuri Sulyma","alias":"ysulyma","url":"https://github.com/ysulyma","imageURL":"https://github.com/ysulyma.png","key":"ysulyma","page":null},"yuval-hazaz":{"name":"Yuval Hazaz","alias":"yuval-hazaz","url":"https://github.com/yuval-hazaz","imageURL":"https://github.com/yuval-hazaz.png","key":"yuval-hazaz","page":null},"aarongarciah":{"name":"Aar\xf3n Garc\xeda Herv\xe1s","alias":"aarongarciah","url":"https://github.com/aarongarciah","imageURL":"https://github.com/aarongarciah.png","key":"aarongarciah","page":null},"aeneasr":{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr","page":null},"Alex1304":{"name":"Alex1304","alias":"Alex1304","url":"https://github.com/Alex1304","imageURL":"https://github.com/Alex1304.png","key":"Alex1304","page":null},"borool":{"name":"borool","alias":"borool","url":"https://github.com/borool","imageURL":"https://github.com/borool.png","key":"borool","page":null},"cindygu4":{"name":"Cindy Gu","alias":"cindygu4","url":"https://github.com/cindygu4","imageURL":"https://github.com/cindygu4.png","key":"cindygu4","page":null},"davidmauskop":{"name":"davidmauskop","alias":"davidmauskop","url":"https://github.com/davidmauskop","imageURL":"https://github.com/davidmauskop.png","key":"davidmauskop","page":null},"dgilling":{"name":"Derric Gilling","alias":"dgilling","url":"https://github.com/dgilling","imageURL":"https://github.com/dgilling.png","key":"dgilling","page":null},"francoischalifour":{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour","page":null},"hmil":{"name":"Hadrien Milano","alias":"hmil","url":"https://github.com/hmil","imageURL":"https://github.com/hmil.png","key":"hmil","page":null},"LoicPoullain":{"name":"Lo\xefc Poullain","alias":"LoicPoullain","url":"https://github.com/LoicPoullain","imageURL":"https://github.com/LoicPoullain.png","key":"LoicPoullain","page":null},"matijaSos":{"name":"Matija Sosic","alias":"matijaSos","url":"https://github.com/matijaSos","imageURL":"https://github.com/matijaSos.png","key":"matijaSos","page":null},"mpsq":{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq","page":null},"Romstar":{"name":"Rami","alias":"Romstar","url":"https://github.com/Romstar","imageURL":"https://github.com/Romstar.png","key":"Romstar","page":null},"sarthakkundra":{"name":"Sarthak kundra","alias":"sarthakkundra","url":"https://github.com/sarthakkundra","imageURL":"https://github.com/sarthakkundra.png","key":"sarthakkundra","page":null},"sivaraam":{"name":"Kaartic Sivaraam","alias":"sivaraam","url":"https://github.com/sivaraam","imageURL":"https://github.com/sivaraam.png","key":"sivaraam","page":null},"Varshit07":{"name":"Varshit Shah","alias":"Varshit07","url":"https://github.com/Varshit07","imageURL":"https://github.com/Varshit07.png","key":"Varshit07","page":null},"woodrufs":{"name":"Stephen Woodruff","alias":"woodrufs","url":"https://github.com/woodrufs","imageURL":"https://github.com/woodrufs.png","key":"woodrufs","page":null},"arcanis":{"name":"Ma\xebl Nison","alias":"arcanis","url":"https://github.com/arcanis","imageURL":"https://github.com/arcanis.png","key":"arcanis","page":null},"camiluc":{"name":"camiluc","alias":"camiluc","url":"https://github.com/camiluc","imageURL":"https://github.com/camiluc.png","key":"camiluc","page":null},"AmyrAhmady":{"name":"iAmir","alias":"AmyrAhmady","url":"https://github.com/AmyrAhmady","imageURL":"https://github.com/AmyrAhmady.png","key":"AmyrAhmady","page":null},"belemaire":{"name":"Beno\xeet Lemaire","alias":"belemaire","url":"https://github.com/belemaire","imageURL":"https://github.com/belemaire.png","key":"belemaire","page":null},"davidjgoss":{"name":"David Goss","alias":"davidjgoss","url":"https://github.com/davidjgoss","imageURL":"https://github.com/davidjgoss.png","key":"davidjgoss","page":null},"egbobright":{"name":"Bright Egbo","alias":"egbobright","url":"https://github.com/egbobright","imageURL":"https://github.com/egbobright.png","key":"egbobright","page":null},"haivp3010":{"name":"Hai","alias":"haivp3010","url":"https://github.com/haivp3010","imageURL":"https://github.com/haivp3010.png","key":"haivp3010","page":null},"hong4rc":{"name":"Anh Hong","alias":"hong4rc","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":"hong4rc","page":null},"jcs98":{"name":"Jainam Chirag Shah","alias":"jcs98","url":"https://github.com/jcs98","imageURL":"https://github.com/jcs98.png","key":"jcs98","page":null},"ka1bi4":{"name":"Roman Bug","alias":"ka1bi4","url":"https://github.com/ka1bi4","imageURL":"https://github.com/ka1bi4.png","key":"ka1bi4","page":null},"kenve":{"name":"kenve","alias":"kenve","url":"https://github.com/kenve","imageURL":"https://github.com/kenve.png","key":"kenve","page":null},"nategiraudeau":{"name":"Nate Giraudeau","alias":"nategiraudeau","url":"https://github.com/nategiraudeau","imageURL":"https://github.com/nategiraudeau.png","key":"nategiraudeau","page":null},"ndom91":{"name":"Nico Domino","alias":"ndom91","url":"https://github.com/ndom91","imageURL":"https://github.com/ndom91.png","key":"ndom91","page":null},"rarkins":{"name":"Rhys Arkins","alias":"rarkins","url":"https://github.com/rarkins","imageURL":"https://github.com/rarkins.png","key":"rarkins","page":null},"sigewuzhere":{"name":"Gergely Sinka","alias":"sigewuzhere","url":"https://github.com/sigewuzhere","imageURL":"https://github.com/sigewuzhere.png","key":"sigewuzhere","page":null},"smcelhinney":{"name":"Stephen McElhinney","alias":"smcelhinney","url":"https://github.com/smcelhinney","imageURL":"https://github.com/smcelhinney.png","key":"smcelhinney","page":null},"ThakurKarthik":{"name":"Thakur Karthik","alias":"ThakurKarthik","url":"https://github.com/ThakurKarthik","imageURL":"https://github.com/ThakurKarthik.png","key":"ThakurKarthik","page":null},"vanbasten17":{"name":"Marc Rabat Pla","alias":"vanbasten17","url":"https://github.com/vanbasten17","imageURL":"https://github.com/vanbasten17.png","key":"vanbasten17","page":null},"weareoutman":{"name":"Shenwei Wang","alias":"weareoutman","url":"https://github.com/weareoutman","imageURL":"https://github.com/weareoutman.png","key":"weareoutman","page":null},"ylemkimon":{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon","page":null},"aakhtar3":{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3","page":null},"abhishektiwari":{"name":"Abhishek Tiwari","alias":"abhishektiwari","url":"https://github.com/abhishektiwari","imageURL":"https://github.com/abhishektiwari.png","key":"abhishektiwari","page":null},"fanny":{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny","page":null},"honlyHuang":{"name":"honlyHuang","alias":"honlyHuang","url":"https://github.com/honlyHuang","imageURL":"https://github.com/honlyHuang.png","key":"honlyHuang","page":null},"imskr":{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr","page":null},"jagracey":{"name":"John Gracey","alias":"jagracey","url":"https://github.com/jagracey","imageURL":"https://github.com/jagracey.png","key":"jagracey","page":null},"russtaylor":{"name":"Russ Taylor","alias":"russtaylor","url":"https://github.com/russtaylor","imageURL":"https://github.com/russtaylor.png","key":"russtaylor","page":null},"saintmalik":{"name":"SaintMalik","alias":"saintmalik","url":"https://github.com/saintmalik","imageURL":"https://github.com/saintmalik.png","key":"saintmalik","page":null},"shubhamzanwar":{"name":"Shubham Zanwar","alias":"shubhamzanwar","url":"https://github.com/shubhamzanwar","imageURL":"https://github.com/shubhamzanwar.png","key":"shubhamzanwar","page":null},"UmairKamran":{"name":"Umair Kamran","alias":"UmairKamran","url":"https://github.com/UmairKamran","imageURL":"https://github.com/UmairKamran.png","key":"UmairKamran","page":null},"utkarsh867":{"name":"Utkarsh Goel","alias":"utkarsh867","url":"https://github.com/utkarsh867","imageURL":"https://github.com/utkarsh867.png","key":"utkarsh867","page":null},"abadon7":{"name":"Henry V\xe9lez","alias":"abadon7","url":"https://github.com/abadon7","imageURL":"https://github.com/abadon7.png","key":"abadon7","page":null},"anru":{"name":"Andrey Rublev","alias":"anru","url":"https://github.com/anru","imageURL":"https://github.com/anru.png","key":"anru","page":null},"ayshiff":{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff","page":null},"jeremyhager":{"name":"Jeremy Hager","alias":"jeremyhager","url":"https://github.com/jeremyhager","imageURL":"https://github.com/jeremyhager.png","key":"jeremyhager","page":null},"muskanvk":{"name":"Muskan Kumar","alias":"muskanvk","url":"https://github.com/muskanvk","imageURL":"https://github.com/muskanvk.png","key":"muskanvk","page":null},"timgates42":{"name":"Tim Gates","alias":"timgates42","url":"https://github.com/timgates42","imageURL":"https://github.com/timgates42.png","key":"timgates42","page":null},"ashscodes":{"name":"Ash","alias":"ashscodes","url":"https://github.com/ashscodes","imageURL":"https://github.com/ashscodes.png","key":"ashscodes","page":null},"josephMG":{"name":"josephMG","alias":"josephMG","url":"https://github.com/josephMG","imageURL":"https://github.com/josephMG.png","key":"josephMG","page":null},"rutikwankhade":{"name":"Rutik Wankhade","alias":"rutikwankhade","url":"https://github.com/rutikwankhade","imageURL":"https://github.com/rutikwankhade.png","key":"rutikwankhade","page":null},"samsisle":{"name":"Sam Ko","alias":"samsisle","url":"https://github.com/samsisle","imageURL":"https://github.com/samsisle.png","key":"samsisle","page":null},"adinaja":{"name":"adinaja","alias":"adinaja","url":"https://github.com/adinaja","imageURL":"https://github.com/adinaja.png","key":"adinaja","page":null},"ajifrank75":{"name":"Franklyn Chisom","alias":"ajifrank75","url":"https://github.com/ajifrank75","imageURL":"https://github.com/ajifrank75.png","key":"ajifrank75","page":null},"Ako92":{"name":"Ali Hosseini","alias":"Ako92","url":"https://github.com/Ako92","imageURL":"https://github.com/Ako92.png","key":"Ako92","page":null},"amy-lei":{"name":"Amy Lei","alias":"amy-lei","url":"https://github.com/amy-lei","imageURL":"https://github.com/amy-lei.png","key":"amy-lei","page":null},"anshulrgoyal":{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal","page":null},"arcvats":{"name":"Archit","alias":"arcvats","url":"https://github.com/arcvats","imageURL":"https://github.com/arcvats.png","key":"arcvats","page":null},"arthur-flam":{"name":"Arthur Flam","alias":"arthur-flam","url":"https://github.com/arthur-flam","imageURL":"https://github.com/arthur-flam.png","key":"arthur-flam","page":null},"BogdanDor":{"name":"Bogdan Doroschenko","alias":"BogdanDor","url":"https://github.com/BogdanDor","imageURL":"https://github.com/BogdanDor.png","key":"BogdanDor","page":null},"boosh511":{"name":"alex busnelli","alias":"boosh511","url":"https://github.com/boosh511","imageURL":"https://github.com/boosh511.png","key":"boosh511","page":null},"Danon":{"name":"Daniel Wilkowski","alias":"Danon","url":"https://github.com/Danon","imageURL":"https://github.com/Danon.png","key":"Danon","page":null},"Drewbi":{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi","page":null},"dschaller":{"name":"Derek","alias":"dschaller","url":"https://github.com/dschaller","imageURL":"https://github.com/dschaller.png","key":"dschaller","page":null},"FocalChord":{"name":"Nisarag","alias":"FocalChord","url":"https://github.com/FocalChord","imageURL":"https://github.com/FocalChord.png","key":"FocalChord","page":null},"govardhan-srinivas":{"name":"Govardhan Srinivas","alias":"govardhan-srinivas","url":"https://github.com/govardhan-srinivas","imageURL":"https://github.com/govardhan-srinivas.png","key":"govardhan-srinivas","page":null},"hsluoyz":{"name":"Yang Luo","alias":"hsluoyz","url":"https://github.com/hsluoyz","imageURL":"https://github.com/hsluoyz.png","key":"hsluoyz","page":null},"JeanMarcSaad":{"name":"Jean-Marc Saad","alias":"JeanMarcSaad","url":"https://github.com/JeanMarcSaad","imageURL":"https://github.com/JeanMarcSaad.png","key":"JeanMarcSaad","page":null},"JohnnyCrazy":{"name":"Jonas Dellinger","alias":"JohnnyCrazy","url":"https://github.com/JohnnyCrazy","imageURL":"https://github.com/JohnnyCrazy.png","key":"JohnnyCrazy","page":null},"Jonathannsegal":{"name":"Jonathan","alias":"Jonathannsegal","url":"https://github.com/Jonathannsegal","imageURL":"https://github.com/Jonathannsegal.png","key":"Jonathannsegal","page":null},"lebogangolifant":{"name":"lebogang Olifant","alias":"lebogangolifant","url":"https://github.com/lebogangolifant","imageURL":"https://github.com/lebogangolifant.png","key":"lebogangolifant","page":null},"leoigel":{"name":"leoigel","alias":"leoigel","url":"https://github.com/leoigel","imageURL":"https://github.com/leoigel.png","key":"leoigel","page":null},"mecm1993":{"name":"Manuel Cepeda","alias":"mecm1993","url":"https://github.com/mecm1993","imageURL":"https://github.com/mecm1993.png","key":"mecm1993","page":null},"MirzayevFarid":{"name":"Mirzayev Farid","alias":"MirzayevFarid","url":"https://github.com/MirzayevFarid","imageURL":"https://github.com/MirzayevFarid.png","key":"MirzayevFarid","page":null},"nebrelbug":{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug","page":null},"olawanlejoel":{"name":"Olawanle Joel","alias":"olawanlejoel","url":"https://github.com/olawanlejoel","imageURL":"https://github.com/olawanlejoel.png","key":"olawanlejoel","page":null},"orta":{"name":"Orta Therox","alias":"orta","url":"https://github.com/orta","imageURL":"https://github.com/orta.png","key":"orta","page":null},"shalinikumari50":{"name":"shalinikumari50","alias":"shalinikumari50","url":"https://github.com/shalinikumari50","imageURL":"https://github.com/shalinikumari50.png","key":"shalinikumari50","page":null},"Souravdey777":{"name":"Sourav Dey","alias":"Souravdey777","url":"https://github.com/Souravdey777","imageURL":"https://github.com/Souravdey777.png","key":"Souravdey777","page":null},"thehanimo":{"name":"Hani Mohammed","alias":"thehanimo","url":"https://github.com/thehanimo","imageURL":"https://github.com/thehanimo.png","key":"thehanimo","page":null},"tolunayakbulut":{"name":"Tolunay Akbulut","alias":"tolunayakbulut","url":"https://github.com/tolunayakbulut","imageURL":"https://github.com/tolunayakbulut.png","key":"tolunayakbulut","page":null},"Vinnl":{"name":"Vincent","alias":"Vinnl","url":"https://github.com/Vinnl","imageURL":"https://github.com/Vinnl.png","key":"Vinnl","page":null},"BuckyMaler":{"name":"Bucky Maler","alias":"BuckyMaler","url":"https://github.com/BuckyMaler","imageURL":"https://github.com/BuckyMaler.png","key":"BuckyMaler","page":null},"mdfaizan7":{"name":"Faizan","alias":"mdfaizan7","url":"https://github.com/mdfaizan7","imageURL":"https://github.com/mdfaizan7.png","key":"mdfaizan7","page":null},"hobadams":{"name":"Hob Adams","alias":"hobadams","url":"https://github.com/hobadams","imageURL":"https://github.com/hobadams.png","key":"hobadams","page":null},"aladin002dz":{"name":"Mahfoudh Arous","alias":"aladin002dz","url":"https://github.com/aladin002dz","imageURL":"https://github.com/aladin002dz.png","key":"aladin002dz","page":null},"aldeed":{"name":"Eric Dobbertin","alias":"aldeed","url":"https://github.com/aldeed","imageURL":"https://github.com/aldeed.png","key":"aldeed","page":null},"amirulahmad":{"name":"Amirul Ahmad","alias":"amirulahmad","url":"https://github.com/amirulahmad","imageURL":"https://github.com/amirulahmad.png","key":"amirulahmad","page":null},"ayan-b":{"name":"Ayan Banerjee","alias":"ayan-b","url":"https://github.com/ayan-b","imageURL":"https://github.com/ayan-b.png","key":"ayan-b","page":null},"codemonkey800":{"name":"Jeremy Asuncion","alias":"codemonkey800","url":"https://github.com/codemonkey800","imageURL":"https://github.com/codemonkey800.png","key":"codemonkey800","page":null},"danielhochman":{"name":"Daniel Hochman","alias":"danielhochman","url":"https://github.com/danielhochman","imageURL":"https://github.com/danielhochman.png","key":"danielhochman","page":null},"dpkg":{"name":"Deepak Giri","alias":"dpkg","url":"https://github.com/dpkg","imageURL":"https://github.com/dpkg.png","key":"dpkg","page":null},"ehsanjso":{"name":"ehsan jso","alias":"ehsanjso","url":"https://github.com/ehsanjso","imageURL":"https://github.com/ehsanjso.png","key":"ehsanjso","page":null},"eKhattak":{"name":"Arsalan Khattak","alias":"eKhattak","url":"https://github.com/eKhattak","imageURL":"https://github.com/eKhattak.png","key":"eKhattak","page":null},"hi-matbub":{"name":"matbub","alias":"hi-matbub","url":"https://github.com/hi-matbub","imageURL":"https://github.com/hi-matbub.png","key":"hi-matbub","page":null},"jordanliu":{"name":"Jordan Liu","alias":"jordanliu","url":"https://github.com/jordanliu","imageURL":"https://github.com/jordanliu.png","key":"jordanliu","page":null},"pcowgill":{"name":"Paul Cowgill","alias":"pcowgill","url":"https://github.com/pcowgill","imageURL":"https://github.com/pcowgill.png","key":"pcowgill","page":null},"svtfrida":{"name":"Frida Hjelm","alias":"svtfrida","url":"https://github.com/svtfrida","imageURL":"https://github.com/svtfrida.png","key":"svtfrida","page":null},"taylorallen0913":{"name":"Taylor Allen","alias":"taylorallen0913","url":"https://github.com/taylorallen0913","imageURL":"https://github.com/taylorallen0913.png","key":"taylorallen0913","page":null},"xtellurian":{"name":"Rian Finnegan","alias":"xtellurian","url":"https://github.com/xtellurian","imageURL":"https://github.com/xtellurian.png","key":"xtellurian","page":null},"belokonm":{"name":"belokonm","alias":"belokonm","url":"https://github.com/belokonm","imageURL":"https://github.com/belokonm.png","key":"belokonm","page":null},"guillaumejacquart":{"name":"Guillaume Jacquart","alias":"guillaumejacquart","url":"https://github.com/guillaumejacquart","imageURL":"https://github.com/guillaumejacquart.png","key":"guillaumejacquart","page":null},"jsjoeio":{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio","page":null},"Nishikoh":{"name":"Koki Nishihara","alias":"Nishikoh","url":"https://github.com/Nishikoh","imageURL":"https://github.com/Nishikoh.png","key":"Nishikoh","page":null},"pglezen":{"name":"Paul Glezen","alias":"pglezen","url":"https://github.com/pglezen","imageURL":"https://github.com/pglezen.png","key":"pglezen","page":null},"tetunori":{"name":"tetunori","alias":"tetunori","url":"https://github.com/tetunori","imageURL":"https://github.com/tetunori.png","key":"tetunori","page":null},"TomBrien":{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien","page":null},"jmcshane":{"name":"James McShane","alias":"jmcshane","url":"https://github.com/jmcshane","imageURL":"https://github.com/jmcshane.png","key":"jmcshane","page":null},"kasperp":{"name":"Kasper B\xf8gebjerg Pedersen","alias":"kasperp","url":"https://github.com/kasperp","imageURL":"https://github.com/kasperp.png","key":"kasperp","page":null},"mrmuhammadali":{"name":"Muhammad Ali","alias":"mrmuhammadali","url":"https://github.com/mrmuhammadali","imageURL":"https://github.com/mrmuhammadali.png","key":"mrmuhammadali","page":null},"piotros":{"name":"Piotr Baran","alias":"piotros","url":"https://github.com/piotros","imageURL":"https://github.com/piotros.png","key":"piotros","page":null},"s-pace":{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace","page":null},"iamrajiv":{"name":"Rajiv Singh","alias":"iamrajiv","url":"https://github.com/iamrajiv","imageURL":"https://github.com/iamrajiv.png","key":"iamrajiv","page":null},"jcomack":{"name":"Jimmy","alias":"jcomack","url":"https://github.com/jcomack","imageURL":"https://github.com/jcomack.png","key":"jcomack","page":null},"jdeniau":{"name":"Julien Deniau","alias":"jdeniau","url":"https://github.com/jdeniau","imageURL":"https://github.com/jdeniau.png","key":"jdeniau","page":null},"jonnynabors":{"name":"Jonny Nabors","alias":"jonnynabors","url":"https://github.com/jonnynabors","imageURL":"https://github.com/jonnynabors.png","key":"jonnynabors","page":null},"marcosvega91":{"name":"Marco Moretti","alias":"marcosvega91","url":"https://github.com/marcosvega91","imageURL":"https://github.com/marcosvega91.png","key":"marcosvega91","page":null},"AnayoOleru":{"name":"Anayo Oleru","alias":"AnayoOleru","url":"https://github.com/AnayoOleru","imageURL":"https://github.com/AnayoOleru.png","key":"AnayoOleru","page":null},"jaylees14":{"name":"Jay Lees","alias":"jaylees14","url":"https://github.com/jaylees14","imageURL":"https://github.com/jaylees14.png","key":"jaylees14","page":null},"JoseRenan":{"name":"Jos\xe9 Renan","alias":"JoseRenan","url":"https://github.com/JoseRenan","imageURL":"https://github.com/JoseRenan.png","key":"JoseRenan","page":null},"kamilkisiela":{"name":"Kamil Kisiela","alias":"kamilkisiela","url":"https://github.com/kamilkisiela","imageURL":"https://github.com/kamilkisiela.png","key":"kamilkisiela","page":null},"kripod":{"name":"Krist\xf3f Poduszl\xf3","alias":"kripod","url":"https://github.com/kripod","imageURL":"https://github.com/kripod.png","key":"kripod","page":null},"Noah-Silvera":{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera","page":null},"watzon":{"name":"Chris Watson","alias":"watzon","url":"https://github.com/watzon","imageURL":"https://github.com/watzon.png","key":"watzon","page":null},"yatki":{"name":"Mehmet Yatk\u0131","alias":"yatki","url":"https://github.com/yatki","imageURL":"https://github.com/yatki.png","key":"yatki","page":null},"cangencer":{"name":"Can Gencer","alias":"cangencer","url":"https://github.com/cangencer","imageURL":"https://github.com/cangencer.png","key":"cangencer","page":null},"iWun":{"name":"Richard Chan","alias":"iWun","url":"https://github.com/iWun","imageURL":"https://github.com/iWun.png","key":"iWun","page":null},"38elements":{"name":"38elements","alias":"38elements","url":"https://github.com/38elements","imageURL":"https://github.com/38elements.png","key":"38elements","page":null},"bravo-kernel":{"name":"bravo-kernel","alias":"bravo-kernel","url":"https://github.com/bravo-kernel","imageURL":"https://github.com/bravo-kernel.png","key":"bravo-kernel","page":null},"elviswolcott":{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott","page":null},"fakela":{"name":"Favour Kelvin","alias":"fakela","url":"https://github.com/fakela","imageURL":"https://github.com/fakela.png","key":"fakela","page":null},"GermaVinsmoke":{"name":"GermaVinsmoke","alias":"GermaVinsmoke","url":"https://github.com/GermaVinsmoke","imageURL":"https://github.com/GermaVinsmoke.png","key":"GermaVinsmoke","page":null},"iamkun":{"name":"iamkun","alias":"iamkun","url":"https://github.com/iamkun","imageURL":"https://github.com/iamkun.png","key":"iamkun","page":null},"jeffersonlicet":{"name":"Jefferson Licet","alias":"jeffersonlicet","url":"https://github.com/jeffersonlicet","imageURL":"https://github.com/jeffersonlicet.png","key":"jeffersonlicet","page":null},"KohheePeace":{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace","page":null},"lukecollier":{"name":"Luke Collier","alias":"lukecollier","url":"https://github.com/lukecollier","imageURL":"https://github.com/lukecollier.png","key":"lukecollier","page":null},"mohrash92":{"name":"mohrash92","alias":"mohrash92","url":"https://github.com/mohrash92","imageURL":"https://github.com/mohrash92.png","key":"mohrash92","page":null},"nisarhassan12":{"name":"Nisar Hassan Naqvi","alias":"nisarhassan12","url":"https://github.com/nisarhassan12","imageURL":"https://github.com/nisarhassan12.png","key":"nisarhassan12","page":null},"paularmstrong":{"name":"Paul Armstrong","alias":"paularmstrong","url":"https://github.com/paularmstrong","imageURL":"https://github.com/paularmstrong.png","key":"paularmstrong","page":null},"phoqe":{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe","page":null},"rlamana":{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana","page":null},"ZachJW34":{"name":"ZachJW34","alias":"ZachJW34","url":"https://github.com/ZachJW34","imageURL":"https://github.com/ZachJW34.png","key":"ZachJW34","page":null},"amilajack":{"name":"Amila Welihinda","alias":"amilajack","url":"https://github.com/amilajack","imageURL":"https://github.com/amilajack.png","key":"amilajack","page":null},"balloob":{"name":"Paulus Schoutsen","alias":"balloob","url":"https://github.com/balloob","imageURL":"https://github.com/balloob.png","key":"balloob","page":null},"deniaz":{"name":"Robert","alias":"deniaz","url":"https://github.com/deniaz","imageURL":"https://github.com/deniaz.png","key":"deniaz","page":null},"hassanfarid":{"name":"Hassan Farid","alias":"hassanfarid","url":"https://github.com/hassanfarid","imageURL":"https://github.com/hassanfarid.png","key":"hassanfarid","page":null},"jartuso":{"name":"jartuso","alias":"jartuso","url":"https://github.com/jartuso","imageURL":"https://github.com/jartuso.png","key":"jartuso","page":null},"mohamedsgap":{"name":"Mohamed Abdel Nasser","alias":"mohamedsgap","url":"https://github.com/mohamedsgap","imageURL":"https://github.com/mohamedsgap.png","key":"mohamedsgap","page":null},"scottilee":{"name":"Scott Lee","alias":"scottilee","url":"https://github.com/scottilee","imageURL":"https://github.com/scottilee.png","key":"scottilee","page":null},"Zhencha0Cai":{"name":"Zhenchao Cai","alias":"Zhencha0Cai","url":"https://github.com/Zhencha0Cai","imageURL":"https://github.com/Zhencha0Cai.png","key":"Zhencha0Cai","page":null},"awalias":{"name":"awalias","alias":"awalias","url":"https://github.com/awalias","imageURL":"https://github.com/awalias.png","key":"awalias","page":null},"edwandr":{"name":"Elie Dutheil","alias":"edwandr","url":"https://github.com/edwandr","imageURL":"https://github.com/edwandr.png","key":"edwandr","page":null},"erubi":{"name":"Evan Rubinton","alias":"erubi","url":"https://github.com/erubi","imageURL":"https://github.com/erubi.png","key":"erubi","page":null},"galhavivi":{"name":"Gal Havivi","alias":"galhavivi","url":"https://github.com/galhavivi","imageURL":"https://github.com/galhavivi.png","key":"galhavivi","page":null},"Jeffail":{"name":"Ashley Jeffs","alias":"Jeffail","url":"https://github.com/Jeffail","imageURL":"https://github.com/Jeffail.png","key":"Jeffail","page":null},"jjwill":{"name":"Joshua Williams","alias":"jjwill","url":"https://github.com/jjwill","imageURL":"https://github.com/jjwill.png","key":"jjwill","page":null},"jonathanrdelgado":{"name":"Jonathan Delgado","alias":"jonathanrdelgado","url":"https://github.com/jonathanrdelgado","imageURL":"https://github.com/jonathanrdelgado.png","key":"jonathanrdelgado","page":null},"mterrel":{"name":"Mark Terrel","alias":"mterrel","url":"https://github.com/mterrel","imageURL":"https://github.com/mterrel.png","key":"mterrel","page":null},"OndrejNepozitek":{"name":"Ond\u0159ej Nepo\u017eitek","alias":"OndrejNepozitek","url":"https://github.com/OndrejNepozitek","imageURL":"https://github.com/OndrejNepozitek.png","key":"OndrejNepozitek","page":null},"sdowding":{"name":"Scott Dowding","alias":"sdowding","url":"https://github.com/sdowding","imageURL":"https://github.com/sdowding.png","key":"sdowding","page":null},"trustyoo86":{"name":"Hanseung Yoo","alias":"trustyoo86","url":"https://github.com/trustyoo86","imageURL":"https://github.com/trustyoo86.png","key":"trustyoo86","page":null},"wgao19":{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19","page":null},"endiliey":{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey","page":null},"janko":{"name":"Janko Marohni\u0107","alias":"janko","url":"https://github.com/janko","imageURL":"https://github.com/janko.png","key":"janko","page":null},"nickmccurdy":{"name":"Nick McCurdy","alias":"nickmccurdy","url":"https://github.com/nickmccurdy","imageURL":"https://github.com/nickmccurdy.png","key":"nickmccurdy","page":null},"TransmissionsDev":{"name":"t11s","alias":"TransmissionsDev","url":"https://github.com/TransmissionsDev","imageURL":"https://github.com/TransmissionsDev.png","key":"TransmissionsDev","page":null},"FeynmanDNA":{"name":"KYY","alias":"FeynmanDNA","url":"https://github.com/FeynmanDNA","imageURL":"https://github.com/FeynmanDNA.png","key":"FeynmanDNA","page":null},"qshiwu":{"name":"kaichu","alias":"qshiwu","url":"https://github.com/qshiwu","imageURL":"https://github.com/qshiwu.png","key":"qshiwu","page":null},"shivangna":{"name":"Shivangna Kaistha","alias":"shivangna","url":"https://github.com/shivangna","imageURL":"https://github.com/shivangna.png","key":"shivangna","page":null},"binarylogic":{"name":"Binary Logic","alias":"binarylogic","url":"https://github.com/binarylogic","imageURL":"https://github.com/binarylogic.png","key":"binarylogic","page":null},"gimdongwoo":{"name":"Dongwoo Gim","alias":"gimdongwoo","url":"https://github.com/gimdongwoo","imageURL":"https://github.com/gimdongwoo.png","key":"gimdongwoo","page":null},"ericcarboni":{"name":"Eric Carboni","alias":"ericcarboni","url":"https://github.com/ericcarboni","imageURL":"https://github.com/ericcarboni.png","key":"ericcarboni","page":null},"jamiedavenport":{"name":"Jamie Davenport","alias":"jamiedavenport","url":"https://github.com/jamiedavenport","imageURL":"https://github.com/jamiedavenport.png","key":"jamiedavenport","page":null},"kenning":{"name":"Nick McCormick","alias":"kenning","url":"https://github.com/kenning","imageURL":"https://github.com/kenning.png","key":"kenning","page":null},"vinnytheviking":{"name":"Vincent van der Walt","alias":"vinnytheviking","url":"https://github.com/vinnytheviking","imageURL":"https://github.com/vinnytheviking.png","key":"vinnytheviking","page":null}}}},"docusaurus-plugin-ideal-image":{},"docusaurus-theme-mermaid":{},"feature-requests-plugin":{},"client-module-test-plugin":{},"docusaurus-theme-live-codeblock":{},"swizzle-theme-tests":{},"docusaurus-bootstrap-plugin":{},"docusaurus-mdx-fallback-plugin":{}}}')}}]); \ No newline at end of file diff --git a/assets/js/3c616b11.eff529cc.js b/assets/js/3c616b11.eff529cc.js new file mode 100644 index 000000000000..54795fa4768f --- /dev/null +++ b/assets/js/3c616b11.eff529cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59167],{67261:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var o=s(24246),n=s(71670);const i={},r=void 0,a={id:"tests/ascii/folder/\xe6\xf8\xe5",title:"\xe6\xf8\xe5",description:"Dogfood test for https://github.com/facebook/docusaurus/pull/8137",source:"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx",sourceDirName:"tests/ascii/folder",slug:"/tests/ascii/folder/\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Admonitions tests",permalink:"/tests/docs/tests/admonitions"},next:{title:"index",permalink:"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},c={},d=[];function u(t){const e={a:"a",p:"p",...(0,n.a)(),...t.components};return(0,o.jsxs)(e.p,{children:["Dogfood test for ",(0,o.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/8137",children:"https://github.com/facebook/docusaurus/pull/8137"})]})}function l(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u(t)}l.displayName="MDXContent(_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>a,a:()=>r});var o=s(27378);const n={},i=o.createContext(n);function r(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:r(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c616b11.fbe1d614.js b/assets/js/3c616b11.fbe1d614.js deleted file mode 100644 index 190bb1ef45a1..000000000000 --- a/assets/js/3c616b11.fbe1d614.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59167],{67261:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var o=s(24246),n=s(71670);const i={},r=void 0,c={id:"tests/ascii/folder/\xe6\xf8\xe5",title:"\xe6\xf8\xe5",description:"Dogfood test for https://github.com/facebook/docusaurus/pull/8137",source:"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx",sourceDirName:"tests/ascii/folder",slug:"/tests/ascii/folder/\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Admonitions tests",permalink:"/tests/docs/tests/admonitions"},next:{title:"index",permalink:"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},a={},d=[];function u(t){const e={a:"a",p:"p",...(0,n.a)(),...t.components};return(0,o.jsxs)(e.p,{children:["Dogfood test for ",(0,o.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/8137",children:"https://github.com/facebook/docusaurus/pull/8137"})]})}function l(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u(t)}l.displayName="MDXContent(_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>r});var o=s(27378);const n={},i=o.createContext(n);function r(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:r(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ce9624a.38af843c.js b/assets/js/3ce9624a.38af843c.js new file mode 100644 index 000000000000..c79345589fe6 --- /dev/null +++ b/assets/js/3ce9624a.38af843c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85341],{7575:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>n,metadata:()=>u,toc:()=>c});var i=r(24246),t=r(71670);const n={},o="Awesome Resources",u={id:"resources",title:"Awesome Resources",description:"A curated list of interesting Docusaurus community projects.",source:"@site/community/2-resources.mdx",sourceDirName:".",slug:"/resources",permalink:"/community/resources",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:2,frontMatter:{},sidebar:"community",previous:{title:"Team",permalink:"/community/team"},next:{title:"Contributing",permalink:"/community/contributing"}},a={},c=[{value:"Community documentation",id:"community-documentation",level:2},{value:"Videos",id:"videos",level:2},{value:"Articles",id:"articles",level:2},{value:"Showcase",id:"showcase",level:2},{value:"Community plugins",id:"community-plugins",level:2},{value:"Search",id:"search",level:3},{value:"Integrations",id:"integrations",level:3},{value:"Features",id:"features",level:3},{value:"Enterprise usage",id:"enterprise-usage",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"awesome-resources",children:"Awesome Resources"})}),"\n",(0,i.jsx)(s.p,{children:"A curated list of interesting Docusaurus community projects."}),"\n",(0,i.jsx)(s.h2,{id:"community-documentation",children:"Community documentation"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.strong,{children:(0,i.jsx)(s.a,{href:"https://docusaurus.community",children:"Docusaurus.community"})})," site extends the ",(0,i.jsx)(s.a,{href:"/docs",children:"official docs"})," with more complex examples and full articles that recommend best practices and provide solutions to common problems."]}),"\n",(0,i.jsx)(s.p,{children:"It is also a full Docusaurus application just like our main site, so customization and experimentation examples are perfectly suited to be hosted there."}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsx)(s.p,{children:"We might allow direct links to be added in our official documentation that point to the community documentation, on a case-by-case basis, if the community finds such links to articles useful."}),(0,i.jsx)(s.p,{children:"We are also contemplating further integration into the official documentation at some point in the future."})]}),"\n",(0,i.jsx)(s.h2,{id:"videos",children:"Videos"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"F8 2019: Using Docusaurus to Create Open Source Websites"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"articles",children:"Articles"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/webbertakken/awesome-docusaurus#readme",children:"Awesome Docusaurus"})," - Community curated list of Docusaurus resources."]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://dev.to/mrmuhammadali/live-code-editing-in-docusaurus-ux-at-its-best-2hj1",children:"Live code editing in Docusaurus"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://blog.johnnyreilly.com/definitive-guide-to-migrating-from-blogger-to-docusaurus",children:"The definitive guide to migrating from Blogger to Docusaurus"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"showcase",children:"Showcase"}),"\n",(0,i.jsxs)(s.p,{children:["See the ",(0,i.jsx)("a",{href:r(66448).ZP("showcase"),children:"showcase"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"community-plugins",children:"Community plugins"}),"\n",(0,i.jsx)(s.h3,{id:"search",children:"Search"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/daldridge/docusaurus-plugin-lunr",children:"docusaurus-plugin-lunr"})," - Docusaurus plugin to create a local search index for use with Lunr.js"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/lelouch77/docusaurus-lunr-search",children:"docusaurus-lunr-search"})," - Offline Search for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/cmfcmf/docusaurus-search-local",children:"docusaurus-search-local"})," - Offline/local search for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"@easyops-cn/docusaurus-search-local"})," - Offline/local search for Docusaurus (language of zh supported)"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - Docusaurus plugin for ",(0,i.jsx)(s.a,{href:"https://typesense.org/docs/latest/guide/docsearch.html",children:"Typesense DocSearch"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/motifland/markprompt-js/tree/main/packages/docusaurus-theme-search",children:"@markprompt/docusaurus-theme-search"})," - Docusaurus plugin to add generative AI / LLM-powered docs search, powered by ",(0,i.jsx)(s.a,{href:"https://markprompt.com",children:"Markprompt"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/tauri-apps/meilisearch-docsearch",children:"meilisearch-docsearch"})," - Docusaurus plugin for ",(0,i.jsx)(s.a,{href:"https://www.meilisearch.com",children:"Meilisearch"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus",children:"@orama/plugin-docusaurus"})," - ",(0,i.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v2"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus-v3",children:"@orama/plugin-docusaurus-v3"})," - ",(0,i.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v3"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://getcanary.dev/docs/integrations/docusaurus.html",children:"@getcanary/docusaurus-theme-search-pagefind"})," - Create ",(0,i.jsx)(s.a,{href:"https://pagefind.app/",children:"Pagefind"})," index and use ",(0,i.jsx)(s.a,{href:"https://github.com/fastrepl/canary",children:"Canary"})," as UI primitives."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"integrations",children:"Integrations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/jonnynabors/docusaurus2-dotenv",children:"docusaurus2-dotenv"})," - A Docusaurus plugin that supports dotenv and other environment variables"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/PostHog/posthog-docusaurus",children:"posthog-docusaurus"})," - Integrate ",(0,i.jsx)(s.a,{href:"https://posthog.com/",children:"PostHog"})," product analytics with Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/Moesif/docusaurus-plugin-moesif",children:"docusaurus-plugin-moesif"})," - Adds ",(0,i.jsx)(s.a,{href:"https://www.moesif.com/",children:"Moesif API Analytics"})," to track user behavior and pinpoint where developers drop off in your activation funnel."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/sgromkov/docusaurus-plugin-yandex-metrica",children:"docusaurus-plugin-yandex-metrica"})," - Adds ",(0,i.jsx)(s.a,{href:"https://metrika.yandex.ru/",children:"Yandex Metrika"})," counter for evaluating site traffic and analyzing user behavior."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/saucelabs/docusaurus-theme-github-codeblock",children:"docusaurus-theme-github-codeblock"}),". A Docusaurus plugin that supports referencing code examples from public GitHub repositories"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/jean-humann/docs-to-pdf",children:"docs-to-pdf"})," - Generate documentation into PDF format"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:"docusaurus-plugin-sass"})," - Sass/SCSS stylesheets support"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rdilweb/docusaurus-plugin-remote-content",children:"docusaurus-plugin-remote-content"})," - A Docusaurus plugin that allows you to fetch content from remote sources"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/graphql-markdown/graphql-markdown",children:"@graphql-markdown/docusaurus"})," - A Docusaurus plugin for generating documentation from GraphQL schemas"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen-typescript",children:"docusaurus-plugin-react-docgen-typescript"})," - A Docusaurus plugin for loading type annotations from ",(0,i.jsx)(s.code,{children:"react-docgen-typescript"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen",children:"docusaurus-plugin-react-docgen"})," - A Docusaurus plugin for loading type annotations from ",(0,i.jsx)(s.code,{children:"react-docgen"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-module-alias",children:"docusaurus-plugin-module-alias"})," - A Docusaurus plugin for quickly aliasing local modules"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/protobuffet/docusaurus-protobuffet",children:"docusaurus-protobuffet"})," - Docusaurus toolset for Protobuf contract documentation"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/signcl/docusaurus-prince-pdf",children:"docusaurus-prince-pdf"})," - Generate PDF with PrinceXML for better font subsetting and ToC features. Support Docusaurus sites"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"})," - A Docusaurus preset for integrating OpenAPI documentation into your docs with ",(0,i.jsx)(s.a,{href:"https://github.com/redocly/redoc",children:"Redoc"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/flexanalytics/plugin-image-zoom",children:"plugin-image-zoom"})," - An Image Zoom plugin for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/packages/docusaurus-plugin-typedoc",children:"docusaurus-plugin-typedoc"})," - A Docusaurus plugin to build documentation with ",(0,i.jsx)(s.a,{href:"https://typedoc.org/",children:"TypeDoc"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/PaloAltoNetworks/docusaurus-openapi-docs",children:"docusaurus-openapi-docs"})," - A Docusaurus plugin and theme for generating interactive OpenAPI docs"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/moojing/docusaurus-post-generator",children:"docusaurus-post-generator"})," - A command line tool for user to add a blog/doc file quickly by command like ",(0,i.jsx)(s.code,{children:"yarn gen-post new [template] [post_name]"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/Arsero/docusaurus-graph",children:"docusaurus-graph"})," - A Docusaurus plugin for generating a graph view showing links between documentation files."]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"enterprise-usage",children:"Enterprise usage"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Facebook"}),"\n",(0,i.jsx)(s.li,{children:"Google"}),"\n",(0,i.jsx)(s.li,{children:"Stripe"}),"\n",(0,i.jsx)(s.li,{children:"Algolia"}),"\n",(0,i.jsx)(s.li,{children:"Callstack"}),"\n",(0,i.jsx)(s.li,{children:"Sauce Labs"}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>u,a:()=>o});var i=r(27378);const t={},n=i.createContext(t);function o(e){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function u(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ce9624a.56b819b9.js b/assets/js/3ce9624a.56b819b9.js deleted file mode 100644 index f73e5c2d1380..000000000000 --- a/assets/js/3ce9624a.56b819b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85341],{7575:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>n,metadata:()=>u,toc:()=>c});var i=r(24246),t=r(71670);const n={},o="Awesome Resources",u={id:"resources",title:"Awesome Resources",description:"A curated list of interesting Docusaurus community projects.",source:"@site/community/2-resources.mdx",sourceDirName:".",slug:"/resources",permalink:"/community/resources",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:2,frontMatter:{},sidebar:"community",previous:{title:"Team",permalink:"/community/team"},next:{title:"Contributing",permalink:"/community/contributing"}},a={},c=[{value:"Community documentation",id:"community-documentation",level:2},{value:"Videos",id:"videos",level:2},{value:"Articles",id:"articles",level:2},{value:"Showcase",id:"showcase",level:2},{value:"Community plugins",id:"community-plugins",level:2},{value:"Search",id:"search",level:3},{value:"Integrations",id:"integrations",level:3},{value:"Features",id:"features",level:3},{value:"Enterprise usage",id:"enterprise-usage",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"awesome-resources",children:"Awesome Resources"})}),"\n",(0,i.jsx)(s.p,{children:"A curated list of interesting Docusaurus community projects."}),"\n",(0,i.jsx)(s.h2,{id:"community-documentation",children:"Community documentation"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.strong,{children:(0,i.jsx)(s.a,{href:"https://docusaurus.community",children:"Docusaurus.community"})})," site extends the ",(0,i.jsx)(s.a,{href:"/docs",children:"official docs"})," with more complex examples and full articles that recommend best practices and provide solutions to common problems."]}),"\n",(0,i.jsx)(s.p,{children:"It is also a full Docusaurus application just like our main site, so customization and experimentation examples are perfectly suited to be hosted there."}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsx)(s.p,{children:"We might allow direct links to be added in our official documentation that point to the community documentation, on a case-by-case basis, if the community finds such links to articles useful."}),(0,i.jsx)(s.p,{children:"We are also contemplating further integration into the official documentation at some point in the future."})]}),"\n",(0,i.jsx)(s.h2,{id:"videos",children:"Videos"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"F8 2019: Using Docusaurus to Create Open Source Websites"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"articles",children:"Articles"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/webbertakken/awesome-docusaurus#readme",children:"Awesome Docusaurus"})," - Community curated list of Docusaurus resources."]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://dev.to/mrmuhammadali/live-code-editing-in-docusaurus-ux-at-its-best-2hj1",children:"Live code editing in Docusaurus"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://blog.johnnyreilly.com/definitive-guide-to-migrating-from-blogger-to-docusaurus",children:"The definitive guide to migrating from Blogger to Docusaurus"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"showcase",children:"Showcase"}),"\n",(0,i.jsxs)(s.p,{children:["See the ",(0,i.jsx)("a",{href:r(66448).ZP("showcase"),children:"showcase"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"community-plugins",children:"Community plugins"}),"\n",(0,i.jsx)(s.h3,{id:"search",children:"Search"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/daldridge/docusaurus-plugin-lunr",children:"docusaurus-plugin-lunr"})," - Docusaurus plugin to create a local search index for use with Lunr.js"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/lelouch77/docusaurus-lunr-search",children:"docusaurus-lunr-search"})," - Offline Search for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/cmfcmf/docusaurus-search-local",children:"docusaurus-search-local"})," - Offline/local search for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"@easyops-cn/docusaurus-search-local"})," - Offline/local search for Docusaurus (language of zh supported)"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - Docusaurus plugin for ",(0,i.jsx)(s.a,{href:"https://typesense.org/docs/latest/guide/docsearch.html",children:"Typesense DocSearch"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/motifland/markprompt-js/tree/main/packages/docusaurus-theme-search",children:"@markprompt/docusaurus-theme-search"})," - Docusaurus plugin to add generative AI / LLM-powered docs search, powered by ",(0,i.jsx)(s.a,{href:"https://markprompt.com",children:"Markprompt"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/tauri-apps/meilisearch-docsearch",children:"meilisearch-docsearch"})," - Docusaurus plugin for ",(0,i.jsx)(s.a,{href:"https://www.meilisearch.com",children:"Meilisearch"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus",children:"@orama/plugin-docusaurus"})," - ",(0,i.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v2"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus-v3",children:"@orama/plugin-docusaurus-v3"})," - ",(0,i.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v3"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://getcanary.dev/docs/integrations/docusaurus.html",children:"@getcanary/docusaurus-theme-search-pagefind"})," - Create ",(0,i.jsx)(s.a,{href:"https://pagefind.app/",children:"Pagefind"})," index and use ",(0,i.jsx)(s.a,{href:"https://github.com/fastrepl/canary",children:"Canary"})," as UI primitives."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"integrations",children:"Integrations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/jonnynabors/docusaurus2-dotenv",children:"docusaurus2-dotenv"})," - A Docusaurus plugin that supports dotenv and other environment variables"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/PostHog/posthog-docusaurus",children:"posthog-docusaurus"})," - Integrate ",(0,i.jsx)(s.a,{href:"https://posthog.com/",children:"PostHog"})," product analytics with Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/Moesif/docusaurus-plugin-moesif",children:"docusaurus-plugin-moesif"})," - Adds ",(0,i.jsx)(s.a,{href:"https://www.moesif.com/",children:"Moesif API Analytics"})," to track user behavior and pinpoint where developers drop off in your activation funnel."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/sgromkov/docusaurus-plugin-yandex-metrica",children:"docusaurus-plugin-yandex-metrica"})," - Adds ",(0,i.jsx)(s.a,{href:"https://metrika.yandex.ru/",children:"Yandex Metrika"})," counter for evaluating site traffic and analyzing user behavior."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/saucelabs/docusaurus-theme-github-codeblock",children:"docusaurus-theme-github-codeblock"}),". A Docusaurus plugin that supports referencing code examples from public GitHub repositories"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/jean-humann/docs-to-pdf",children:"docs-to-pdf"})," - Generate documentation into PDF format"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:"docusaurus-plugin-sass"})," - Sass/SCSS stylesheets support"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rdilweb/docusaurus-plugin-remote-content",children:"docusaurus-plugin-remote-content"})," - A Docusaurus plugin that allows you to fetch content from remote sources"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/graphql-markdown/graphql-markdown",children:"@graphql-markdown/docusaurus"})," - A Docusaurus plugin for generating documentation from GraphQL schemas"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen-typescript",children:"docusaurus-plugin-react-docgen-typescript"})," - A Docusaurus plugin for loading type annotations from ",(0,i.jsx)(s.code,{children:"react-docgen-typescript"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen",children:"docusaurus-plugin-react-docgen"})," - A Docusaurus plugin for loading type annotations from ",(0,i.jsx)(s.code,{children:"react-docgen"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-module-alias",children:"docusaurus-plugin-module-alias"})," - A Docusaurus plugin for quickly aliasing local modules"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/protobuffet/docusaurus-protobuffet",children:"docusaurus-protobuffet"})," - Docusaurus toolset for Protobuf contract documentation"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/signcl/docusaurus-prince-pdf",children:"docusaurus-prince-pdf"})," - Generate PDF with PrinceXML for better font subsetting and ToC features. Support Docusaurus sites"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"})," - A Docusaurus preset for integrating OpenAPI documentation into your docs with ",(0,i.jsx)(s.a,{href:"https://github.com/redocly/redoc",children:"Redoc"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/flexanalytics/plugin-image-zoom",children:"plugin-image-zoom"})," - An Image Zoom plugin for Docusaurus"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/packages/docusaurus-plugin-typedoc",children:"docusaurus-plugin-typedoc"})," - A Docusaurus plugin to build documentation with ",(0,i.jsx)(s.a,{href:"https://typedoc.org/",children:"TypeDoc"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/PaloAltoNetworks/docusaurus-openapi-docs",children:"docusaurus-openapi-docs"})," - A Docusaurus plugin and theme for generating interactive OpenAPI docs"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/moojing/docusaurus-post-generator",children:"docusaurus-post-generator"})," - A command line tool for user to add a blog/doc file quickly by command like ",(0,i.jsx)(s.code,{children:"yarn gen-post new [template] [post_name]"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/Arsero/docusaurus-graph",children:"docusaurus-graph"})," - A Docusaurus plugin for generating a graph view showing links between documentation files."]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"enterprise-usage",children:"Enterprise usage"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Facebook"}),"\n",(0,i.jsx)(s.li,{children:"Google"}),"\n",(0,i.jsx)(s.li,{children:"Stripe"}),"\n",(0,i.jsx)(s.li,{children:"Algolia"}),"\n",(0,i.jsx)(s.li,{children:"Callstack"}),"\n",(0,i.jsx)(s.li,{children:"Sauce Labs"}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>u,a:()=>o});var i=r(27378);const t={},n=i.createContext(t);function o(e){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function u(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3dd2dc02.07cf83ff.js b/assets/js/3dd2dc02.07cf83ff.js deleted file mode 100644 index 618326e51bfe..000000000000 --- a/assets/js/3dd2dc02.07cf83ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2176],{77753:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>r});var s=t(24246),o=t(71670);const i={description:"How the Docusaurus client is structured"},l="Client architecture",c={id:"advanced/client",title:"Client architecture",description:"How the Docusaurus client is structured",source:"@site/docs/advanced/client.mdx",sourceDirName:"advanced",slug:"/advanced/client",permalink:"/docs/advanced/client",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{description:"How the Docusaurus client is structured"},sidebar:"docs",previous:{title:"Static site generation",permalink:"/docs/advanced/ssg"},next:{title:"Upgrading Docusaurus",permalink:"/docs/migration"}},a={},r=[{value:"Theme aliases",id:"theme-aliases",level:2},{value:"Client modules",id:"client-modules",level:2},{value:"Client module lifecycles",id:"client-module-lifecycles",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"client-architecture",children:"Client architecture"})}),"\n",(0,s.jsx)(n.h2,{id:"theme-aliases",children:"Theme aliases"}),"\n",(0,s.jsxs)(n.p,{children:["A theme works by exporting a set of components, e.g. ",(0,s.jsx)(n.code,{children:"Navbar"}),", ",(0,s.jsx)(n.code,{children:"Layout"}),", ",(0,s.jsx)(n.code,{children:"Footer"}),", to render the data passed down from plugins. Docusaurus and users use these components by importing them using the ",(0,s.jsx)(n.code,{children:"@theme"})," webpack alias:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import Navbar from '@theme/Navbar';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The alias ",(0,s.jsx)(n.code,{children:"@theme"})," can refer to a few directories, in the following priority:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["A user's ",(0,s.jsx)(n.code,{children:"website/src/theme"})," directory, which is a special directory that has the higher precedence."]}),"\n",(0,s.jsxs)(n.li,{children:["A Docusaurus theme package's ",(0,s.jsx)(n.code,{children:"theme"})," directory."]}),"\n",(0,s.jsx)(n.li,{children:"Fallback components provided by Docusaurus core (usually not needed)."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This is called a ",(0,s.jsx)(n.em,{children:"layered architecture"}),": a higher-priority layer providing the component would shadow a lower-priority layer, making swizzling possible. Given the following structure:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"website\n\u251c\u2500\u2500 node_modules\n\u2502 \u2514\u2500\u2500 @docusaurus/theme-classic\n\u2502 \u2514\u2500\u2500 theme\n\u2502 \u2514\u2500\u2500 Navbar.js\n\u2514\u2500\u2500 src\n \u2514\u2500\u2500 theme\n \u2514\u2500\u2500 Navbar.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"website/src/theme/Navbar.js"})," takes precedence whenever ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is imported. This behavior is called component swizzling. If you are familiar with Objective C where a function's implementation can be swapped during runtime, it's the exact same concept here with changing the target ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is pointing to!"]}),"\n",(0,s.jsxs)(n.p,{children:['We already talked about how the "userland theme" in ',(0,s.jsx)(n.code,{children:"src/theme"})," can re-use a theme component through the ",(0,s.jsx)(n.a,{href:"/docs/swizzling#wrapping",children:(0,s.jsx)(n.code,{children:"@theme-original"})})," alias. One theme package can also wrap a component from another theme, by importing the component from the initial theme, using the ",(0,s.jsx)(n.code,{children:"@theme-init"})," import."]}),"\n",(0,s.jsxs)(n.p,{children:["Here's an example of using this feature to enhance the default theme ",(0,s.jsx)(n.code,{children:"CodeBlock"})," component with a ",(0,s.jsx)(n.code,{children:"react-live"})," playground feature."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import InitialCodeBlock from '@theme-init/CodeBlock';\nimport React from 'react';\n\nexport default function CodeBlock(props) {\n return props.live ? (\n <ReactLivePlayground {...props} />\n ) : (\n <InitialCodeBlock {...props} />\n );\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Check the code of ",(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," for details."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:['Unless you want to publish a re-usable "theme enhancer" (like ',(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"}),"), you likely don't need ",(0,s.jsx)(n.code,{children:"@theme-init"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:'It can be quite hard to wrap your mind around these aliases. Let\'s imagine the following case with a super convoluted setup with three themes/plugins and the site itself all trying to define the same component. Internally, Docusaurus loads these themes as a "stack".'}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"+-------------------------------------------------+\n| `website/src/theme/CodeBlock.js` | <-- `@theme/CodeBlock` always points to the top\n+-------------------------------------------------+\n| `theme-live-codeblock/theme/CodeBlock/index.js` | <-- `@theme-original/CodeBlock` points to the topmost non-swizzled component\n+-------------------------------------------------+\n| `plugin-awesome-codeblock/theme/CodeBlock.js` |\n+-------------------------------------------------+\n| `theme-classic/theme/CodeBlock/index.js` | <-- `@theme-init/CodeBlock` always points to the bottom\n+-------------------------------------------------+\n"})}),"\n",(0,s.jsxs)(n.p,{children:['The components in this "stack" are pushed in the order of ',(0,s.jsx)(n.code,{children:"preset plugins > preset themes > plugins > themes > site"}),", so the swizzled component in ",(0,s.jsx)(n.code,{children:"website/src/theme"})," always comes out on top because it's loaded last."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme/*"})," always points to the topmost component\u2014when ",(0,s.jsx)(n.code,{children:"CodeBlock"})," is swizzled, all other components requesting ",(0,s.jsx)(n.code,{children:"@theme/CodeBlock"})," receive the swizzled version."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-original/*"})," always points to the topmost non-swizzled component. That's why you can import ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),' in the swizzled component\u2014it points to the next one in the "component stack", a theme-provided one. Plugin authors should not try to use this because your component could be the topmost component and cause a self-import.']}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-init/*"})," always points to the bottommost component\u2014usually, this comes from the theme or plugin that first provides this component. Individual plugins / themes trying to enhance code block can safely use ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," to get its basic version. Site creators should generally not use this because you likely want to enhance the ",(0,s.jsx)(n.em,{children:"topmost"})," instead of the ",(0,s.jsx)(n.em,{children:"bottommost"})," component. It's also possible that the ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," alias does not exist at all\u2014Docusaurus only creates it when it points to a different one from ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),", i.e. when it's provided by more than one theme. We don't waste aliases!"]}),"\n",(0,s.jsx)(n.h2,{id:"client-modules",children:"Client modules"}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are part of your site's bundle, just like theme components. However, they are usually side-effect-ful. Client modules are anything that can be ",(0,s.jsx)(n.code,{children:"import"}),"ed by Webpack\u2014CSS, JS, etc. JS scripts usually work on the global context, like registering event listeners, creating global variables..."]}),"\n",(0,s.jsx)(n.p,{children:"These modules are imported globally before React even renders the initial UI."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="@docusaurus/core/App.tsx"',children:"// How it works under the hood\nimport '@generated/client-modules';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Plugins and sites can both declare client modules, through ",(0,s.jsx)(n.a,{href:"/docs/api/plugin-methods/lifecycle-apis#getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules"})})," and ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#clientModules",children:(0,s.jsx)(n.code,{children:"siteConfig.clientModules"})}),", respectively."]}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are called during server-side rendering as well, so remember to check the ",(0,s.jsx)(n.a,{href:"/docs/advanced/ssg#escape-hatches",children:"execution environment"})," before accessing client-side globals."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="mySiteGlobalJs.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n // As soon as the site loads in the browser, register a global event listener\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Period') {\n location.assign(location.href.replace('.com', '.dev'));\n }\n });\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["CSS stylesheets imported as client modules are ",(0,s.jsx)(n.a,{href:"/docs/styling-layout#global-styles",children:"global"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-css",metastring:'title="mySiteGlobalCss.css"',children:"/* This stylesheet is global. */\n.globalSelector {\n color: red;\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"client-module-lifecycles",children:"Client module lifecycles"}),"\n",(0,s.jsxs)(n.p,{children:["Besides introducing side-effects, client modules can optionally export two lifecycle functions: ",(0,s.jsx)(n.code,{children:"onRouteUpdate"})," and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Because Docusaurus builds a single-page application, ",(0,s.jsx)(n.code,{children:"script"})," tags will only be executed the first time the page loads, but will not re-execute on page transitions. These lifecycles are useful if you have some imperative JS logic that should execute every time a new page has loaded, e.g., to manipulate DOM elements, to send analytics data, etc."]}),"\n",(0,s.jsx)(n.p,{children:"For every route transition, there will be several important timings:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The user clicks a link, which causes the router to change its current location."}),"\n",(0,s.jsx)(n.li,{children:"Docusaurus preloads the next route's assets, while keeping displaying the current page's content."}),"\n",(0,s.jsx)(n.li,{children:"The next route's assets have loaded."}),"\n",(0,s.jsx)(n.li,{children:"The new location's route component gets rendered to DOM."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"})," will be called at event (2), and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"})," will be called at (4). They both receive the current location and the previous location (which can be ",(0,s.jsx)(n.code,{children:"null"}),", if this is the first screen)."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"}),' can optionally return a "cleanup" callback, which will be called at (3). For example, if you want to display a progress bar, you can start a timeout in ',(0,s.jsx)(n.code,{children:"onRouteUpdate"}),", and clear the timeout in the callback. (The classic theme already provides an ",(0,s.jsx)(n.code,{children:"nprogress"})," integration this way.)"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the new page's DOM is only available during event (4). If you need to manipulate the new page's DOM, you'll likely want to use ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),", which will be fired as soon as the DOM on the new page has mounted."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="myClientModule.js"',children:"export function onRouteDidUpdate({location, previousLocation}) {\n // Don't execute if we are still on the same page; the lifecycle may be fired\n // because the hash changes (e.g. when navigating between headings)\n if (location.pathname !== previousLocation?.pathname) {\n const title = document.getElementsByTagName('h1')[0];\n if (title) {\n title.innerText += '\u2764\ufe0f';\n }\n }\n}\n\nexport function onRouteUpdate({location, previousLocation}) {\n if (location.pathname !== previousLocation?.pathname) {\n const progressBarTimeout = window.setTimeout(() => {\n nprogress.start();\n }, delay);\n return () => window.clearTimeout(progressBarTimeout);\n }\n return undefined;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Or, if you are using TypeScript and you want to leverage contextual typing:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="myClientModule.ts"',children:"import type {ClientModule} from '@docusaurus/types';\n\nconst module: ClientModule = {\n onRouteUpdate({location, previousLocation}) {\n // ...\n },\n onRouteDidUpdate({location, previousLocation}) {\n // ...\n },\n};\nexport default module;\n"})}),"\n",(0,s.jsx)(n.p,{children:"Both lifecycles will fire on first render, but they will not fire on server-side, so you can safely access browser globals in them."}),"\n",(0,s.jsx)(n.admonition,{title:"Prefer using React",type:"tip",children:(0,s.jsxs)(n.p,{children:["Client module lifecycles are purely imperative, and you can't use React hooks or access React contexts within them. If your operations are state-driven or involve complicated DOM manipulations, you should consider ",(0,s.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling components"})," instead."]})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>l});var s=t(27378);const o={},i=s.createContext(o);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3dd2dc02.53a491cb.js b/assets/js/3dd2dc02.53a491cb.js new file mode 100644 index 000000000000..d8794cb94e58 --- /dev/null +++ b/assets/js/3dd2dc02.53a491cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2176],{77753:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>r});var s=t(24246),o=t(71670);const i={description:"How the Docusaurus client is structured"},l="Client architecture",c={id:"advanced/client",title:"Client architecture",description:"How the Docusaurus client is structured",source:"@site/docs/advanced/client.mdx",sourceDirName:"advanced",slug:"/advanced/client",permalink:"/docs/advanced/client",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{description:"How the Docusaurus client is structured"},sidebar:"docs",previous:{title:"Static site generation",permalink:"/docs/advanced/ssg"},next:{title:"Upgrading Docusaurus",permalink:"/docs/migration"}},a={},r=[{value:"Theme aliases",id:"theme-aliases",level:2},{value:"Client modules",id:"client-modules",level:2},{value:"Client module lifecycles",id:"client-module-lifecycles",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"client-architecture",children:"Client architecture"})}),"\n",(0,s.jsx)(n.h2,{id:"theme-aliases",children:"Theme aliases"}),"\n",(0,s.jsxs)(n.p,{children:["A theme works by exporting a set of components, e.g. ",(0,s.jsx)(n.code,{children:"Navbar"}),", ",(0,s.jsx)(n.code,{children:"Layout"}),", ",(0,s.jsx)(n.code,{children:"Footer"}),", to render the data passed down from plugins. Docusaurus and users use these components by importing them using the ",(0,s.jsx)(n.code,{children:"@theme"})," webpack alias:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import Navbar from '@theme/Navbar';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The alias ",(0,s.jsx)(n.code,{children:"@theme"})," can refer to a few directories, in the following priority:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["A user's ",(0,s.jsx)(n.code,{children:"website/src/theme"})," directory, which is a special directory that has the higher precedence."]}),"\n",(0,s.jsxs)(n.li,{children:["A Docusaurus theme package's ",(0,s.jsx)(n.code,{children:"theme"})," directory."]}),"\n",(0,s.jsx)(n.li,{children:"Fallback components provided by Docusaurus core (usually not needed)."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This is called a ",(0,s.jsx)(n.em,{children:"layered architecture"}),": a higher-priority layer providing the component would shadow a lower-priority layer, making swizzling possible. Given the following structure:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"website\n\u251c\u2500\u2500 node_modules\n\u2502 \u2514\u2500\u2500 @docusaurus/theme-classic\n\u2502 \u2514\u2500\u2500 theme\n\u2502 \u2514\u2500\u2500 Navbar.js\n\u2514\u2500\u2500 src\n \u2514\u2500\u2500 theme\n \u2514\u2500\u2500 Navbar.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"website/src/theme/Navbar.js"})," takes precedence whenever ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is imported. This behavior is called component swizzling. If you are familiar with Objective C where a function's implementation can be swapped during runtime, it's the exact same concept here with changing the target ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is pointing to!"]}),"\n",(0,s.jsxs)(n.p,{children:['We already talked about how the "userland theme" in ',(0,s.jsx)(n.code,{children:"src/theme"})," can re-use a theme component through the ",(0,s.jsx)(n.a,{href:"/docs/swizzling#wrapping",children:(0,s.jsx)(n.code,{children:"@theme-original"})})," alias. One theme package can also wrap a component from another theme, by importing the component from the initial theme, using the ",(0,s.jsx)(n.code,{children:"@theme-init"})," import."]}),"\n",(0,s.jsxs)(n.p,{children:["Here's an example of using this feature to enhance the default theme ",(0,s.jsx)(n.code,{children:"CodeBlock"})," component with a ",(0,s.jsx)(n.code,{children:"react-live"})," playground feature."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import InitialCodeBlock from '@theme-init/CodeBlock';\nimport React from 'react';\n\nexport default function CodeBlock(props) {\n return props.live ? (\n <ReactLivePlayground {...props} />\n ) : (\n <InitialCodeBlock {...props} />\n );\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Check the code of ",(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," for details."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:['Unless you want to publish a re-usable "theme enhancer" (like ',(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"}),"), you likely don't need ",(0,s.jsx)(n.code,{children:"@theme-init"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:'It can be quite hard to wrap your mind around these aliases. Let\'s imagine the following case with a super convoluted setup with three themes/plugins and the site itself all trying to define the same component. Internally, Docusaurus loads these themes as a "stack".'}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"+-------------------------------------------------+\n| `website/src/theme/CodeBlock.js` | <-- `@theme/CodeBlock` always points to the top\n+-------------------------------------------------+\n| `theme-live-codeblock/theme/CodeBlock/index.js` | <-- `@theme-original/CodeBlock` points to the topmost non-swizzled component\n+-------------------------------------------------+\n| `plugin-awesome-codeblock/theme/CodeBlock.js` |\n+-------------------------------------------------+\n| `theme-classic/theme/CodeBlock/index.js` | <-- `@theme-init/CodeBlock` always points to the bottom\n+-------------------------------------------------+\n"})}),"\n",(0,s.jsxs)(n.p,{children:['The components in this "stack" are pushed in the order of ',(0,s.jsx)(n.code,{children:"preset plugins > preset themes > plugins > themes > site"}),", so the swizzled component in ",(0,s.jsx)(n.code,{children:"website/src/theme"})," always comes out on top because it's loaded last."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme/*"})," always points to the topmost component\u2014when ",(0,s.jsx)(n.code,{children:"CodeBlock"})," is swizzled, all other components requesting ",(0,s.jsx)(n.code,{children:"@theme/CodeBlock"})," receive the swizzled version."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-original/*"})," always points to the topmost non-swizzled component. That's why you can import ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),' in the swizzled component\u2014it points to the next one in the "component stack", a theme-provided one. Plugin authors should not try to use this because your component could be the topmost component and cause a self-import.']}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-init/*"})," always points to the bottommost component\u2014usually, this comes from the theme or plugin that first provides this component. Individual plugins / themes trying to enhance code block can safely use ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," to get its basic version. Site creators should generally not use this because you likely want to enhance the ",(0,s.jsx)(n.em,{children:"topmost"})," instead of the ",(0,s.jsx)(n.em,{children:"bottommost"})," component. It's also possible that the ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," alias does not exist at all\u2014Docusaurus only creates it when it points to a different one from ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),", i.e. when it's provided by more than one theme. We don't waste aliases!"]}),"\n",(0,s.jsx)(n.h2,{id:"client-modules",children:"Client modules"}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are part of your site's bundle, just like theme components. However, they are usually side-effect-ful. Client modules are anything that can be ",(0,s.jsx)(n.code,{children:"import"}),"ed by Webpack\u2014CSS, JS, etc. JS scripts usually work on the global context, like registering event listeners, creating global variables..."]}),"\n",(0,s.jsx)(n.p,{children:"These modules are imported globally before React even renders the initial UI."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="@docusaurus/core/App.tsx"',children:"// How it works under the hood\nimport '@generated/client-modules';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Plugins and sites can both declare client modules, through ",(0,s.jsx)(n.a,{href:"/docs/api/plugin-methods/lifecycle-apis#getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules"})})," and ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#clientModules",children:(0,s.jsx)(n.code,{children:"siteConfig.clientModules"})}),", respectively."]}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are called during server-side rendering as well, so remember to check the ",(0,s.jsx)(n.a,{href:"/docs/advanced/ssg#escape-hatches",children:"execution environment"})," before accessing client-side globals."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="mySiteGlobalJs.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n // As soon as the site loads in the browser, register a global event listener\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Period') {\n location.assign(location.href.replace('.com', '.dev'));\n }\n });\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["CSS stylesheets imported as client modules are ",(0,s.jsx)(n.a,{href:"/docs/styling-layout#global-styles",children:"global"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-css",metastring:'title="mySiteGlobalCss.css"',children:"/* This stylesheet is global. */\n.globalSelector {\n color: red;\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"client-module-lifecycles",children:"Client module lifecycles"}),"\n",(0,s.jsxs)(n.p,{children:["Besides introducing side-effects, client modules can optionally export two lifecycle functions: ",(0,s.jsx)(n.code,{children:"onRouteUpdate"})," and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Because Docusaurus builds a single-page application, ",(0,s.jsx)(n.code,{children:"script"})," tags will only be executed the first time the page loads, but will not re-execute on page transitions. These lifecycles are useful if you have some imperative JS logic that should execute every time a new page has loaded, e.g., to manipulate DOM elements, to send analytics data, etc."]}),"\n",(0,s.jsx)(n.p,{children:"For every route transition, there will be several important timings:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The user clicks a link, which causes the router to change its current location."}),"\n",(0,s.jsx)(n.li,{children:"Docusaurus preloads the next route's assets, while keeping displaying the current page's content."}),"\n",(0,s.jsx)(n.li,{children:"The next route's assets have loaded."}),"\n",(0,s.jsx)(n.li,{children:"The new location's route component gets rendered to DOM."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"})," will be called at event (2), and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"})," will be called at (4). They both receive the current location and the previous location (which can be ",(0,s.jsx)(n.code,{children:"null"}),", if this is the first screen)."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"}),' can optionally return a "cleanup" callback, which will be called at (3). For example, if you want to display a progress bar, you can start a timeout in ',(0,s.jsx)(n.code,{children:"onRouteUpdate"}),", and clear the timeout in the callback. (The classic theme already provides an ",(0,s.jsx)(n.code,{children:"nprogress"})," integration this way.)"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the new page's DOM is only available during event (4). If you need to manipulate the new page's DOM, you'll likely want to use ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),", which will be fired as soon as the DOM on the new page has mounted."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="myClientModule.js"',children:"export function onRouteDidUpdate({location, previousLocation}) {\n // Don't execute if we are still on the same page; the lifecycle may be fired\n // because the hash changes (e.g. when navigating between headings)\n if (location.pathname !== previousLocation?.pathname) {\n const title = document.getElementsByTagName('h1')[0];\n if (title) {\n title.innerText += '\u2764\ufe0f';\n }\n }\n}\n\nexport function onRouteUpdate({location, previousLocation}) {\n if (location.pathname !== previousLocation?.pathname) {\n const progressBarTimeout = window.setTimeout(() => {\n nprogress.start();\n }, delay);\n return () => window.clearTimeout(progressBarTimeout);\n }\n return undefined;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Or, if you are using TypeScript and you want to leverage contextual typing:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="myClientModule.ts"',children:"import type {ClientModule} from '@docusaurus/types';\n\nconst module: ClientModule = {\n onRouteUpdate({location, previousLocation}) {\n // ...\n },\n onRouteDidUpdate({location, previousLocation}) {\n // ...\n },\n};\nexport default module;\n"})}),"\n",(0,s.jsx)(n.p,{children:"Both lifecycles will fire on first render, but they will not fire on server-side, so you can safely access browser globals in them."}),"\n",(0,s.jsx)(n.admonition,{title:"Prefer using React",type:"tip",children:(0,s.jsxs)(n.p,{children:["Client module lifecycles are purely imperative, and you can't use React hooks or access React contexts within them. If your operations are state-driven or involve complicated DOM manipulations, you should consider ",(0,s.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling components"})," instead."]})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>l});var s=t(27378);const o={},i=s.createContext(o);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e206144.1b2f4db1.js b/assets/js/3e206144.1b2f4db1.js new file mode 100644 index 000000000000..6f3e33b3a2ce --- /dev/null +++ b/assets/js/3e206144.1b2f4db1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83230],{59354:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=t(24246),o=t(71670);const n={},a="Support",i={id:"support",title:"Support",description:"Docusaurus has a community of thousands of developers.",source:"@site/community/0-support.mdx",sourceDirName:".",slug:"/support",permalink:"/community/support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:0,frontMatter:{},sidebar:"community",next:{title:"Team",permalink:"/community/team"}},u={},c=[{value:"Stack Overflow",id:"stack-overflow",level:2},{value:"Discussion forums",id:"discussion-forums",level:2},{value:"Feature requests",id:"feature-requests",level:2},{value:"News",id:"news",level:2}];function d(e){const s={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"support",children:"Support"})}),"\n",(0,r.jsx)(s.p,{children:"Docusaurus has a community of thousands of developers."}),"\n",(0,r.jsx)(s.p,{children:"On this page we've listed some Docusaurus-related communities that you can be a part of; see the other pages in this section for additional online and in-person learning materials."}),"\n",(0,r.jsxs)(s.p,{children:["Before participating in Docusaurus' communities, ",(0,r.jsx)(s.a,{href:"https://engineering.fb.com/codeofconduct/",children:"please read our Code of Conduct"}),". We have adopted the ",(0,r.jsx)(s.a,{href:"https://www.contributor-covenant.org/",children:"Contributor Covenant"})," and we expect that all community members adhere to the guidelines within."]}),"\n",(0,r.jsx)(s.h2,{id:"stack-overflow",children:"Stack Overflow"}),"\n",(0,r.jsxs)(s.p,{children:["Stack Overflow is a popular forum to ask code-level questions or if you're stuck with a specific error. Read through the ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/tagged/docusaurus",children:"existing questions"})," tagged with ",(0,r.jsx)(s.strong,{children:"docusaurus"})," or ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/ask?tags=docusaurus",children:"ask your own"}),"!"]}),"\n",(0,r.jsx)(s.h2,{id:"discussion-forums",children:"Discussion forums"}),"\n",(0,r.jsx)(s.p,{children:"There are many online forums for discussion about best practices and application architecture as well as the future of Docusaurus. If you have an answerable code-level question, Stack Overflow is usually a better fit."}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Docusaurus online chat"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:"#help-and-questions"})," for user help"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:"#contributors"})," for contributing help"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://www.reddit.com/r/docusaurus/",children:"Reddit's Docusaurus community"})}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"feature-requests",children:"Feature requests"}),"\n",(0,r.jsxs)(s.p,{children:["For new feature requests, you can create a post on our ",(0,r.jsx)(s.a,{href:"/feature-requests",children:"feature requests board (Canny)"}),", which is a handy tool for road-mapping and allows for sorting by upvotes, which gives the core team a better indicator of what features are in high demand, as compared to GitHub issues which are harder to triage. Refrain from making a Pull Request for new features (especially large ones) as someone might already be working on it or will be part of our roadmap. Talk to us first!"]}),"\n",(0,r.jsx)(s.h2,{id:"news",children:"News"}),"\n",(0,r.jsxs)(s.p,{children:["For the latest news about Docusaurus, ",(0,r.jsxs)(s.a,{href:"https://twitter.com/docusaurus",children:["follow ",(0,r.jsx)(s.strong,{children:"@docusaurus"})," on Twitter"]})," and the ",(0,r.jsx)(s.a,{href:"/blog",children:"official Docusaurus blog"})," on this website."]})]})}function l(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>a});var r=t(27378);const o={},n=r.createContext(o);function a(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e206144.4221eb08.js b/assets/js/3e206144.4221eb08.js deleted file mode 100644 index f177ff1b723e..000000000000 --- a/assets/js/3e206144.4221eb08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83230],{59354:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var r=t(24246),o=t(71670);const n={},i="Support",a={id:"support",title:"Support",description:"Docusaurus has a community of thousands of developers.",source:"@site/community/0-support.mdx",sourceDirName:".",slug:"/support",permalink:"/community/support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:0,frontMatter:{},sidebar:"community",next:{title:"Team",permalink:"/community/team"}},u={},c=[{value:"Stack Overflow",id:"stack-overflow",level:2},{value:"Discussion forums",id:"discussion-forums",level:2},{value:"Feature requests",id:"feature-requests",level:2},{value:"News",id:"news",level:2}];function l(e){const s={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"support",children:"Support"})}),"\n",(0,r.jsx)(s.p,{children:"Docusaurus has a community of thousands of developers."}),"\n",(0,r.jsx)(s.p,{children:"On this page we've listed some Docusaurus-related communities that you can be a part of; see the other pages in this section for additional online and in-person learning materials."}),"\n",(0,r.jsxs)(s.p,{children:["Before participating in Docusaurus' communities, ",(0,r.jsx)(s.a,{href:"https://engineering.fb.com/codeofconduct/",children:"please read our Code of Conduct"}),". We have adopted the ",(0,r.jsx)(s.a,{href:"https://www.contributor-covenant.org/",children:"Contributor Covenant"})," and we expect that all community members adhere to the guidelines within."]}),"\n",(0,r.jsx)(s.h2,{id:"stack-overflow",children:"Stack Overflow"}),"\n",(0,r.jsxs)(s.p,{children:["Stack Overflow is a popular forum to ask code-level questions or if you're stuck with a specific error. Read through the ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/tagged/docusaurus",children:"existing questions"})," tagged with ",(0,r.jsx)(s.strong,{children:"docusaurus"})," or ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/ask?tags=docusaurus",children:"ask your own"}),"!"]}),"\n",(0,r.jsx)(s.h2,{id:"discussion-forums",children:"Discussion forums"}),"\n",(0,r.jsx)(s.p,{children:"There are many online forums for discussion about best practices and application architecture as well as the future of Docusaurus. If you have an answerable code-level question, Stack Overflow is usually a better fit."}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Docusaurus online chat"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:"#help-and-questions"})," for user help"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:"#contributors"})," for contributing help"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://www.reddit.com/r/docusaurus/",children:"Reddit's Docusaurus community"})}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"feature-requests",children:"Feature requests"}),"\n",(0,r.jsxs)(s.p,{children:["For new feature requests, you can create a post on our ",(0,r.jsx)(s.a,{href:"/feature-requests",children:"feature requests board (Canny)"}),", which is a handy tool for road-mapping and allows for sorting by upvotes, which gives the core team a better indicator of what features are in high demand, as compared to GitHub issues which are harder to triage. Refrain from making a Pull Request for new features (especially large ones) as someone might already be working on it or will be part of our roadmap. Talk to us first!"]}),"\n",(0,r.jsx)(s.h2,{id:"news",children:"News"}),"\n",(0,r.jsxs)(s.p,{children:["For the latest news about Docusaurus, ",(0,r.jsxs)(s.a,{href:"https://twitter.com/docusaurus",children:["follow ",(0,r.jsx)(s.strong,{children:"@docusaurus"})," on Twitter"]})," and the ",(0,r.jsx)(s.a,{href:"/blog",children:"official Docusaurus blog"})," on this website."]})]})}function d(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>a,a:()=>i});var r=t(27378);const o={},n=r.createContext(o);function i(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ef80f0b.2364cdbf.js b/assets/js/3ef80f0b.2364cdbf.js deleted file mode 100644 index b367e67c1f70..000000000000 --- a/assets/js/3ef80f0b.2364cdbf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52865],{12102:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var r=n(24246),o=n(71670);const t={description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},i="Browser support",a={id:"browser-support",title:"Browser support",description:"How to keep a reasonable bundle size while ensuring sufficient browser support.",source:"@site/docs/browser-support.mdx",sourceDirName:".",slug:"/browser-support",permalink:"/docs/browser-support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},sidebar:"docs",previous:{title:"Search",permalink:"/docs/search"},next:{title:"SEO",permalink:"/docs/seo"}},l={},d=[{value:"Purpose",id:"purpose",level:2},{value:"Default values",id:"default-values",level:2},{value:"Read more",id:"read-more",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"browser-support",children:"Browser support"})}),"\n",(0,r.jsxs)(s.p,{children:["Docusaurus allows sites to define the list of supported browsers through a ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist",children:"browserslist configuration"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"purpose",children:"Purpose"}),"\n",(0,r.jsx)(s.p,{children:"Websites need to balance between backward compatibility and bundle size. As old browsers do not support modern APIs or syntax, more code is needed to implement the same functionality."}),"\n",(0,r.jsxs)(s.p,{children:["For example, you may use the ",(0,r.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining",children:"optional chaining syntax"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"const value = obj?.prop?.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"...which unfortunately is only recognized by browser versions released after 2020. To be compatible with earlier browser versions, when building your site for production, our JS loader will transpile your code to a more verbose syntax:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"var _obj, _obj$prop;\n\nconst value =\n (_obj = obj) === null || _obj === void 0\n ? void 0\n : (_obj$prop = _obj.prop) === null || _obj$prop === void 0\n ? void 0\n : _obj$prop.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"However, this penalizes all other users with increased site load time because the 29-character line now becomes 168 characters\u2014a 6-fold increase! (In practice, it will be better because the names used will be shorter.) As a tradeoff, the JS loader only transpiles the syntax to the degree that's supported by all browser versions defined in the browser list."}),"\n",(0,r.jsxs)(s.p,{children:["The browser list by default is provided through the ",(0,r.jsx)(s.code,{children:"package.json"})," file as a root ",(0,r.jsx)(s.code,{children:"browserslist"})," field."]}),"\n",(0,r.jsx)(s.admonition,{type:"warning",children:(0,r.jsx)(s.p,{children:"On old browsers, the compiled output will use unsupported (too recent) JS syntax, causing React to fail to initialize and end up with a static website with only HTML/CSS and no JS."})}),"\n",(0,r.jsx)(s.h2,{id:"default-values",children:"Default values"}),"\n",(0,r.jsxs)(s.p,{children:["Websites initialized with the default classic template has the following in ",(0,r.jsx)(s.code,{children:"package.json"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "name": "docusaurus",\n // ...\n // highlight-start\n "browserslist": {\n "production": [">0.5%", "not dead", "not op_mini all"],\n "development": [\n "last 1 chrome version",\n "last 1 firefox version",\n "last 1 safari version"\n ]\n }\n // highlight-end\n // ...\n}\n'})}),"\n",(0,r.jsx)(s.p,{children:"Explained in natural language, the browsers supported in production are those:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["With more than 0.5% of market share; ",(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsxs)(s.li,{children:['Has official support or updates in the past 24 months (the opposite of "dead"); ',(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsx)(s.li,{children:"Is not Opera Mini."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"And browsers used in development are:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The latest version of Chrome ",(0,r.jsx)(s.em,{children:"or"})," Firefox ",(0,r.jsx)(s.em,{children:"or"})," Safari."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:['You can "evaluate" any config with the ',(0,r.jsx)(s.code,{children:"browserslist"})," CLI to obtain the actual list:"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'npx browserslist --env="production"\n'})}),"\n",(0,r.jsx)(s.p,{children:"The output is all browsers supported in production. Below is the output in January 2022:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-text",children:"and_chr 96\nand_uc 12.12\nchrome 96\nchrome 95\nchrome 94\nedge 96\nfirefox 95\nfirefox 94\nie 11\nios_saf 15.2\nios_saf 15.0-15.1\nios_saf 14.5-14.8\nios_saf 14.0-14.4\nios_saf 12.2-12.5\nopera 82\nopera 81\nsafari 15.1\nsafari 14.1\nsafari 13.1\n"})}),"\n",(0,r.jsx)(s.h2,{id:"read-more",children:"Read more"}),"\n",(0,r.jsxs)(s.p,{children:["You may wish to visit the ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md",children:"browserslist documentation"})," for more specifications, especially the accepted ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#queries",children:"query values"})," and ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#best-practices",children:"best practices"}),"."]})]})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var r=n(27378);const o={},t=r.createContext(o);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ef80f0b.539b4e84.js b/assets/js/3ef80f0b.539b4e84.js new file mode 100644 index 000000000000..d29ae974eaa4 --- /dev/null +++ b/assets/js/3ef80f0b.539b4e84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52865],{12102:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var r=n(24246),o=n(71670);const t={description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},i="Browser support",a={id:"browser-support",title:"Browser support",description:"How to keep a reasonable bundle size while ensuring sufficient browser support.",source:"@site/docs/browser-support.mdx",sourceDirName:".",slug:"/browser-support",permalink:"/docs/browser-support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},sidebar:"docs",previous:{title:"Search",permalink:"/docs/search"},next:{title:"SEO",permalink:"/docs/seo"}},l={},d=[{value:"Purpose",id:"purpose",level:2},{value:"Default values",id:"default-values",level:2},{value:"Read more",id:"read-more",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"browser-support",children:"Browser support"})}),"\n",(0,r.jsxs)(s.p,{children:["Docusaurus allows sites to define the list of supported browsers through a ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist",children:"browserslist configuration"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"purpose",children:"Purpose"}),"\n",(0,r.jsx)(s.p,{children:"Websites need to balance between backward compatibility and bundle size. As old browsers do not support modern APIs or syntax, more code is needed to implement the same functionality."}),"\n",(0,r.jsxs)(s.p,{children:["For example, you may use the ",(0,r.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining",children:"optional chaining syntax"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"const value = obj?.prop?.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"...which unfortunately is only recognized by browser versions released after 2020. To be compatible with earlier browser versions, when building your site for production, our JS loader will transpile your code to a more verbose syntax:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"var _obj, _obj$prop;\n\nconst value =\n (_obj = obj) === null || _obj === void 0\n ? void 0\n : (_obj$prop = _obj.prop) === null || _obj$prop === void 0\n ? void 0\n : _obj$prop.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"However, this penalizes all other users with increased site load time because the 29-character line now becomes 168 characters\u2014a 6-fold increase! (In practice, it will be better because the names used will be shorter.) As a tradeoff, the JS loader only transpiles the syntax to the degree that's supported by all browser versions defined in the browser list."}),"\n",(0,r.jsxs)(s.p,{children:["The browser list by default is provided through the ",(0,r.jsx)(s.code,{children:"package.json"})," file as a root ",(0,r.jsx)(s.code,{children:"browserslist"})," field."]}),"\n",(0,r.jsx)(s.admonition,{type:"warning",children:(0,r.jsx)(s.p,{children:"On old browsers, the compiled output will use unsupported (too recent) JS syntax, causing React to fail to initialize and end up with a static website with only HTML/CSS and no JS."})}),"\n",(0,r.jsx)(s.h2,{id:"default-values",children:"Default values"}),"\n",(0,r.jsxs)(s.p,{children:["Websites initialized with the default classic template has the following in ",(0,r.jsx)(s.code,{children:"package.json"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "name": "docusaurus",\n // ...\n // highlight-start\n "browserslist": {\n "production": [">0.5%", "not dead", "not op_mini all"],\n "development": [\n "last 1 chrome version",\n "last 1 firefox version",\n "last 1 safari version"\n ]\n }\n // highlight-end\n // ...\n}\n'})}),"\n",(0,r.jsx)(s.p,{children:"Explained in natural language, the browsers supported in production are those:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["With more than 0.5% of market share; ",(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsxs)(s.li,{children:['Has official support or updates in the past 24 months (the opposite of "dead"); ',(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsx)(s.li,{children:"Is not Opera Mini."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"And browsers used in development are:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The latest version of Chrome ",(0,r.jsx)(s.em,{children:"or"})," Firefox ",(0,r.jsx)(s.em,{children:"or"})," Safari."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:['You can "evaluate" any config with the ',(0,r.jsx)(s.code,{children:"browserslist"})," CLI to obtain the actual list:"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'npx browserslist --env="production"\n'})}),"\n",(0,r.jsx)(s.p,{children:"The output is all browsers supported in production. Below is the output in January 2022:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-text",children:"and_chr 96\nand_uc 12.12\nchrome 96\nchrome 95\nchrome 94\nedge 96\nfirefox 95\nfirefox 94\nie 11\nios_saf 15.2\nios_saf 15.0-15.1\nios_saf 14.5-14.8\nios_saf 14.0-14.4\nios_saf 12.2-12.5\nopera 82\nopera 81\nsafari 15.1\nsafari 14.1\nsafari 13.1\n"})}),"\n",(0,r.jsx)(s.h2,{id:"read-more",children:"Read more"}),"\n",(0,r.jsxs)(s.p,{children:["You may wish to visit the ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md",children:"browserslist documentation"})," for more specifications, especially the accepted ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#queries",children:"query values"})," and ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#best-practices",children:"best practices"}),"."]})]})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var r=n(27378);const o={},t=r.createContext(o);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4052c491.7f2169f1.js b/assets/js/4052c491.7f2169f1.js new file mode 100644 index 000000000000..17c442aeb6b5 --- /dev/null +++ b/assets/js/4052c491.7f2169f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98905],{24270:(e,t,i)=>{i.d(t,{Z:()=>s});const s=i.p+"assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg"},3838:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(24246),a=i(71670);const o={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},n=void 0,r={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{inline:!1,label:"Endi",permalink:"/blog/tags/endi"},{inline:!1,label:"Tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function h(e){const t={a:"a",img:"img",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,s.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]}),"\n",(0,s.jsx)(t.p,{children:"It is impossible to overstate Endi's impact on this project:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Docusaurus' top contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"by far"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"Lead developer"})," on the nearly complete ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap",children:"version 2 of Docusaurus"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Overall passionate advocate of the project on ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Twitter"}),", ",(0,s.jsx)(t.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," and other social media"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health."}),"\n",(0,s.jsxs)(t.p,{children:["We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or ",(0,s.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"tweet"})," if you have a suggestion."]}),"\n",(0,s.jsx)(t.p,{children:"The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"A photo from behind Endi's back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.",src:i(24270).Z+"",width:"1080",height:"1080"})})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>r,a:()=>n});var s=i(27378);const a={},o=s.createContext(a);function n(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4052c491.ff140cf7.js b/assets/js/4052c491.ff140cf7.js deleted file mode 100644 index e61fd76053c8..000000000000 --- a/assets/js/4052c491.ff140cf7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98905],{24270:(e,t,i)=>{i.d(t,{Z:()=>s});const s=i.p+"assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg"},3838:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>l,frontMatter:()=>a,metadata:()=>r,toc:()=>u});var s=i(24246),o=i(71670);const a={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},n=void 0,r={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{inline:!1,label:"Endi",permalink:"/blog/tags/endi"},{inline:!1,label:"Tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function h(e){const t={a:"a",img:"img",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,s.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]}),"\n",(0,s.jsx)(t.p,{children:"It is impossible to overstate Endi's impact on this project:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Docusaurus' top contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"by far"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"Lead developer"})," on the nearly complete ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap",children:"version 2 of Docusaurus"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Overall passionate advocate of the project on ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Twitter"}),", ",(0,s.jsx)(t.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," and other social media"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health."}),"\n",(0,s.jsxs)(t.p,{children:["We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or ",(0,s.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"tweet"})," if you have a suggestion."]}),"\n",(0,s.jsx)(t.p,{children:"The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"A photo from behind Endi's back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.",src:i(24270).Z+"",width:"1080",height:"1080"})})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>r,a:()=>n});var s=i(27378);const o={},a=s.createContext(o);function n(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:n(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4228388b.9f2a3468.js b/assets/js/4228388b.9f2a3468.js new file mode 100644 index 000000000000..1cd808822b89 --- /dev/null +++ b/assets/js/4228388b.9f2a3468.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21505],{909:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},44446:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png"},51837:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png"},87628:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png"},90562:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png"},53061:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png"},25643:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png"},80988:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png"},24125:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png"},94700:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png"},87558:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png"},32890:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},81833:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=n(24246),i=n(71670);const o={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},r=void 0,a={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},l={image:n(909).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Trends",id:"trends",level:2},{value:"npm",id:"npm",level:3},{value:"GitHub",id:"github",level:3},{value:"Featured adoptions",id:"featured-adoptions",level:2},{value:"Community",id:"community",level:2},{value:"Going forward",id:"going-forward",level:2}];function h(e){const s={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,t.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,t.jsxs)(s.p,{children:["We've ",(0,t.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,t.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,t.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,t.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,t.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:n(32890).Z+"",width:"1000",height:"562"})}),"\n",(0,t.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsxs)(s.p,{children:["Let's begin by going over a few highlights this year. Remember the ",(0,t.jsx)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta#whats-next",children:"todo-list"})," from half a year ago? Time to take it out again and see how far we've come!"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Internationalization"}),": officially released four months after its initial landing in late 2020. Seen great success in ",(0,t.jsx)(s.a,{href:"/showcase?tags=i18n",children:"many projects"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Autogenerated sidebars"}),": no need to maintain a big ",(0,t.jsx)(s.code,{children:"sidebars.js"})," anymore"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Webpack 5"}),": significantly improved build performance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Trailing slash config"}),": seamless integration with any content hosting provider"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Redesigned mobile navigation"}),": mobile users now enjoy all navigation features as on desktop"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"UI improvements"}),": more accessible quotes, better admonitions, back-to-top button..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Blog multi-authors"}),": credit all the amazing contributors that collaborated on one blog post!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"More blog features"}),": archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Asset collocation"}),": no need for a bloated static folder anymore: colocate your images with Markdown files"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Sidebar category index pages"}),": category labels can now be associated with pages, enabling better doc organization"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!"}),"\n",(0,t.jsx)(s.h2,{id:"trends",children:"Trends"}),"\n",(0,t.jsx)(s.h3,{id:"npm",children:"npm"}),"\n",(0,t.jsx)(s.p,{children:"Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://www.npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,t.jsx)(s.img,{alt:"Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There's a sharp drop from 90000 to 40000 just before the Jan 2022 line.",src:n(24125).Z+"",width:"800",height:"483"})})}),"\n",(0,t.jsx)(s.p,{children:"(Ah, the classic Christmas dip...)"}),"\n",(0,t.jsxs)(s.p,{children:["We released 18 versions, going from ",(0,t.jsx)(s.code,{children:"2.0.0-alpha.71"})," to ",(0,t.jsx)(s.code,{children:"2.0.0-beta.14"}),". That's one release every 20 days!"]}),"\n",(0,t.jsx)(s.h3,{id:"github",children:"GitHub"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Stars"}),": 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total contributors"}),": 512 \u2192 773 (+51.0% y/y)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dependents"}),": 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Commits"}),": 1,187 commits in the past year, averaging 23 commits every week"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Issues"}),": 619 issues opened, 505 of them eventually resolved"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:(0,t.jsx)(s.strong,{children:"new core team member"})})," (yep, that's me \ud83d\ude1d)"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Our star trend is also very positive. Compared to similar projects, we are ",(0,t.jsx)(s.strong,{children:"growing at a faster rate"}),":"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.",src:n(87558).Z+"",width:"800",height:"550"})}),"\n",(0,t.jsxs)(s.p,{children:["With an 8.4k increase in stars, we are ranked number 3 in this year's ",(0,t.jsx)(s.a,{href:"https://risingstars.js.org/2021/en#section-ssg",children:"JavaScript rising stars of static site generators"}),", preceded only by Next.js and Astro."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Docusaurus placing 3rd in the "Static Sites" ranking list",src:n(94700).Z+"",width:"600",height:"412"})}),"\n",(0,t.jsx)(s.h2,{id:"featured-adoptions",children:"Featured adoptions"}),"\n",(0,t.jsxs)(s.p,{children:["Our showcase has welcomed a few new ",(0,t.jsx)(s.a,{href:"/showcase?tags=favorite",children:'"favorite" sites'})," that showcase the true potential of Docusaurus 2's pluggable architecture."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://wiki.iota.org/",children:(0,t.jsx)(s.strong,{children:"IOTA-wiki"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Iota wiki light mode",src:n(80988).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Iota wiki dark mode",src:n(25643).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://docs.dyte.io/docs/home/introduction/",children:(0,t.jsx)(s.strong,{children:"Dyte"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Dyte light mode",src:n(87628).Z+"#gh-light-mode-only",width:"800",height:"454"}),(0,t.jsx)(s.img,{alt:"Dyte dark mode",src:n(51837).Z+"#gh-dark-mode-only",width:"800",height:"454"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://ionicframework.com/docs",children:(0,t.jsx)(s.strong,{children:"Ionic"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Ionic light mode",src:n(53061).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Ionic dark mode",src:n(90562).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://www.courier.com/docs/",children:(0,t.jsx)(s.strong,{children:"Courier"})})}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Courier",src:n(44446).Z+"",width:"800",height:"454"})}),"\n",(0,t.jsxs)(s.p,{children:["The creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx",children:"have it in our showcase"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"community",children:"Community"}),"\n",(0,t.jsxs)(s.p,{children:["As an active moderator on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"}),", I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer."]}),"\n",(0,t.jsx)(s.p,{children:"We are constantly mentioned on Twitter with inspirational feedback:"}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"@docusaurus"})," is amazing! cant believe it's THAT simple to use."]}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"No extra plugins, tooling or compilation steps. It just works out of the box."}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["I love ",(0,t.jsx)(s.strong,{children:"@docusaurus"}),". I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["And we keep every one of them in ",(0,t.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"our little box"})," \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!"]}),"\n",(0,t.jsxs)(s.p,{children:["As we approach the official release, we are interested in knowing more about what people are doing out there: ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4025",children:"plugin authors"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"creators of customized sites"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4610",children:"all new users"})," \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs."]}),"\n",(0,t.jsx)(s.h2,{id:"going-forward",children:"Going forward"}),"\n",(0,t.jsxs)(s.p,{children:["In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/15",children:"milestone"})," to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a ",(0,t.jsx)(s.strong,{children:"more robust theming workflow"}),", empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Guidelines on ",(0,t.jsx)(s.strong,{children:"component organization"}),". We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need."]}),"\n",(0,t.jsxs)(s.li,{children:["Improvements to the ",(0,t.jsx)(s.strong,{children:"swizzle CLI"}),". We want users to use it with delight and let it aid you through all possible swizzling scenarios."]}),"\n",(0,t.jsxs)(s.li,{children:["Refactoring our ",(0,t.jsx)(s.strong,{children:"theme APIs"}),". We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Docs"}),". We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Read more about plans for Docusaurus 2.0 in this ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"}),". 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!"]}),"\n",(0,t.jsxs)(s.p,{children:["As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/16",children:"architectural changes in 3.0"}),"!"]}),"\n",(0,t.jsx)(s.p,{children:"With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1."}),"\n",(0,t.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c",children:"all the contributors in 2021"}),", including:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The core team: ",(0,t.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus and supporting its development all along"]}),"\n",(0,t.jsxs)(s.li,{children:["The Algolia team for helping Docusaurus users ",(0,t.jsx)(s.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"migrate to the new DocSearch"})," and answering search-related questions"]}),"\n",(0,t.jsx)(s.li,{children:"All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So long, 2021, and let's greet a great 2022!"})]})}function d(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const i={},o=t.createContext(i);function r(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4228388b.b39403da.js b/assets/js/4228388b.b39403da.js deleted file mode 100644 index f52fa2b0a165..000000000000 --- a/assets/js/4228388b.b39403da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21505],{909:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},44446:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png"},51837:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png"},87628:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png"},90562:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png"},53061:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png"},25643:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png"},80988:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png"},24125:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png"},94700:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png"},87558:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png"},32890:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},81833:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=n(24246),i=n(71670);const o={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},r=void 0,a={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},l={image:n(909).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Trends",id:"trends",level:2},{value:"npm",id:"npm",level:3},{value:"GitHub",id:"github",level:3},{value:"Featured adoptions",id:"featured-adoptions",level:2},{value:"Community",id:"community",level:2},{value:"Going forward",id:"going-forward",level:2}];function h(e){const s={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,t.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,t.jsxs)(s.p,{children:["We've ",(0,t.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,t.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,t.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,t.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,t.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:n(32890).Z+"",width:"1000",height:"562"})}),"\n",(0,t.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsxs)(s.p,{children:["Let's begin by going over a few highlights this year. Remember the ",(0,t.jsx)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta#whats-next",children:"todo-list"})," from half a year ago? Time to take it out again and see how far we've come!"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Internationalization"}),": officially released four months after its initial landing in late 2020. Seen great success in ",(0,t.jsx)(s.a,{href:"/showcase?tags=i18n",children:"many projects"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Autogenerated sidebars"}),": no need to maintain a big ",(0,t.jsx)(s.code,{children:"sidebars.js"})," anymore"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Webpack 5"}),": significantly improved build performance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Trailing slash config"}),": seamless integration with any content hosting provider"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Redesigned mobile navigation"}),": mobile users now enjoy all navigation features as on desktop"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"UI improvements"}),": more accessible quotes, better admonitions, back-to-top button..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Blog multi-authors"}),": credit all the amazing contributors that collaborated on one blog post!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"More blog features"}),": archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Asset collocation"}),": no need for a bloated static folder anymore: colocate your images with Markdown files"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Sidebar category index pages"}),": category labels can now be associated with pages, enabling better doc organization"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!"}),"\n",(0,t.jsx)(s.h2,{id:"trends",children:"Trends"}),"\n",(0,t.jsx)(s.h3,{id:"npm",children:"npm"}),"\n",(0,t.jsx)(s.p,{children:"Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://www.npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,t.jsx)(s.img,{alt:"Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There's a sharp drop from 90000 to 40000 just before the Jan 2022 line.",src:n(24125).Z+"",width:"800",height:"483"})})}),"\n",(0,t.jsx)(s.p,{children:"(Ah, the classic Christmas dip...)"}),"\n",(0,t.jsxs)(s.p,{children:["We released 18 versions, going from ",(0,t.jsx)(s.code,{children:"2.0.0-alpha.71"})," to ",(0,t.jsx)(s.code,{children:"2.0.0-beta.14"}),". That's one release every 20 days!"]}),"\n",(0,t.jsx)(s.h3,{id:"github",children:"GitHub"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Stars"}),": 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total contributors"}),": 512 \u2192 773 (+51.0% y/y)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dependents"}),": 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Commits"}),": 1,187 commits in the past year, averaging 23 commits every week"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Issues"}),": 619 issues opened, 505 of them eventually resolved"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:(0,t.jsx)(s.strong,{children:"new core team member"})})," (yep, that's me \ud83d\ude1d)"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Our star trend is also very positive. Compared to similar projects, we are ",(0,t.jsx)(s.strong,{children:"growing at a faster rate"}),":"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.",src:n(87558).Z+"",width:"800",height:"550"})}),"\n",(0,t.jsxs)(s.p,{children:["With an 8.4k increase in stars, we are ranked number 3 in this year's ",(0,t.jsx)(s.a,{href:"https://risingstars.js.org/2021/en#section-ssg",children:"JavaScript rising stars of static site generators"}),", preceded only by Next.js and Astro."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Docusaurus placing 3rd in the "Static Sites" ranking list",src:n(94700).Z+"",width:"600",height:"412"})}),"\n",(0,t.jsx)(s.h2,{id:"featured-adoptions",children:"Featured adoptions"}),"\n",(0,t.jsxs)(s.p,{children:["Our showcase has welcomed a few new ",(0,t.jsx)(s.a,{href:"/showcase?tags=favorite",children:'"favorite" sites'})," that showcase the true potential of Docusaurus 2's pluggable architecture."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://wiki.iota.org/",children:(0,t.jsx)(s.strong,{children:"IOTA-wiki"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Iota wiki light mode",src:n(80988).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Iota wiki dark mode",src:n(25643).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://docs.dyte.io/docs/home/introduction/",children:(0,t.jsx)(s.strong,{children:"Dyte"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Dyte light mode",src:n(87628).Z+"#gh-light-mode-only",width:"800",height:"454"}),(0,t.jsx)(s.img,{alt:"Dyte dark mode",src:n(51837).Z+"#gh-dark-mode-only",width:"800",height:"454"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://ionicframework.com/docs",children:(0,t.jsx)(s.strong,{children:"Ionic"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Ionic light mode",src:n(53061).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Ionic dark mode",src:n(90562).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://www.courier.com/docs/",children:(0,t.jsx)(s.strong,{children:"Courier"})})}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Courier",src:n(44446).Z+"",width:"800",height:"454"})}),"\n",(0,t.jsxs)(s.p,{children:["The creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx",children:"have it in our showcase"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"community",children:"Community"}),"\n",(0,t.jsxs)(s.p,{children:["As an active moderator on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"}),", I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer."]}),"\n",(0,t.jsx)(s.p,{children:"We are constantly mentioned on Twitter with inspirational feedback:"}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"@docusaurus"})," is amazing! cant believe it's THAT simple to use."]}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"No extra plugins, tooling or compilation steps. It just works out of the box."}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["I love ",(0,t.jsx)(s.strong,{children:"@docusaurus"}),". I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["And we keep every one of them in ",(0,t.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"our little box"})," \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!"]}),"\n",(0,t.jsxs)(s.p,{children:["As we approach the official release, we are interested in knowing more about what people are doing out there: ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4025",children:"plugin authors"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"creators of customized sites"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4610",children:"all new users"})," \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs."]}),"\n",(0,t.jsx)(s.h2,{id:"going-forward",children:"Going forward"}),"\n",(0,t.jsxs)(s.p,{children:["In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/15",children:"milestone"})," to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a ",(0,t.jsx)(s.strong,{children:"more robust theming workflow"}),", empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Guidelines on ",(0,t.jsx)(s.strong,{children:"component organization"}),". We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need."]}),"\n",(0,t.jsxs)(s.li,{children:["Improvements to the ",(0,t.jsx)(s.strong,{children:"swizzle CLI"}),". We want users to use it with delight and let it aid you through all possible swizzling scenarios."]}),"\n",(0,t.jsxs)(s.li,{children:["Refactoring our ",(0,t.jsx)(s.strong,{children:"theme APIs"}),". We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Docs"}),". We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Read more about plans for Docusaurus 2.0 in this ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"}),". 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!"]}),"\n",(0,t.jsxs)(s.p,{children:["As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/16",children:"architectural changes in 3.0"}),"!"]}),"\n",(0,t.jsx)(s.p,{children:"With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1."}),"\n",(0,t.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c",children:"all the contributors in 2021"}),", including:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The core team: ",(0,t.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus and supporting its development all along"]}),"\n",(0,t.jsxs)(s.li,{children:["The Algolia team for helping Docusaurus users ",(0,t.jsx)(s.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"migrate to the new DocSearch"})," and answering search-related questions"]}),"\n",(0,t.jsx)(s.li,{children:"All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So long, 2021, and let's greet a great 2022!"})]})}function d(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const i={},o=t.createContext(i);function r(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42c2afdc.1f9f467b.js b/assets/js/42c2afdc.1f9f467b.js new file mode 100644 index 000000000000..7676762a2adc --- /dev/null +++ b/assets/js/42c2afdc.1f9f467b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89979],{55893:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var o=s(24246),n=s(71670);const r={},a="Sample doc",c={id:"tests/category-links/with-readme-doc/sample-doc",title:"Sample doc",description:"Lorem Ipsum",source:"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx",sourceDirName:"tests/category-links/with-readme-doc",slug:"/tests/category-links/with-readme-doc/sample-doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/sample-doc",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category with readme.md doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/"},next:{title:"Custom Props",permalink:"/tests/docs/tests/custom-props/"}},d={},i=[];function m(e){const t={h1:"h1",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"sample-doc",children:"Sample doc"})}),"\n",(0,o.jsx)(t.p,{children:"Lorem Ipsum"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}l.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>a});var o=s(27378);const n={},r=o.createContext(n);function a(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42c2afdc.793eb051.js b/assets/js/42c2afdc.793eb051.js deleted file mode 100644 index a6c732cb46c5..000000000000 --- a/assets/js/42c2afdc.793eb051.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89979],{55893:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>m,frontMatter:()=>r,metadata:()=>d,toc:()=>i});var o=s(24246),n=s(71670);const r={},c="Sample doc",d={id:"tests/category-links/with-readme-doc/sample-doc",title:"Sample doc",description:"Lorem Ipsum",source:"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx",sourceDirName:"tests/category-links/with-readme-doc",slug:"/tests/category-links/with-readme-doc/sample-doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/sample-doc",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category with readme.md doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/"},next:{title:"Custom Props",permalink:"/tests/docs/tests/custom-props/"}},a={},i=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"sample-doc",children:"Sample doc"})}),"\n",(0,o.jsx)(t.p,{children:"Lorem Ipsum"})]})}function m(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}m.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>c});var o=s(27378);const n={},r=o.createContext(n);function c(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/447738d4.3ee3af50.js b/assets/js/447738d4.3ee3af50.js new file mode 100644 index 000000000000..9e8e19ec9f4c --- /dev/null +++ b/assets/js/447738d4.3ee3af50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90088],{61132:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),i=(t(27378),t(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(24246),i=t(27378),a=t(40624),s=t(75527),o=t(3620),d=t(44479),l=t(62821),c=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function p(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,l._X)(r),s=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(m(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[a,s]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=p(e),[s,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[l,c]=f({queryString:t,groupId:r}),[h,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:a})?e:null})();(0,d.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),m(e)}),[c,m,a]),tabValues:a}}var y=t(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function I({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const n=e.currentTarget,r=d.indexOf(n),a=o[r].value;a!==t&&(l(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=d.indexOf(e.currentTarget)+1;var t;n=null!==(t=d[r])&&void 0!==t?t:d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;var r;n=null!==(r=d[t])&&void 0!==r?r:d[d.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",k(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>d.push(e),onKeyDown:u,onClick:c},i),{className:(0,a.Z)("tabs__item",j.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function O({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,r.jsx)(I,w({},n,e)),(0,r.jsx)(O,w({},n,e))]})}function T(e){const n=(0,y.Z)();return(0,r.jsx)(N,k(w({},e),{children:g(e.children)}),String(n))}},37176:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=t(24246),i=t(71670),a=t(97555),s=t(61132);const o={slug:"/sidebar/autogenerated"},d="Autogenerated",l={id:"guides/docs/sidebar/autogenerated",title:"Autogenerated",description:"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.",source:"@site/docs/guides/docs/sidebar/autogenerated.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/autogenerated",permalink:"/docs/sidebar/autogenerated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/sidebar/autogenerated"},sidebar:"docs",previous:{title:"Sidebar items",permalink:"/docs/sidebar/items"},next:{title:"Using multiple sidebars",permalink:"/docs/sidebar/multiple-sidebars"}},c={},u=[{value:"Category index convention",id:"category-index-convention",level:2},{value:"Autogenerated sidebar metadata",id:"autogenerated-sidebar-metadata",level:2},{value:"Doc item metadata",id:"doc-item-metadata",level:3},{value:"Category item metadata",id:"category-item-metadata",level:3},{value:"Using number prefixes",id:"using-number-prefixes",level:2},{value:"Customize the sidebar items generator",id:"customize-the-sidebar-items-generator",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"autogenerated",children:"Autogenerated"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus can ",(0,r.jsx)(n.strong,{children:"create a sidebar automatically"})," from your ",(0,r.jsx)(n.strong,{children:"filesystem structure"}),": each folder creates a sidebar category, and each file creates a doc link."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemAutogenerated = {\n type: 'autogenerated';\n dirName: string; // Source folder to generate the sidebar slice from (relative to docs)\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can generate a full sidebar from your docs folder:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myAutogeneratedSidebar: [\n // highlight-start\n {\n type: 'autogenerated',\n dirName: '.', // '.' means the current docs folder\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["An ",(0,r.jsx)(n.code,{children:"autogenerated"})," item is converted by Docusaurus to a ",(0,r.jsx)(n.strong,{children:"sidebar slice"})," (also discussed in ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-shorthand",children:"category shorthands"}),"): a list of items of type ",(0,r.jsx)(n.code,{children:"doc"})," or ",(0,r.jsx)(n.code,{children:"category"}),", so you can splice ",(0,r.jsxs)(n.strong,{children:["multiple ",(0,r.jsx)(n.code,{children:"autogenerated"})," items"]})," from multiple directories, interleaving them with regular sidebar items, in one sidebar level."]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"A real-world example"}),(0,r.jsx)(n.p,{children:"Consider this file structure:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 api\n\u2502 \u251c\u2500\u2500 product1-api\n\u2502 \u2502 \u2514\u2500\u2500 api.md\n\u2502 \u2514\u2500\u2500 product2-api\n\u2502 \u251c\u2500\u2500 basic-api.md\n\u2502 \u2514\u2500\u2500 pro-api.md\n\u251c\u2500\u2500 intro.md\n\u2514\u2500\u2500 tutorials\n \u251c\u2500\u2500 advanced\n \u2502 \u251c\u2500\u2500 advanced1.md\n \u2502 \u251c\u2500\u2500 advanced2.md\n \u2502 \u2514\u2500\u2500 read-more\n \u2502 \u251c\u2500\u2500 resource1.md\n \u2502 \u2514\u2500\u2500 resource2.md\n \u251c\u2500\u2500 easy\n \u2502 \u251c\u2500\u2500 easy1.md\n \u2502 \u2514\u2500\u2500 easy2.md\n \u251c\u2500\u2500 tutorial-end.md\n \u251c\u2500\u2500 tutorial-intro.md\n \u2514\u2500\u2500 tutorial-medium.md\n"})}),(0,r.jsx)(n.p,{children:"And assume every doc's ID is just its file name. If you define an autogenerated sidebar like this:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/easy', // Generate sidebar slice from docs/tutorials/easy\n },\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/advanced', // Generate sidebar slice from docs/tutorials/advanced\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'api', // Generate sidebar slice from docs/api\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"It would be resolved as:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n // Two files in docs/tutorials/easy\n 'easy1',\n 'easy2',\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n // Two files and a folder in docs/tutorials/advanced\n 'advanced1',\n 'advanced2',\n {\n type: 'category',\n label: 'read-more',\n items: ['resource1', 'resource2'],\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n // Two folders in docs/api\n {\n type: 'category',\n label: 'product1-api',\n items: ['api'],\n },\n {\n type: 'category',\n label: 'product2-api',\n items: ['basic-api', 'pro-api'],\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:'Note how the autogenerate source directories themselves don\'t become categories: only the items they contain do. This is what we mean by "sidebar slice".'})]}),"\n",(0,r.jsx)(n.h2,{id:"category-index-convention",children:"Category index convention"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can automatically link a category to its index document."}),"\n",(0,r.jsx)(n.p,{children:"A category index document is a document following one of those filename conventions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,r.jsxs)(n.li,{children:["Same name as parent folder: ",(0,r.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This is equivalent to using a category with a ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-doc-link",children:"doc link"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n // highlight-start\n {\n type: 'category',\n label: 'Guides',\n link: {type: 'doc', id: 'Guides/index'},\n items: [],\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Naming your introductory document ",(0,r.jsx)(n.code,{children:"README.md"})," makes it show up when browsing the folder using the GitHub interface, while using ",(0,r.jsx)(n.code,{children:"index.md"})," makes the behavior more in line with how HTML files are served."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If a folder only has one index page, it will be turned into a link instead of a category. This is useful for ",(0,r.jsx)(n.strong,{children:"asset collocation"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"some-doc\n\u251c\u2500\u2500 index.md\n\u251c\u2500\u2500 img1.png\n\u2514\u2500\u2500 img2.png\n"})})]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"Customizing category index matching"}),(0,r.jsxs)(n.p,{children:["It is possible to opt out any of the category index conventions, or define even more conventions. You can inject your own ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher through the ",(0,r.jsx)(n.a,{href:"#customize-the-sidebar-items-generator",children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})})," callback. For example, you can also pick ",(0,r.jsx)(n.code,{children:"intro"})," as another file name eligible for automatically becoming the category index."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex(doc) {\n return (\n // Also pick intro.md in addition to the default ones\n doc.fileName.toLowerCase() === 'intro' ||\n defaultCategoryIndexMatcher(doc)\n );\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"Or choose to not have any category index convention."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex() {\n // No doc will be automatically picked as category index\n return false;\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher will be provided with three fields:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"fileName"}),", the file's name without extension and with casing preserved"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"directories"}),", the list of directory names ",(0,r.jsx)(n.em,{children:"from the lowest level to the highest level"}),", relative to the docs root directory"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extension"}),", the file's extension, with a leading dot."]}),"\n"]}),(0,r.jsxs)(n.p,{children:["For example, for a doc file at ",(0,r.jsx)(n.code,{children:"guides/sidebar/autogenerated.md"}),", the props the matcher receives are"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const props = {\n fileName: 'autogenerated',\n directories: ['sidebar', 'guides'],\n extension: '.md',\n};\n"})}),(0,r.jsx)(n.p,{children:"The default implementation is:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function isCategoryIndex({fileName, directories}) {\n const eligibleDocIndexNames = [\n 'index',\n 'readme',\n directories[0].toLowerCase(),\n ];\n return eligibleDocIndexNames.includes(fileName.toLowerCase());\n}\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"\n",(0,r.jsxs)(n.p,{children:["For handwritten sidebar definitions, you would provide metadata to sidebar items through ",(0,r.jsx)(n.code,{children:"sidebars.js"}),"; for autogenerated, Docusaurus would read them from the item's respective file. In addition, you may want to adjust the relative position of each item because, by default, items within a sidebar slice will be generated in ",(0,r.jsx)(n.strong,{children:"alphabetical order"})," (using file and folder names)."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-item-metadata",children:"Doc item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," attributes are declared in front matter as ",(0,r.jsx)(n.code,{children:"sidebar_label"}),", ",(0,r.jsx)(n.code,{children:"sidebar_class_name"}),", and ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"}),", respectively. Position can be specified in the same way, via ",(0,r.jsx)(n.code,{children:"sidebar_position"})," front matter."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/tutorials/tutorial-easy.md"',children:"---\n# highlight-start\nsidebar_position: 2\nsidebar_label: Easy\nsidebar_class_name: green\n# highlight-end\n---\n\n# Easy Tutorial\n\nThis is the easy tutorial!\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-item-metadata",children:"Category item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"_category_.json"})," or ",(0,r.jsx)(n.code,{children:"_category_.yml"})," file in the respective folder. You can specify any category metadata and also the ",(0,r.jsx)(n.code,{children:"position"})," metadata. ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", ",(0,r.jsx)(n.code,{children:"position"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," will default to the respective values of the category's linked doc, if there is one."]}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(s.Z,{value:"JSON",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="docs/tutorials/_category_.json"',children:'{\n "position": 2.5,\n "label": "Tutorial",\n "collapsible": true,\n "collapsed": false,\n "className": "red",\n "link": {\n "type": "generated-index",\n "title": "Tutorial overview"\n },\n "customProps": {\n "description": "This description can be used in the swizzled DocCard"\n }\n}\n'})})}),(0,r.jsx)(s.Z,{value:"YAML",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="docs/tutorials/_category_.yml"',children:"position: 2.5 # float position is supported\nlabel: 'Tutorial'\ncollapsible: true # make the category collapsible\ncollapsed: false # keep the category open by default\nclassName: red\nlink:\n type: generated-index\n title: Tutorial overview\ncustomProps:\n description: This description can be used in the swizzled DocCard\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If the ",(0,r.jsx)(n.code,{children:"link"})," is explicitly specified, Docusaurus will not apply any ",(0,r.jsx)(n.a,{href:"#category-index-convention",children:"default conventions"}),"."]}),(0,r.jsxs)(n.p,{children:["The doc links can be specified relatively, e.g. if the category is generated with the ",(0,r.jsx)(n.code,{children:"guides"})," directory, ",(0,r.jsx)(n.code,{children:'"link": {"type": "doc", "id": "intro"}'})," will be resolved to the ID ",(0,r.jsx)(n.code,{children:"guides/intro"}),", only falling back to ",(0,r.jsx)(n.code,{children:"intro"})," if a doc with the former ID doesn't exist."]}),(0,r.jsxs)(n.p,{children:["You can also use ",(0,r.jsx)(n.code,{children:"link: null"})," to opt out of default conventions and not generate any category index page."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The position metadata is only used ",(0,r.jsx)(n.strong,{children:"within a sidebar slice"}),": Docusaurus does not re-order other items of your sidebar."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-number-prefixes",children:"Using number prefixes"}),"\n",(0,r.jsx)(n.p,{children:"A simple way to order an autogenerated sidebar is to prefix docs and folders by number prefixes, which also makes them appear in the file system in the same order when sorted by file name:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 01-Intro.md\n\u251c\u2500\u2500 02-Tutorial Easy\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u2514\u2500\u2500 03-End.md\n\u251c\u2500\u2500 03-Tutorial Advanced\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u251c\u2500\u2500 03-Third Part.md\n\u2502 \u2514\u2500\u2500 04-End.md\n\u2514\u2500\u2500 04-End.md\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make it ",(0,r.jsx)(n.strong,{children:"easier to adopt"}),", Docusaurus supports ",(0,r.jsx)(n.strong,{children:"multiple number prefix patterns"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus will ",(0,r.jsx)(n.strong,{children:"remove the number prefix"})," from the doc id, title, label, and URL paths."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["Prefer using ",(0,r.jsx)(n.a,{href:"#autogenerated-sidebar-metadata",children:"additional metadata"})]}),"."]}),(0,r.jsxs)(n.p,{children:["Updating a number prefix can be annoying, as it can require ",(0,r.jsx)(n.strong,{children:"updating multiple existing Markdown links"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="docs/02-Tutorial Easy/01-First Part.md"',children:"- Check the [Tutorial End](../04-End.mdx);\n+ Check the [Tutorial End](../05-End.mdx);\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"}),"\n",(0,r.jsxs)(n.p,{children:["You can provide a custom ",(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})," function in the docs plugin (or preset) config:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n categoriesMetadata,\n isCategoryIndex,\n }) {\n // Example: return an hardcoded list of static sidebar items\n return [\n {type: 'doc', id: 'doc1'},\n {type: 'doc', id: 'doc2'},\n ];\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Re-use and enhance the default generator"})," instead of writing a generator from scratch: ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts",children:"the default generator we provide"})," is 250 lines long."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Add, update, filter, re-order"})," the sidebar items according to your use case:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\n// Reverse the sidebar items ordering (including nested category items)\nfunction reverseSidebarItems(items) {\n // Reverse items in categories\n const result = items.map((item) => {\n if (item.type === 'category') {\n return {...item, items: reverseSidebarItems(item.items)};\n }\n return item;\n });\n // Reverse items at current level\n result.reverse();\n return result;\n}\n// highlight-end\n\nexport default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) {\n const sidebarItems = await defaultSidebarItemsGenerator(args);\n return reverseSidebarItems(sidebarItems);\n },\n // highlight-end\n },\n ],\n ],\n};\n"})})]})]})}function m(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var r=t(27378);const i={},a=r.createContext(i);function s(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/447738d4.fd5a5627.js b/assets/js/447738d4.fd5a5627.js deleted file mode 100644 index 05f2598b2cbc..000000000000 --- a/assets/js/447738d4.fd5a5627.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90088],{61132:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),i=(t(27378),t(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(24246),i=t(27378),a=t(40624),s=t(75527),o=t(3620),d=t(44479),l=t(62821),c=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function p(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,l._X)(r),s=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(m(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[a,s]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=p(e),[s,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[l,c]=f({queryString:t,groupId:r}),[h,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:a})?e:null})();(0,d.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),m(e)}),[c,m,a]),tabValues:a}}var j=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function I({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const n=e.currentTarget,r=d.indexOf(n),a=o[r].value;a!==t&&(l(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=d.indexOf(e.currentTarget)+1;var t;n=null!==(t=d[r])&&void 0!==t?t:d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;var r;n=null!==(r=d[t])&&void 0!==r?r:d[d.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",k(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>d.push(e),onKeyDown:u,onClick:c},i),{className:(0,a.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function O({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(I,w({},n,e)),(0,r.jsx)(O,w({},n,e))]})}function T(e){const n=(0,j.Z)();return(0,r.jsx)(N,k(w({},e),{children:g(e.children)}),String(n))}},37176:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=t(24246),i=t(71670),a=t(97555),s=t(61132);const o={slug:"/sidebar/autogenerated"},d="Autogenerated",l={id:"guides/docs/sidebar/autogenerated",title:"Autogenerated",description:"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.",source:"@site/docs/guides/docs/sidebar/autogenerated.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/autogenerated",permalink:"/docs/sidebar/autogenerated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/sidebar/autogenerated"},sidebar:"docs",previous:{title:"Sidebar items",permalink:"/docs/sidebar/items"},next:{title:"Using multiple sidebars",permalink:"/docs/sidebar/multiple-sidebars"}},c={},u=[{value:"Category index convention",id:"category-index-convention",level:2},{value:"Autogenerated sidebar metadata",id:"autogenerated-sidebar-metadata",level:2},{value:"Doc item metadata",id:"doc-item-metadata",level:3},{value:"Category item metadata",id:"category-item-metadata",level:3},{value:"Using number prefixes",id:"using-number-prefixes",level:2},{value:"Customize the sidebar items generator",id:"customize-the-sidebar-items-generator",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"autogenerated",children:"Autogenerated"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus can ",(0,r.jsx)(n.strong,{children:"create a sidebar automatically"})," from your ",(0,r.jsx)(n.strong,{children:"filesystem structure"}),": each folder creates a sidebar category, and each file creates a doc link."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemAutogenerated = {\n type: 'autogenerated';\n dirName: string; // Source folder to generate the sidebar slice from (relative to docs)\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can generate a full sidebar from your docs folder:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myAutogeneratedSidebar: [\n // highlight-start\n {\n type: 'autogenerated',\n dirName: '.', // '.' means the current docs folder\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["An ",(0,r.jsx)(n.code,{children:"autogenerated"})," item is converted by Docusaurus to a ",(0,r.jsx)(n.strong,{children:"sidebar slice"})," (also discussed in ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-shorthand",children:"category shorthands"}),"): a list of items of type ",(0,r.jsx)(n.code,{children:"doc"})," or ",(0,r.jsx)(n.code,{children:"category"}),", so you can splice ",(0,r.jsxs)(n.strong,{children:["multiple ",(0,r.jsx)(n.code,{children:"autogenerated"})," items"]})," from multiple directories, interleaving them with regular sidebar items, in one sidebar level."]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"A real-world example"}),(0,r.jsx)(n.p,{children:"Consider this file structure:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 api\n\u2502 \u251c\u2500\u2500 product1-api\n\u2502 \u2502 \u2514\u2500\u2500 api.md\n\u2502 \u2514\u2500\u2500 product2-api\n\u2502 \u251c\u2500\u2500 basic-api.md\n\u2502 \u2514\u2500\u2500 pro-api.md\n\u251c\u2500\u2500 intro.md\n\u2514\u2500\u2500 tutorials\n \u251c\u2500\u2500 advanced\n \u2502 \u251c\u2500\u2500 advanced1.md\n \u2502 \u251c\u2500\u2500 advanced2.md\n \u2502 \u2514\u2500\u2500 read-more\n \u2502 \u251c\u2500\u2500 resource1.md\n \u2502 \u2514\u2500\u2500 resource2.md\n \u251c\u2500\u2500 easy\n \u2502 \u251c\u2500\u2500 easy1.md\n \u2502 \u2514\u2500\u2500 easy2.md\n \u251c\u2500\u2500 tutorial-end.md\n \u251c\u2500\u2500 tutorial-intro.md\n \u2514\u2500\u2500 tutorial-medium.md\n"})}),(0,r.jsx)(n.p,{children:"And assume every doc's ID is just its file name. If you define an autogenerated sidebar like this:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/easy', // Generate sidebar slice from docs/tutorials/easy\n },\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/advanced', // Generate sidebar slice from docs/tutorials/advanced\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'api', // Generate sidebar slice from docs/api\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"It would be resolved as:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n // Two files in docs/tutorials/easy\n 'easy1',\n 'easy2',\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n // Two files and a folder in docs/tutorials/advanced\n 'advanced1',\n 'advanced2',\n {\n type: 'category',\n label: 'read-more',\n items: ['resource1', 'resource2'],\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n // Two folders in docs/api\n {\n type: 'category',\n label: 'product1-api',\n items: ['api'],\n },\n {\n type: 'category',\n label: 'product2-api',\n items: ['basic-api', 'pro-api'],\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:'Note how the autogenerate source directories themselves don\'t become categories: only the items they contain do. This is what we mean by "sidebar slice".'})]}),"\n",(0,r.jsx)(n.h2,{id:"category-index-convention",children:"Category index convention"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can automatically link a category to its index document."}),"\n",(0,r.jsx)(n.p,{children:"A category index document is a document following one of those filename conventions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,r.jsxs)(n.li,{children:["Same name as parent folder: ",(0,r.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This is equivalent to using a category with a ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-doc-link",children:"doc link"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n // highlight-start\n {\n type: 'category',\n label: 'Guides',\n link: {type: 'doc', id: 'Guides/index'},\n items: [],\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Naming your introductory document ",(0,r.jsx)(n.code,{children:"README.md"})," makes it show up when browsing the folder using the GitHub interface, while using ",(0,r.jsx)(n.code,{children:"index.md"})," makes the behavior more in line with how HTML files are served."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If a folder only has one index page, it will be turned into a link instead of a category. This is useful for ",(0,r.jsx)(n.strong,{children:"asset collocation"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"some-doc\n\u251c\u2500\u2500 index.md\n\u251c\u2500\u2500 img1.png\n\u2514\u2500\u2500 img2.png\n"})})]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"Customizing category index matching"}),(0,r.jsxs)(n.p,{children:["It is possible to opt out any of the category index conventions, or define even more conventions. You can inject your own ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher through the ",(0,r.jsx)(n.a,{href:"#customize-the-sidebar-items-generator",children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})})," callback. For example, you can also pick ",(0,r.jsx)(n.code,{children:"intro"})," as another file name eligible for automatically becoming the category index."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex(doc) {\n return (\n // Also pick intro.md in addition to the default ones\n doc.fileName.toLowerCase() === 'intro' ||\n defaultCategoryIndexMatcher(doc)\n );\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"Or choose to not have any category index convention."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex() {\n // No doc will be automatically picked as category index\n return false;\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher will be provided with three fields:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"fileName"}),", the file's name without extension and with casing preserved"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"directories"}),", the list of directory names ",(0,r.jsx)(n.em,{children:"from the lowest level to the highest level"}),", relative to the docs root directory"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extension"}),", the file's extension, with a leading dot."]}),"\n"]}),(0,r.jsxs)(n.p,{children:["For example, for a doc file at ",(0,r.jsx)(n.code,{children:"guides/sidebar/autogenerated.md"}),", the props the matcher receives are"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const props = {\n fileName: 'autogenerated',\n directories: ['sidebar', 'guides'],\n extension: '.md',\n};\n"})}),(0,r.jsx)(n.p,{children:"The default implementation is:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function isCategoryIndex({fileName, directories}) {\n const eligibleDocIndexNames = [\n 'index',\n 'readme',\n directories[0].toLowerCase(),\n ];\n return eligibleDocIndexNames.includes(fileName.toLowerCase());\n}\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"\n",(0,r.jsxs)(n.p,{children:["For handwritten sidebar definitions, you would provide metadata to sidebar items through ",(0,r.jsx)(n.code,{children:"sidebars.js"}),"; for autogenerated, Docusaurus would read them from the item's respective file. In addition, you may want to adjust the relative position of each item because, by default, items within a sidebar slice will be generated in ",(0,r.jsx)(n.strong,{children:"alphabetical order"})," (using file and folder names)."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-item-metadata",children:"Doc item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," attributes are declared in front matter as ",(0,r.jsx)(n.code,{children:"sidebar_label"}),", ",(0,r.jsx)(n.code,{children:"sidebar_class_name"}),", and ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"}),", respectively. Position can be specified in the same way, via ",(0,r.jsx)(n.code,{children:"sidebar_position"})," front matter."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/tutorials/tutorial-easy.md"',children:"---\n# highlight-start\nsidebar_position: 2\nsidebar_label: Easy\nsidebar_class_name: green\n# highlight-end\n---\n\n# Easy Tutorial\n\nThis is the easy tutorial!\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-item-metadata",children:"Category item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"_category_.json"})," or ",(0,r.jsx)(n.code,{children:"_category_.yml"})," file in the respective folder. You can specify any category metadata and also the ",(0,r.jsx)(n.code,{children:"position"})," metadata. ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", ",(0,r.jsx)(n.code,{children:"position"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," will default to the respective values of the category's linked doc, if there is one."]}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(s.Z,{value:"JSON",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="docs/tutorials/_category_.json"',children:'{\n "position": 2.5,\n "label": "Tutorial",\n "collapsible": true,\n "collapsed": false,\n "className": "red",\n "link": {\n "type": "generated-index",\n "title": "Tutorial overview"\n },\n "customProps": {\n "description": "This description can be used in the swizzled DocCard"\n }\n}\n'})})}),(0,r.jsx)(s.Z,{value:"YAML",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="docs/tutorials/_category_.yml"',children:"position: 2.5 # float position is supported\nlabel: 'Tutorial'\ncollapsible: true # make the category collapsible\ncollapsed: false # keep the category open by default\nclassName: red\nlink:\n type: generated-index\n title: Tutorial overview\ncustomProps:\n description: This description can be used in the swizzled DocCard\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If the ",(0,r.jsx)(n.code,{children:"link"})," is explicitly specified, Docusaurus will not apply any ",(0,r.jsx)(n.a,{href:"#category-index-convention",children:"default conventions"}),"."]}),(0,r.jsxs)(n.p,{children:["The doc links can be specified relatively, e.g. if the category is generated with the ",(0,r.jsx)(n.code,{children:"guides"})," directory, ",(0,r.jsx)(n.code,{children:'"link": {"type": "doc", "id": "intro"}'})," will be resolved to the ID ",(0,r.jsx)(n.code,{children:"guides/intro"}),", only falling back to ",(0,r.jsx)(n.code,{children:"intro"})," if a doc with the former ID doesn't exist."]}),(0,r.jsxs)(n.p,{children:["You can also use ",(0,r.jsx)(n.code,{children:"link: null"})," to opt out of default conventions and not generate any category index page."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The position metadata is only used ",(0,r.jsx)(n.strong,{children:"within a sidebar slice"}),": Docusaurus does not re-order other items of your sidebar."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-number-prefixes",children:"Using number prefixes"}),"\n",(0,r.jsx)(n.p,{children:"A simple way to order an autogenerated sidebar is to prefix docs and folders by number prefixes, which also makes them appear in the file system in the same order when sorted by file name:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 01-Intro.md\n\u251c\u2500\u2500 02-Tutorial Easy\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u2514\u2500\u2500 03-End.md\n\u251c\u2500\u2500 03-Tutorial Advanced\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u251c\u2500\u2500 03-Third Part.md\n\u2502 \u2514\u2500\u2500 04-End.md\n\u2514\u2500\u2500 04-End.md\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make it ",(0,r.jsx)(n.strong,{children:"easier to adopt"}),", Docusaurus supports ",(0,r.jsx)(n.strong,{children:"multiple number prefix patterns"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus will ",(0,r.jsx)(n.strong,{children:"remove the number prefix"})," from the doc id, title, label, and URL paths."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["Prefer using ",(0,r.jsx)(n.a,{href:"#autogenerated-sidebar-metadata",children:"additional metadata"})]}),"."]}),(0,r.jsxs)(n.p,{children:["Updating a number prefix can be annoying, as it can require ",(0,r.jsx)(n.strong,{children:"updating multiple existing Markdown links"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="docs/02-Tutorial Easy/01-First Part.md"',children:"- Check the [Tutorial End](../04-End.mdx);\n+ Check the [Tutorial End](../05-End.mdx);\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"}),"\n",(0,r.jsxs)(n.p,{children:["You can provide a custom ",(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})," function in the docs plugin (or preset) config:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n categoriesMetadata,\n isCategoryIndex,\n }) {\n // Example: return an hardcoded list of static sidebar items\n return [\n {type: 'doc', id: 'doc1'},\n {type: 'doc', id: 'doc2'},\n ];\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Re-use and enhance the default generator"})," instead of writing a generator from scratch: ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts",children:"the default generator we provide"})," is 250 lines long."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Add, update, filter, re-order"})," the sidebar items according to your use case:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\n// Reverse the sidebar items ordering (including nested category items)\nfunction reverseSidebarItems(items) {\n // Reverse items in categories\n const result = items.map((item) => {\n if (item.type === 'category') {\n return {...item, items: reverseSidebarItems(item.items)};\n }\n return item;\n });\n // Reverse items at current level\n result.reverse();\n return result;\n}\n// highlight-end\n\nexport default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) {\n const sidebarItems = await defaultSidebarItemsGenerator(args);\n return reverseSidebarItems(sidebarItems);\n },\n // highlight-end\n },\n ],\n ],\n};\n"})})]})]})}function m(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var r=t(27378);const i={},a=r.createContext(i);function s(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46f5ed35.cc62c165.js b/assets/js/46f5ed35.cc62c165.js new file mode 100644 index 000000000000..cee241febc86 --- /dev/null +++ b/assets/js/46f5ed35.cc62c165.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6292],{15009:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png"},79466:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var i=s(24246),r=s(71670);const t={sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},o="\ud83d\udce6 logger",l={id:"api/misc/logger/logger",title:"\ud83d\udce6 logger",description:"An encapsulated logger for semantically formatting console messages.",source:"@site/docs/api/misc/logger/logger.mdx",sourceDirName:"api/misc/logger",slug:"/api/misc/@docusaurus/logger",permalink:"/docs/api/misc/@docusaurus/logger",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},sidebar:"api",previous:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},d={},a=[{value:"APIs",id:"apis",level:2},{value:"Using the template literal tag",id:"using-the-template-literal-tag",level:3}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"-logger",children:"\ud83d\udce6 logger"})}),"\n",(0,i.jsx)(n.p,{children:"An encapsulated logger for semantically formatting console messages."}),"\n",(0,i.jsx)(n.p,{children:"Authors of packages in the Docusaurus ecosystem are encouraged to use this package to provide unified log formats."}),"\n",(0,i.jsx)(n.h2,{id:"apis",children:"APIs"}),"\n",(0,i.jsxs)(n.p,{children:["It exports a single object as default export: ",(0,i.jsx)(n.code,{children:"logger"}),". ",(0,i.jsx)(n.code,{children:"logger"})," has the following properties:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Some useful colors.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"red"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"yellow"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"green"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"bold"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"dim"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Formatters. These functions all have the signature ",(0,i.jsx)(n.code,{children:"(msg: unknown) => string"}),". Note that their implementations are not guaranteed. You should only care about their semantics.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": formats a file path."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url"}),": formats a URL."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),": formats an identifier."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code"}),": formats a code snippet."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue"}),": subdues the text."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"num"}),": formats a number."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"interpolate"})," function. It is a template literal tag. The syntax can be found below."]}),"\n",(0,i.jsxs)(n.li,{children:["Logging functions. All logging functions can both be used as normal functions (similar to the ",(0,i.jsx)(n.code,{children:"console.log"})," family, but only accepts one parameter) or template literal tags.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"info"}),": prints information."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"warn"}),": prints a warning that should be paid attention to."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"error"}),": prints an error (not necessarily halting the program) that signals significant problems."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"success"}),": prints a success message."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"report"})," function. It takes a ",(0,i.jsx)(n.code,{children:"ReportingSeverity"})," value (",(0,i.jsx)(n.code,{children:"ignore"}),", ",(0,i.jsx)(n.code,{children:"log"}),", ",(0,i.jsx)(n.code,{children:"warn"}),", ",(0,i.jsx)(n.code,{children:"throw"}),") and reports a message according to the severity."]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["A word on the ",(0,i.jsx)(n.code,{children:"error"})," formatter"]}),(0,i.jsxs)(n.p,{children:["Beware that an ",(0,i.jsx)(n.code,{children:"error"})," message, even when it doesn't hang the program, is likely going to cause confusion. When users inspect logs and find an ",(0,i.jsx)(n.code,{children:"[ERROR]"}),", even when the build succeeds, they will assume something is going wrong. Use it sparingly."]}),(0,i.jsxs)(n.p,{children:["Docusaurus only uses ",(0,i.jsx)(n.code,{children:"logger.error"})," when printing messages immediately before throwing an error, or when user has set the reporting severity of ",(0,i.jsx)(n.code,{children:"onBrokenLink"}),", etc. to ",(0,i.jsx)(n.code,{children:'"error"'}),"."]}),(0,i.jsxs)(n.p,{children:["In addition, ",(0,i.jsx)(n.code,{children:"warn"})," and ",(0,i.jsx)(n.code,{children:"error"})," will color the ",(0,i.jsx)(n.strong,{children:"entire"})," message for better attention. If you are printing large blocks of help text about an error, better use ",(0,i.jsx)(n.code,{children:"logger.info"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-template-literal-tag",children:"Using the template literal tag"}),"\n",(0,i.jsxs)(n.p,{children:["The template literal tag evaluates the template and expressions embedded. ",(0,i.jsx)(n.code,{children:"interpolate"})," returns a new string, while other logging functions prints it. Below is a typical usage:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import logger from '@docusaurus/logger';\n\nlogger.info`Hello name=${name}! You have number=${money} dollars. Here are the ${\n items.length > 1 ? 'items' : 'item'\n} on the shelf: ${items}\nTo buy anything, enter code=${'buy x'} where code=${'x'} is the item's name; to quit, press code=${'Ctrl + C'}.`;\n"})}),"\n",(0,i.jsxs)(n.p,{children:["An embedded expression is optionally preceded by a flag in the form ",(0,i.jsx)(n.code,{children:"[a-z]+="})," (a few lowercase letters, followed by an equals sign, directly preceding the embedded expression). If the expression is not preceded by any flag, it's printed out as-is. Otherwise, it's formatted with one of the formatters:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path="}),": ",(0,i.jsx)(n.code,{children:"path"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url="}),": ",(0,i.jsx)(n.code,{children:"url"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name="}),": ",(0,i.jsx)(n.code,{children:"name"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code="}),": ",(0,i.jsx)(n.code,{children:"code"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue="}),": ",(0,i.jsx)(n.code,{children:"subdue"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number="}),": ",(0,i.jsx)(n.code,{children:"num"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If the expression is an array, it's formatted by ",(0,i.jsx)(n.code,{children:"`\\n- ${array.join('\\n- ')}\\n`"})," (note it automatically gets a leading line end). Each member is formatted by itself and the bullet is not formatted. So you would see the above message printed as:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Some text output in the terminal, containing array, code, name, and number formatting",src:s(15009).Z+"",width:"1234",height:"150"})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var i=s(27378);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46f5ed35.d7ead690.js b/assets/js/46f5ed35.d7ead690.js deleted file mode 100644 index 95a16cb4fc67..000000000000 --- a/assets/js/46f5ed35.d7ead690.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6292],{15009:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png"},79466:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var i=s(24246),r=s(71670);const t={sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},o="\ud83d\udce6 logger",l={id:"api/misc/logger/logger",title:"\ud83d\udce6 logger",description:"An encapsulated logger for semantically formatting console messages.",source:"@site/docs/api/misc/logger/logger.mdx",sourceDirName:"api/misc/logger",slug:"/api/misc/@docusaurus/logger",permalink:"/docs/api/misc/@docusaurus/logger",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},sidebar:"api",previous:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},d={},c=[{value:"APIs",id:"apis",level:2},{value:"Using the template literal tag",id:"using-the-template-literal-tag",level:3}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"-logger",children:"\ud83d\udce6 logger"})}),"\n",(0,i.jsx)(n.p,{children:"An encapsulated logger for semantically formatting console messages."}),"\n",(0,i.jsx)(n.p,{children:"Authors of packages in the Docusaurus ecosystem are encouraged to use this package to provide unified log formats."}),"\n",(0,i.jsx)(n.h2,{id:"apis",children:"APIs"}),"\n",(0,i.jsxs)(n.p,{children:["It exports a single object as default export: ",(0,i.jsx)(n.code,{children:"logger"}),". ",(0,i.jsx)(n.code,{children:"logger"})," has the following properties:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Some useful colors.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"red"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"yellow"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"green"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"bold"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"dim"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Formatters. These functions all have the signature ",(0,i.jsx)(n.code,{children:"(msg: unknown) => string"}),". Note that their implementations are not guaranteed. You should only care about their semantics.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": formats a file path."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url"}),": formats a URL."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),": formats an identifier."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code"}),": formats a code snippet."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue"}),": subdues the text."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"num"}),": formats a number."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"interpolate"})," function. It is a template literal tag. The syntax can be found below."]}),"\n",(0,i.jsxs)(n.li,{children:["Logging functions. All logging functions can both be used as normal functions (similar to the ",(0,i.jsx)(n.code,{children:"console.log"})," family, but only accepts one parameter) or template literal tags.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"info"}),": prints information."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"warn"}),": prints a warning that should be paid attention to."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"error"}),": prints an error (not necessarily halting the program) that signals significant problems."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"success"}),": prints a success message."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"report"})," function. It takes a ",(0,i.jsx)(n.code,{children:"ReportingSeverity"})," value (",(0,i.jsx)(n.code,{children:"ignore"}),", ",(0,i.jsx)(n.code,{children:"log"}),", ",(0,i.jsx)(n.code,{children:"warn"}),", ",(0,i.jsx)(n.code,{children:"throw"}),") and reports a message according to the severity."]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["A word on the ",(0,i.jsx)(n.code,{children:"error"})," formatter"]}),(0,i.jsxs)(n.p,{children:["Beware that an ",(0,i.jsx)(n.code,{children:"error"})," message, even when it doesn't hang the program, is likely going to cause confusion. When users inspect logs and find an ",(0,i.jsx)(n.code,{children:"[ERROR]"}),", even when the build succeeds, they will assume something is going wrong. Use it sparingly."]}),(0,i.jsxs)(n.p,{children:["Docusaurus only uses ",(0,i.jsx)(n.code,{children:"logger.error"})," when printing messages immediately before throwing an error, or when user has set the reporting severity of ",(0,i.jsx)(n.code,{children:"onBrokenLink"}),", etc. to ",(0,i.jsx)(n.code,{children:'"error"'}),"."]}),(0,i.jsxs)(n.p,{children:["In addition, ",(0,i.jsx)(n.code,{children:"warn"})," and ",(0,i.jsx)(n.code,{children:"error"})," will color the ",(0,i.jsx)(n.strong,{children:"entire"})," message for better attention. If you are printing large blocks of help text about an error, better use ",(0,i.jsx)(n.code,{children:"logger.info"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-template-literal-tag",children:"Using the template literal tag"}),"\n",(0,i.jsxs)(n.p,{children:["The template literal tag evaluates the template and expressions embedded. ",(0,i.jsx)(n.code,{children:"interpolate"})," returns a new string, while other logging functions prints it. Below is a typical usage:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import logger from '@docusaurus/logger';\n\nlogger.info`Hello name=${name}! You have number=${money} dollars. Here are the ${\n items.length > 1 ? 'items' : 'item'\n} on the shelf: ${items}\nTo buy anything, enter code=${'buy x'} where code=${'x'} is the item's name; to quit, press code=${'Ctrl + C'}.`;\n"})}),"\n",(0,i.jsxs)(n.p,{children:["An embedded expression is optionally preceded by a flag in the form ",(0,i.jsx)(n.code,{children:"[a-z]+="})," (a few lowercase letters, followed by an equals sign, directly preceding the embedded expression). If the expression is not preceded by any flag, it's printed out as-is. Otherwise, it's formatted with one of the formatters:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path="}),": ",(0,i.jsx)(n.code,{children:"path"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url="}),": ",(0,i.jsx)(n.code,{children:"url"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name="}),": ",(0,i.jsx)(n.code,{children:"name"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code="}),": ",(0,i.jsx)(n.code,{children:"code"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue="}),": ",(0,i.jsx)(n.code,{children:"subdue"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number="}),": ",(0,i.jsx)(n.code,{children:"num"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If the expression is an array, it's formatted by ",(0,i.jsx)(n.code,{children:"`\\n- ${array.join('\\n- ')}\\n`"})," (note it automatically gets a leading line end). Each member is formatted by itself and the bullet is not formatted. So you would see the above message printed as:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Some text output in the terminal, containing array, code, name, and number formatting",src:s(15009).Z+"",width:"1234",height:"150"})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var i=s(27378);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/492798ca.1bafc123.js b/assets/js/492798ca.8a687a56.js similarity index 52% rename from assets/js/492798ca.1bafc123.js rename to assets/js/492798ca.8a687a56.js index aaa3268e1cc7..bf44755bc9d9 100644 --- a/assets/js/492798ca.1bafc123.js +++ b/assets/js/492798ca.8a687a56.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91557],{61132:(e,n,r)=>{r.d(n,{Z:()=>l});var t=r(24246),i=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>D});var t=r(24246),i=r(27378),a=r(40624),l=r(75527),s=r(3620),o=r(44479),c=r(62821),d=r(52196),u=r(53589);function h(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function g(e){var n,r;return null!==(r=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:n,children:r}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,s.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,c._X)(t),l=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(p(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){h(e,n,r[n])}))}return e}({},r.location),{search:n.toString()}))}),[t,r]);return[a,l]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,a=m(e),[l,s]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[c,d]=b({queryString:r,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,u.Nk)(n);return[r,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),p(e)}),[d,p,a]),tabValues:a}}var x=r(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){v(e,n,r[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function k({className:e,block:n,selectedValue:r,selectValue:i,tabValues:s}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const n=e.currentTarget,t=o.indexOf(n),a=s[t].value;a!==r&&(c(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[o.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},i),{className:(0,a.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:r}){const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function P(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},n,e)),(0,t.jsx)(I,w({},n,e))]})}function D(e){const n=(0,x.Z)();return(0,t.jsx)(P,O(w({},e),{children:g(e.children)}),String(n))}},52605:(e,n,r)=>{r.d(n,{Z:()=>d});var t=r(24246),i=r(27378),a=r(80474),l=r(3620);const s={apiTable:"apiTable_e8hp"};function o({name:e,children:n},r){const s=function(e){let n=e;for(;(0,i.isValidElement)(n);)[n]=i.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),o=e?`${e}-${s}`:s,c=`#${o}`,d=(0,l.k6)();return(0,a.Z)().collectAnchor(o),(0,t.jsx)("tr",{id:o,tabIndex:0,ref:d.location.hash===c?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||d.push(c)},onKeyDown:e=>{"Enter"===e.key&&d.push(c)},children:n.props.children})}const c=i.forwardRef(o);function d({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,a]=i.Children.toArray(e.props.children),l=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=l.current)||void 0===e||e.focus()}),[l]);const o=i.Children.map(a.props.children,(e=>(0,t.jsx)(c,{name:n,ref:l,children:e})));return(0,t.jsxs)("table",{className:s.apiTable,children:[r,(0,t.jsx)("tbody",{children:o})]})}},15107:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var t=r(24246),i=r(71670),a=r(97555),l=r(61132),s=r(52605);const o={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},c="\ud83d\udce6 plugin-ideal-image",d={id:"api/plugins/plugin-ideal-image",title:"\ud83d\udce6 plugin-ideal-image",description:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).",source:"@site/docs/api/plugins/plugin-ideal-image.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},next:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"}},u={},h=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"-plugin-ideal-image",children:"\ud83d\udce6 plugin-ideal-image"})}),"\n","\n",(0,t.jsx)(n.p,{children:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["By default, the plugin is ",(0,t.jsx)(n.strong,{children:"inactive in development"})," so you could always view full-scale images. If you want to debug the ideal image behavior, you could set the ",(0,t.jsx)(n.a,{href:"#disableInDev",children:(0,t.jsx)(n.code,{children:"disableInDev"})})," option to ",(0,t.jsx)(n.code,{children:"false"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(l.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-ideal-image\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"This plugin supports the PNG and JPG formats only."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import Image from '@theme/IdealImage';\nimport thumbnail from './path/to/img.png';\n\n// your React code\n<Image img={thumbnail} />\n\n// or\n<Image img={require('./path/to/img.png')} />\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This plugin registers a ",(0,t.jsx)(n.a,{href:"https://webpack.js.org/loaders/",children:"Webpack loader"})," that changes the type of imported/require images:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Before: ",(0,t.jsx)(n.code,{children:"string"})]}),"\n",(0,t.jsxs)(n.li,{children:["After: ",(0,t.jsx)(n.code,{children:'{preSrc: string, src: import("@theme/IdealImage").SrcImage}'})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,t.jsx)(s.Z,{children:(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Option"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ideal-img/[name].[hash:hex:7].[width].[ext]"})}),(0,t.jsx)(n.td,{children:"Filename template for output files."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sizes"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number[]"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify all widths you want to use. If a specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"size"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify one width you want to use; if the specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"min"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["As an alternative to manually specifying ",(0,t.jsx)(n.code,{children:"sizes"}),", you can specify ",(0,t.jsx)(n.code,{children:"min"}),", ",(0,t.jsx)(n.code,{children:"max"})," and ",(0,t.jsx)(n.code,{children:"steps"}),", and the sizes will be generated for you."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["See ",(0,t.jsx)(n.code,{children:"min"})," above"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"steps"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4"})}),(0,t.jsxs)(n.td,{children:["Configure the number of images generated between ",(0,t.jsx)(n.code,{children:"min"})," and ",(0,t.jsx)(n.code,{children:"max"})," (inclusive)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"quality"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"85"})}),(0,t.jsx)(n.td,{children:"JPEG compression quality"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"disableInDev"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["You can test ideal image behavior in dev mode by setting this to ",(0,t.jsx)(n.code,{children:"false"}),". ",(0,t.jsx)(n.strong,{children:"Tip"}),": use ",(0,t.jsx)(n.a,{href:"https://www.browserstack.com/guide/how-to-perform-network-throttling-in-chrome",children:"network throttling"})," in your browser to simulate slow networks."]})]})]})]})}),"\n",(0,t.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,t.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-ideal-image',\n // highlight-start\n {\n quality: 70,\n max: 1030, // max resized image's size.\n min: 640, // min resized image's size. if original is lower, use that size.\n steps: 2, // the max number of images generated between min and max (inclusive)\n disableInDev: false,\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>l});var t=r(27378);const i={},a=t.createContext(i);function l(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91557],{61132:(e,n,r)=>{r.d(n,{Z:()=>l});var t=r(24246),i=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>D});var t=r(24246),i=r(27378),a=r(40624),l=r(75527),s=r(3620),o=r(44479),c=r(62821),d=r(52196),u=r(53589);function h(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function g(e){var n,r;return null!==(r=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:n,children:r}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,s.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,c._X)(t),l=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(p(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){h(e,n,r[n])}))}return e}({},r.location),{search:n.toString()}))}),[t,r]);return[a,l]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,a=m(e),[l,s]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[c,d]=b({queryString:r,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,u.Nk)(n);return[r,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),p(e)}),[d,p,a]),tabValues:a}}var x=r(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){v(e,n,r[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function k({className:e,block:n,selectedValue:r,selectValue:i,tabValues:s}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const n=e.currentTarget,t=o.indexOf(n),a=s[t].value;a!==r&&(c(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[o.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},i),{className:(0,a.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:r}){const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function P(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},n,e)),(0,t.jsx)(I,w({},n,e))]})}function D(e){const n=(0,x.Z)();return(0,t.jsx)(P,O(w({},e),{children:g(e.children)}),String(n))}},52605:(e,n,r)=>{r.d(n,{Z:()=>d});var t=r(24246),i=r(27378),a=r(80474),l=r(3620);const s={apiTable:"apiTable_e8hp"};function o({name:e,children:n},r){const s=function(e){let n=e;for(;(0,i.isValidElement)(n);)[n]=i.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),o=e?`${e}-${s}`:s,c=`#${o}`,d=(0,l.k6)();return(0,a.Z)().collectAnchor(o),(0,t.jsx)("tr",{id:o,tabIndex:0,ref:d.location.hash===c?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||d.push(c)},onKeyDown:e=>{"Enter"===e.key&&d.push(c)},children:n.props.children})}const c=i.forwardRef(o);function d({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,a]=i.Children.toArray(e.props.children),l=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=l.current)||void 0===e||e.focus()}),[l]);const o=i.Children.map(a.props.children,(e=>(0,t.jsx)(c,{name:n,ref:l,children:e})));return(0,t.jsxs)("table",{className:s.apiTable,children:[r,(0,t.jsx)("tbody",{children:o})]})}},15107:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var t=r(24246),i=r(71670),a=r(97555),l=r(61132),s=r(52605);const o={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},c="\ud83d\udce6 plugin-ideal-image",d={id:"api/plugins/plugin-ideal-image",title:"\ud83d\udce6 plugin-ideal-image",description:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).",source:"@site/docs/api/plugins/plugin-ideal-image.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},next:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"}},u={},h=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"-plugin-ideal-image",children:"\ud83d\udce6 plugin-ideal-image"})}),"\n","\n",(0,t.jsx)(n.p,{children:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["By default, the plugin is ",(0,t.jsx)(n.strong,{children:"inactive in development"})," so you could always view full-scale images. If you want to debug the ideal image behavior, you could set the ",(0,t.jsx)(n.a,{href:"#disableInDev",children:(0,t.jsx)(n.code,{children:"disableInDev"})})," option to ",(0,t.jsx)(n.code,{children:"false"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(l.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-ideal-image\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"This plugin supports the PNG and JPG formats only."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import Image from '@theme/IdealImage';\nimport thumbnail from './path/to/img.png';\n\n// your React code\n<Image img={thumbnail} />\n\n// or\n<Image img={require('./path/to/img.png')} />\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This plugin registers a ",(0,t.jsx)(n.a,{href:"https://webpack.js.org/loaders/",children:"Webpack loader"})," that changes the type of imported/require images:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Before: ",(0,t.jsx)(n.code,{children:"string"})]}),"\n",(0,t.jsxs)(n.li,{children:["After: ",(0,t.jsx)(n.code,{children:'{preSrc: string, src: import("@theme/IdealImage").SrcImage}'})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,t.jsx)(s.Z,{children:(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Option"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ideal-img/[name].[hash:hex:7].[width].[ext]"})}),(0,t.jsx)(n.td,{children:"Filename template for output files."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sizes"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number[]"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify all widths you want to use. If a specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"size"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify one width you want to use; if the specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"min"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["As an alternative to manually specifying ",(0,t.jsx)(n.code,{children:"sizes"}),", you can specify ",(0,t.jsx)(n.code,{children:"min"}),", ",(0,t.jsx)(n.code,{children:"max"})," and ",(0,t.jsx)(n.code,{children:"steps"}),", and the sizes will be generated for you."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["See ",(0,t.jsx)(n.code,{children:"min"})," above"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"steps"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4"})}),(0,t.jsxs)(n.td,{children:["Configure the number of images generated between ",(0,t.jsx)(n.code,{children:"min"})," and ",(0,t.jsx)(n.code,{children:"max"})," (inclusive)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"quality"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"85"})}),(0,t.jsx)(n.td,{children:"JPEG compression quality"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"disableInDev"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["You can test ideal image behavior in dev mode by setting this to ",(0,t.jsx)(n.code,{children:"false"}),". ",(0,t.jsx)(n.strong,{children:"Tip"}),": use ",(0,t.jsx)(n.a,{href:"https://www.browserstack.com/guide/how-to-perform-network-throttling-in-chrome",children:"network throttling"})," in your browser to simulate slow networks."]})]})]})]})}),"\n",(0,t.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,t.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-ideal-image',\n // highlight-start\n {\n quality: 70,\n max: 1030, // max resized image's size.\n min: 640, // min resized image's size. if original is lower, use that size.\n steps: 2, // the max number of images generated between min and max (inclusive)\n disableInDev: false,\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>l});var t=r(27378);const i={},a=t.createContext(i);function l(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4994aa22.39e7478d.js b/assets/js/4994aa22.4f69a4d4.js similarity index 62% rename from assets/js/4994aa22.39e7478d.js rename to assets/js/4994aa22.4f69a4d4.js index 32751edc0931..5791e61e3a6b 100644 --- a/assets/js/4994aa22.39e7478d.js +++ b/assets/js/4994aa22.4f69a4d4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78717],{23266:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},3072:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},61132:(e,s,t)=>{t.d(s,{Z:()=>i});var n=t(24246),a=(t(27378),t(40624));const r={tabItem:"tabItem_pnkT"};function i({children:e,hidden:s,className:t}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,t),hidden:s,children:e})}},97555:(e,s,t)=>{t.d(s,{Z:()=>E});var n=t(24246),a=t(27378),r=t(40624),i=t(75527),o=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function h(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function m(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function p(e){var s,t;return null!==(t=null===(s=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:s,children:t}=e;return(0,a.useMemo)((()=>{const e=null!=s?s:function(e){return p(e).map((({props:{value:e,label:s,attributes:t,default:n}})=>({value:e,label:s,attributes:t,default:n})))}(t);return function(e){const s=(0,u.lx)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,t])}function f({value:e,tabValues:s}){return s.some((s=>s.value===e))}function b({queryString:e=!1,groupId:s}){const t=(0,o.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,c._X)(n),i=(0,a.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(t.location.search);s.set(n,e),t.replace(m(function(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){h(e,s,t[s])}))}return e}({},t.location),{search:s.toString()}))}),[n,t]);return[r,i]}function x(e){const{defaultValue:s,queryString:t=!1,groupId:n}=e,r=g(e),[i,o]=(0,a.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const n=null!==(t=s.find((e=>e.default)))&&void 0!==t?t:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[c,u]=b({queryString:t,groupId:n}),[h,m]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,n]=(0,d.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),p=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var j=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function v(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){w(e,s,t[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function O({className:e,block:s,selectedValue:t,selectValue:a,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const s=e.currentTarget,n=l.indexOf(s),r=o[n].value;r!==t&&(c(s),a(r))},d=e=>{let s=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;var t;s=null!==(t=l[n])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var n;s=null!==(n=l[t])&&void 0!==n?n:l[l.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:o.map((({value:e,label:s,attributes:a})=>(0,n.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},a),{className:(0,r.Z)("tabs__item",y.tabItem,null==a?void 0:a.className,{"tabs__item--active":t===e}),children:null!=s?s:e}),e)))})}function D({lazy:e,children:s,selectedValue:t}){const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function S(e){const s=x(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(O,v({},s,e)),(0,n.jsx)(D,v({},s,e))]})}function E(e){const s=(0,j.Z)();return(0,n.jsx)(S,k(v({},e),{children:p(e.children)}),String(s))}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),a=(t(27378),t(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){i(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:i,bodyStyle:c}){return(0,n.jsxs)("div",{className:r.browserWindow,style:l(o({},i),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(r.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},17288:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png"},90056:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg"},3854:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg"},99939:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>b,contentTitle:()=>g,default:()=>y,frontMatter:()=>p,metadata:()=>f,toc:()=>x});var n,a=t(24246),r=t(71670),i=t(6698),o=t(97555),l=t(61132),c=t(27378);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},u.apply(this,arguments)}const d=e=>{let{title:s,titleId:t,...a}=e;return c.createElement("svg",u({xmlns:"http://www.w3.org/2000/svg",width:200,height:200,viewBox:"0 0 200 200","aria-labelledby":t},a),s?c.createElement("title",{id:t},s):null,n||(n=c.createElement("g",{fill:"none",fillRule:"evenodd"},c.createElement("path",{fill:"#FFF",d:"M99 52h84v34H99z"}),c.createElement("path",{fill:"#3ECC5F",d:"M23 163c-7.398 0-13.843-4.027-17.303-10A19.9 19.9 0 0 0 3 163c0 11.046 8.954 20 20 20h20v-20z"}),c.createElement("path",{fill:"#3ECC5F",d:"M112.98 57.376 183 53V43c0-11.046-8.954-20-20-20H73l-2.5-4.33c-1.112-1.925-3.889-1.925-5 0L63 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L53 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L43 23q-.032.002-.065.003l-4.142-4.141c-1.57-1.571-4.252-.853-4.828 1.294l-1.369 5.104-5.192-1.392c-2.148-.575-4.111 1.389-3.535 3.536l1.39 5.193-5.102 1.367c-2.148.576-2.867 3.259-1.296 4.83l4.142 4.142q-.002.031-.003.064l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 53l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 63l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 73l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 83l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 93l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 103l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 113l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 123l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 133l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 143l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 153l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 163c0 11.046 8.954 20 20 20h120c11.046 0 20-8.954 20-20V83l-70.02-4.376A10.645 10.645 0 0 1 103 68c0-5.621 4.37-10.273 9.98-10.624"}),c.createElement("path",{fill:"#3ECC5F",d:"M143 183h30v-40h-30z"}),c.createElement("path",{fill:"#44D860",d:"M193 158c-.219 0-.428.037-.639.064q-.055-.225-.116-.451A5 5 0 0 0 190.32 148a4.96 4.96 0 0 0-3.016 1.036 27 27 0 0 0-.335-.336 4.96 4.96 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5"}),c.createElement("path",{fill:"#3ECC5F",d:"M153 123h30v-20h-30z"}),c.createElement("path",{fill:"#44D860",d:"M193 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032q-.028-.113-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a7 7 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A10 10 0 0 0 183 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494q.085-.083.168-.168c.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807q.03-.112.058-.225c.105.013.21.032.319.032"}),c.createElement("path",{fill:"#000",d:"M63 55.5a2.5 2.5 0 0 1-2.5-2.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5a2.5 2.5 0 1 1-5 0c0-6.893 5.607-12.5 12.5-12.5S65.5 46.107 65.5 53a2.5 2.5 0 0 1-2.5 2.5"}),c.createElement("path",{fill:"#FFFF50",d:"M103 183h60c11.046 0 20-8.954 20-20V93h-60c-11.046 0-20 8.954-20 20z"}),c.createElement("path",{fill:"#000",d:"M168.02 124h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0-49.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 19.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2M183 61.611c-.012 0-.022-.006-.034-.005-3.09.105-4.552 3.196-5.842 5.923-1.346 2.85-2.387 4.703-4.093 4.647-1.889-.068-2.969-2.202-4.113-4.46-1.314-2.594-2.814-5.536-5.963-5.426-3.046.104-4.513 2.794-5.807 5.167-1.377 2.528-2.314 4.065-4.121 3.994-1.927-.07-2.951-1.805-4.136-3.813-1.321-2.236-2.848-4.75-5.936-4.664-2.994.103-4.465 2.385-5.763 4.4-1.373 2.13-2.335 3.428-4.165 3.351-1.973-.07-2.992-1.51-4.171-3.177-1.324-1.873-2.816-3.993-5.895-3.89-2.928.1-4.399 1.97-5.696 3.618-1.232 1.564-2.194 2.802-4.229 2.724a1 1 0 0 0-.072 2c3.017.101 4.545-1.8 5.872-3.487 1.177-1.496 2.193-2.787 4.193-2.855 1.926-.082 2.829 1.115 4.195 3.045 1.297 1.834 2.769 3.914 5.731 4.021 3.103.104 4.596-2.215 5.918-4.267 1.182-1.834 2.202-3.417 4.15-3.484 1.793-.067 2.769 1.35 4.145 3.681 1.297 2.197 2.766 4.686 5.787 4.796 3.125.108 4.634-2.62 5.949-5.035 1.139-2.088 2.214-4.06 4.119-4.126 1.793-.042 2.728 1.595 4.111 4.33 1.292 2.553 2.757 5.445 5.825 5.556l.169.003c3.064 0 4.518-3.075 5.805-5.794 1.139-2.41 2.217-4.68 4.067-4.773z"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 183h40v-40H83z"}),c.createElement("path",{fill:"#44D860",d:"M143 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 140.32 148a4.96 4.96 0 0 0-3.016 1.036 27 27 0 0 0-.335-.336 4.96 4.96 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 123h40v-20H83z"}),c.createElement("path",{fill:"#44D860",d:"M133 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032q-.028-.113-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a7 7 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A10 10 0 0 0 123 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494q.085-.083.168-.168c.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807q.03-.112.058-.225c.105.013.21.032.319.032"}),c.createElement("path",{fill:"#000",d:"M143 41.75c-.16 0-.33-.02-.49-.05a2.5 2.5 0 0 1-.47-.14c-.15-.06-.29-.14-.431-.23-.13-.09-.259-.2-.38-.31-.109-.12-.219-.24-.309-.38s-.17-.28-.231-.43a2.6 2.6 0 0 1-.189-.96c0-.16.02-.33.05-.49s.08-.31.139-.47c.061-.15.141-.29.231-.43.09-.13.2-.26.309-.38.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23s.31-.11.47-.14c.32-.07.65-.07.98 0 .159.03.32.08.47.14s.29.14.43.23c.13.09.259.2.38.31.11.12.22.25.31.38.09.14.17.28.23.43.06.16.11.31.14.47.029.16.05.33.05.49 0 .66-.271 1.31-.73 1.77-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.6 2.6 0 0 1-.96.19m20-1.25c-.66 0-1.3-.27-1.771-.73a4 4 0 0 1-.309-.38c-.09-.14-.17-.28-.231-.43a2.6 2.6 0 0 1-.189-.96c0-.66.27-1.3.729-1.77.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23s.31-.11.47-.14c.32-.07.66-.07.98 0 .159.03.32.08.47.14s.29.14.43.23c.13.09.259.2.38.31.459.47.73 1.11.73 1.77 0 .16-.021.33-.05.49s-.08.32-.14.47c-.07.15-.14.29-.23.43-.09.13-.2.26-.31.38-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.6 2.6 0 0 1-.96.19"}))))};var h=t(66448),m=t(97360);const p={id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},g="Assets",f={id:"guides/markdown-features/assets",title:"Assets",description:"Handling assets in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-assets.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/assets",permalink:"/docs/markdown-features/assets",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},sidebar:"docs",previous:{title:"Headings and Table of contents",permalink:"/docs/markdown-features/toc"},next:{title:"Markdown links",permalink:"/docs/markdown-features/links"}},b={},x=[{value:"Images",id:"images",level:2},{value:"Files",id:"files",level:2},{value:"Inline SVGs",id:"inline-svgs",level:2},{value:"Themed Images",id:"themed-images",level:2},{value:"GitHub-style themed images",id:"github-style-themed-images",level:3},{value:"Static assets",id:"static-assets",level:2}];function j(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"assets",children:"Assets"})}),"\n","\n",(0,a.jsx)(s.p,{children:"Sometimes you want to link to assets (e.g. docx files, images...) directly from Markdown files, and it is convenient to co-locate the asset next to the Markdown file using it."}),"\n",(0,a.jsx)(s.p,{children:"Let's imagine the following file structure:"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{children:"# Your doc\n/website/docs/myFeature.mdx\n\n# Some assets you want to use\n/website/docs/assets/docusaurus-asset-example-banner.png\n/website/docs/assets/docusaurus-asset-example.docx\n"})}),"\n",(0,a.jsx)(s.h2,{id:"images",children:"Images"}),"\n",(0,a.jsx)(s.p,{children:"You can display images in three different ways: Markdown syntax, CJS require, or ES imports syntax."}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(l.Z,{value:"Markdown syntax",children:[(0,a.jsx)(s.p,{children:"Display images using simple Markdown syntax:"}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Example banner](./assets/docusaurus-asset-example-banner.png)\n"})})]}),(0,a.jsxs)(l.Z,{value:"CommonJS require",children:[(0,a.jsxs)(s.p,{children:["Display images using inline CommonJS ",(0,a.jsx)(s.code,{children:"require"})," in JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"<img\n src={require('./assets/docusaurus-asset-example-banner.png').default}\n alt=\"Example banner\"\n/>\n"})})]}),(0,a.jsxs)(l.Z,{value:"Import statement",children:[(0,a.jsxs)(s.p,{children:["Display images using ES ",(0,a.jsx)(s.code,{children:"import"})," syntax and JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import myImageUrl from './assets/docusaurus-asset-example-banner.png';\n\n<img src={myImageUrl} alt=\"Example banner\" />;\n"})})]})]}),"\n",(0,a.jsx)(s.p,{children:"All of the above result in displaying the image:"}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"My image alternative text",src:t(17288).Z+"",width:"422",height:"110"})})}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If you are using ",(0,a.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-ideal-image",children:"@docusaurus/plugin-ideal-image"}),", you need to use the dedicated image component, as documented."]})}),"\n",(0,a.jsx)(s.h2,{id:"files",children:"Files"}),"\n",(0,a.jsxs)(s.p,{children:["In the same way, you can link to existing assets by ",(0,a.jsx)(s.code,{children:"require"}),"'ing them and using the returned URL in ",(0,a.jsx)(s.code,{children:"video"}),"s, ",(0,a.jsx)(s.code,{children:"a"})," anchor links, etc."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"# My Markdown page\n\n<a target=\"\\_blank\" href={require('./assets/docusaurus-asset-example.docx').default}> Download this docx </a>\n\nor\n\n[Download this docx using Markdown](./assets/docusaurus-asset-example.docx)\n"})}),"\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsx)("a",{target:"_blank",href:t(23266).Z,children:"Download this docx"}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(3072).Z+"",children:"Download this docx using Markdown"})})]}),"\n",(0,a.jsx)(s.admonition,{title:"Markdown links are always file paths",type:"info",children:(0,a.jsxs)(s.p,{children:["If you use the Markdown image or link syntax, all asset paths will be resolved as file paths by Docusaurus and automatically converted to ",(0,a.jsx)(s.code,{children:"require()"})," calls. You don't need to use ",(0,a.jsx)(s.code,{children:"require()"})," in Markdown unless you use the JSX syntax, which you do have to handle yourself."]})}),"\n",(0,a.jsx)(s.h2,{id:"inline-svgs",children:"Inline SVGs"}),"\n",(0,a.jsx)(s.p,{children:"Docusaurus supports inlining SVGs out of the box."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg />;\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{})}),"\n",(0,a.jsx)(s.p,{children:"This can be useful if you want to alter the part of the SVG image via CSS. For example, you can change one of the SVG colors based on the current theme."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg className=\"themedDocusaurus\" />;\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",children:"[data-theme='light'] .themedDocusaurus [fill='#FFFF50'] {\n fill: greenyellow;\n}\n\n[data-theme='dark'] .themedDocusaurus [fill='#FFFF50'] {\n fill: seagreen;\n}\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{className:"themedDocusaurus"})}),"\n",(0,a.jsx)(s.h2,{id:"themed-images",children:"Themed Images"}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus supports themed images: the ",(0,a.jsx)(s.code,{children:"ThemedImage"})," component (included in the themes) allows you to switch the image source based on the current theme."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import useBaseUrl from '@docusaurus/useBaseUrl';\nimport ThemedImage from '@theme/ThemedImage';\n\n<ThemedImage\n alt=\"Docusaurus themed image\"\n // highlight-start\n sources={{\n light: useBaseUrl('/img/docusaurus_light.svg'),\n dark: useBaseUrl('/img/docusaurus_dark.svg'),\n }}\n // highlight-end\n/>;\n"})}),"\n","\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(m.Z,{alt:"Docusaurus themed image",sources:{light:(0,h.ZP)("/img/docusaurus_keytar.svg"),dark:(0,h.ZP)("/img/docusaurus_speed.svg")}})}),"\n",(0,a.jsx)(s.h3,{id:"github-style-themed-images",children:"GitHub-style themed images"}),"\n",(0,a.jsxs)(s.p,{children:["GitHub uses its own ",(0,a.jsx)(s.a,{href:"https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/",children:"image theming approach"})," with path fragments, which you can easily implement yourself."]}),"\n",(0,a.jsxs)(s.p,{children:["To toggle the visibility of an image using the path fragment (for GitHub, it's ",(0,a.jsx)(s.code,{children:"#gh-dark-mode-only"})," and ",(0,a.jsx)(s.code,{children:"#gh-light-mode-only"}),"), add the following to your custom CSS (you can also use your own suffix if you don't want to be coupled to GitHub):"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",metastring:'title="src/css/custom.css"',children:"[data-theme='light'] img[src$='#gh-dark-mode-only'],\n[data-theme='dark'] img[src$='#gh-light-mode-only'] {\n display: none;\n}\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Docusaurus themed image](/img/docusaurus_keytar.svg#gh-light-mode-only)![Docusaurus themed image](/img/docusaurus_speed.svg#gh-dark-mode-only)\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(90056).Z+"#gh-light-mode-only",width:"200",height:"200"}),(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(3854).Z+"#gh-dark-mode-only",width:"250",height:"200"})]})}),"\n",(0,a.jsx)(s.h2,{id:"static-assets",children:"Static assets"}),"\n",(0,a.jsxs)(s.p,{children:["If a Markdown link or image has an absolute path, the path will be seen as a file path and will be resolved from the static directories. For example, if you have configured ",(0,a.jsx)(s.a,{href:"/docs/static-assets",children:"static directories"})," to be ",(0,a.jsx)(s.code,{children:"['public', 'static']"}),", then for the following image:"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",metastring:'title="my-doc.md"',children:"![An image from the static](/img/docusaurus.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus will try to look for it in both ",(0,a.jsx)(s.code,{children:"static/img/docusaurus.png"})," and ",(0,a.jsx)(s.code,{children:"public/img/docusaurus.png"}),". The link will then be converted to a ",(0,a.jsx)(s.code,{children:"require()"})," call instead of staying as a URL. This is desirable in two regards:"]}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsx)(s.li,{children:"You don't have to worry about the base URL, which Docusaurus will take care of when serving the asset;"}),"\n",(0,a.jsx)(s.li,{children:"The image enters Webpack's build pipeline and its name will be appended by a hash, which enables browsers to aggressively cache the image and improves your site's performance."}),"\n"]}),"\n",(0,a.jsxs)(s.p,{children:["If you intend to write URLs, you can use the ",(0,a.jsx)(s.code,{children:"pathname://"})," protocol to disable automatic asset linking."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![banner](pathname:///img/docusaurus-asset-example-banner.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["This link will be generated as ",(0,a.jsx)(s.code,{children:'<img src="/img/docusaurus-asset-example-banner.png" alt="banner" />'}),", without any processing or file existence checking."]})]})}function y(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(j,{...e})}):j(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78717],{23266:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},3072:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},61132:(e,s,t)=>{t.d(s,{Z:()=>i});var n=t(24246),a=(t(27378),t(40624));const r={tabItem:"tabItem_pnkT"};function i({children:e,hidden:s,className:t}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,t),hidden:s,children:e})}},97555:(e,s,t)=>{t.d(s,{Z:()=>E});var n=t(24246),a=t(27378),r=t(40624),i=t(75527),o=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function h(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function m(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function p(e){var s,t;return null!==(t=null===(s=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:s,children:t}=e;return(0,a.useMemo)((()=>{const e=null!=s?s:function(e){return p(e).map((({props:{value:e,label:s,attributes:t,default:n}})=>({value:e,label:s,attributes:t,default:n})))}(t);return function(e){const s=(0,u.lx)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,t])}function f({value:e,tabValues:s}){return s.some((s=>s.value===e))}function b({queryString:e=!1,groupId:s}){const t=(0,o.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,c._X)(n),i=(0,a.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(t.location.search);s.set(n,e),t.replace(m(function(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){h(e,s,t[s])}))}return e}({},t.location),{search:s.toString()}))}),[n,t]);return[r,i]}function x(e){const{defaultValue:s,queryString:t=!1,groupId:n}=e,r=g(e),[i,o]=(0,a.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const n=null!==(t=s.find((e=>e.default)))&&void 0!==t?t:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[c,u]=b({queryString:t,groupId:n}),[h,m]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,n]=(0,d.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),p=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var j=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function v(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){w(e,s,t[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function O({className:e,block:s,selectedValue:t,selectValue:a,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const s=e.currentTarget,n=l.indexOf(s),r=o[n].value;r!==t&&(c(s),a(r))},d=e=>{let s=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;var t;s=null!==(t=l[n])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var n;s=null!==(n=l[t])&&void 0!==n?n:l[l.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:o.map((({value:e,label:s,attributes:a})=>(0,n.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},a),{className:(0,r.Z)("tabs__item",y.tabItem,null==a?void 0:a.className,{"tabs__item--active":t===e}),children:null!=s?s:e}),e)))})}function D({lazy:e,children:s,selectedValue:t}){const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function S(e){const s=x(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(O,v({},s,e)),(0,n.jsx)(D,v({},s,e))]})}function E(e){const s=(0,j.Z)();return(0,n.jsx)(S,k(v({},e),{children:p(e.children)}),String(s))}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),a=(t(27378),t(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){i(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:i,bodyStyle:c}){return(0,n.jsxs)("div",{className:r.browserWindow,style:l(o({},i),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(r.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},17288:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png"},90056:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg"},3854:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg"},99939:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>b,contentTitle:()=>g,default:()=>y,frontMatter:()=>p,metadata:()=>f,toc:()=>x});var n,a=t(24246),r=t(71670),i=t(6698),o=t(97555),l=t(61132),c=t(27378);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},u.apply(this,arguments)}const d=e=>{let{title:s,titleId:t,...a}=e;return c.createElement("svg",u({xmlns:"http://www.w3.org/2000/svg",width:200,height:200,viewBox:"0 0 200 200","aria-labelledby":t},a),s?c.createElement("title",{id:t},s):null,n||(n=c.createElement("g",{fill:"none",fillRule:"evenodd"},c.createElement("path",{fill:"#FFF",d:"M99 52h84v34H99z"}),c.createElement("path",{fill:"#3ECC5F",d:"M23 163c-7.398 0-13.843-4.027-17.303-10A19.9 19.9 0 0 0 3 163c0 11.046 8.954 20 20 20h20v-20z"}),c.createElement("path",{fill:"#3ECC5F",d:"M112.98 57.376 183 53V43c0-11.046-8.954-20-20-20H73l-2.5-4.33c-1.112-1.925-3.889-1.925-5 0L63 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L53 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L43 23q-.032.002-.065.003l-4.142-4.141c-1.57-1.571-4.252-.853-4.828 1.294l-1.369 5.104-5.192-1.392c-2.148-.575-4.111 1.389-3.535 3.536l1.39 5.193-5.102 1.367c-2.148.576-2.867 3.259-1.296 4.83l4.142 4.142q-.002.031-.003.064l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 53l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 63l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 73l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 83l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 93l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 103l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 113l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 123l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 133l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 143l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 153l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 163c0 11.046 8.954 20 20 20h120c11.046 0 20-8.954 20-20V83l-70.02-4.376A10.645 10.645 0 0 1 103 68c0-5.621 4.37-10.273 9.98-10.624"}),c.createElement("path",{fill:"#3ECC5F",d:"M143 183h30v-40h-30z"}),c.createElement("path",{fill:"#44D860",d:"M193 158c-.219 0-.428.037-.639.064q-.055-.225-.116-.451A5 5 0 0 0 190.32 148a4.96 4.96 0 0 0-3.016 1.036 27 27 0 0 0-.335-.336 4.96 4.96 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5"}),c.createElement("path",{fill:"#3ECC5F",d:"M153 123h30v-20h-30z"}),c.createElement("path",{fill:"#44D860",d:"M193 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032q-.028-.113-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a7 7 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A10 10 0 0 0 183 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494q.085-.083.168-.168c.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807q.03-.112.058-.225c.105.013.21.032.319.032"}),c.createElement("path",{fill:"#000",d:"M63 55.5a2.5 2.5 0 0 1-2.5-2.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5a2.5 2.5 0 1 1-5 0c0-6.893 5.607-12.5 12.5-12.5S65.5 46.107 65.5 53a2.5 2.5 0 0 1-2.5 2.5"}),c.createElement("path",{fill:"#FFFF50",d:"M103 183h60c11.046 0 20-8.954 20-20V93h-60c-11.046 0-20 8.954-20 20z"}),c.createElement("path",{fill:"#000",d:"M168.02 124h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0-49.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 19.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2M183 61.611c-.012 0-.022-.006-.034-.005-3.09.105-4.552 3.196-5.842 5.923-1.346 2.85-2.387 4.703-4.093 4.647-1.889-.068-2.969-2.202-4.113-4.46-1.314-2.594-2.814-5.536-5.963-5.426-3.046.104-4.513 2.794-5.807 5.167-1.377 2.528-2.314 4.065-4.121 3.994-1.927-.07-2.951-1.805-4.136-3.813-1.321-2.236-2.848-4.75-5.936-4.664-2.994.103-4.465 2.385-5.763 4.4-1.373 2.13-2.335 3.428-4.165 3.351-1.973-.07-2.992-1.51-4.171-3.177-1.324-1.873-2.816-3.993-5.895-3.89-2.928.1-4.399 1.97-5.696 3.618-1.232 1.564-2.194 2.802-4.229 2.724a1 1 0 0 0-.072 2c3.017.101 4.545-1.8 5.872-3.487 1.177-1.496 2.193-2.787 4.193-2.855 1.926-.082 2.829 1.115 4.195 3.045 1.297 1.834 2.769 3.914 5.731 4.021 3.103.104 4.596-2.215 5.918-4.267 1.182-1.834 2.202-3.417 4.15-3.484 1.793-.067 2.769 1.35 4.145 3.681 1.297 2.197 2.766 4.686 5.787 4.796 3.125.108 4.634-2.62 5.949-5.035 1.139-2.088 2.214-4.06 4.119-4.126 1.793-.042 2.728 1.595 4.111 4.33 1.292 2.553 2.757 5.445 5.825 5.556l.169.003c3.064 0 4.518-3.075 5.805-5.794 1.139-2.41 2.217-4.68 4.067-4.773z"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 183h40v-40H83z"}),c.createElement("path",{fill:"#44D860",d:"M143 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 140.32 148a4.96 4.96 0 0 0-3.016 1.036 27 27 0 0 0-.335-.336 4.96 4.96 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 123h40v-20H83z"}),c.createElement("path",{fill:"#44D860",d:"M133 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032q-.028-.113-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a7 7 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A10 10 0 0 0 123 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494q.085-.083.168-.168c.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807q.03-.112.058-.225c.105.013.21.032.319.032"}),c.createElement("path",{fill:"#000",d:"M143 41.75c-.16 0-.33-.02-.49-.05a2.5 2.5 0 0 1-.47-.14c-.15-.06-.29-.14-.431-.23-.13-.09-.259-.2-.38-.31-.109-.12-.219-.24-.309-.38s-.17-.28-.231-.43a2.6 2.6 0 0 1-.189-.96c0-.16.02-.33.05-.49s.08-.31.139-.47c.061-.15.141-.29.231-.43.09-.13.2-.26.309-.38.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23s.31-.11.47-.14c.32-.07.65-.07.98 0 .159.03.32.08.47.14s.29.14.43.23c.13.09.259.2.38.31.11.12.22.25.31.38.09.14.17.28.23.43.06.16.11.31.14.47.029.16.05.33.05.49 0 .66-.271 1.31-.73 1.77-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.6 2.6 0 0 1-.96.19m20-1.25c-.66 0-1.3-.27-1.771-.73a4 4 0 0 1-.309-.38c-.09-.14-.17-.28-.231-.43a2.6 2.6 0 0 1-.189-.96c0-.66.27-1.3.729-1.77.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23s.31-.11.47-.14c.32-.07.66-.07.98 0 .159.03.32.08.47.14s.29.14.43.23c.13.09.259.2.38.31.459.47.73 1.11.73 1.77 0 .16-.021.33-.05.49s-.08.32-.14.47c-.07.15-.14.29-.23.43-.09.13-.2.26-.31.38-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.6 2.6 0 0 1-.96.19"}))))};var h=t(66448),m=t(97360);const p={id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},g="Assets",f={id:"guides/markdown-features/assets",title:"Assets",description:"Handling assets in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-assets.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/assets",permalink:"/docs/markdown-features/assets",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},sidebar:"docs",previous:{title:"Headings and Table of contents",permalink:"/docs/markdown-features/toc"},next:{title:"Markdown links",permalink:"/docs/markdown-features/links"}},b={},x=[{value:"Images",id:"images",level:2},{value:"Files",id:"files",level:2},{value:"Inline SVGs",id:"inline-svgs",level:2},{value:"Themed Images",id:"themed-images",level:2},{value:"GitHub-style themed images",id:"github-style-themed-images",level:3},{value:"Static assets",id:"static-assets",level:2}];function j(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"assets",children:"Assets"})}),"\n","\n",(0,a.jsx)(s.p,{children:"Sometimes you want to link to assets (e.g. docx files, images...) directly from Markdown files, and it is convenient to co-locate the asset next to the Markdown file using it."}),"\n",(0,a.jsx)(s.p,{children:"Let's imagine the following file structure:"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{children:"# Your doc\n/website/docs/myFeature.mdx\n\n# Some assets you want to use\n/website/docs/assets/docusaurus-asset-example-banner.png\n/website/docs/assets/docusaurus-asset-example.docx\n"})}),"\n",(0,a.jsx)(s.h2,{id:"images",children:"Images"}),"\n",(0,a.jsx)(s.p,{children:"You can display images in three different ways: Markdown syntax, CJS require, or ES imports syntax."}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(l.Z,{value:"Markdown syntax",children:[(0,a.jsx)(s.p,{children:"Display images using simple Markdown syntax:"}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Example banner](./assets/docusaurus-asset-example-banner.png)\n"})})]}),(0,a.jsxs)(l.Z,{value:"CommonJS require",children:[(0,a.jsxs)(s.p,{children:["Display images using inline CommonJS ",(0,a.jsx)(s.code,{children:"require"})," in JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"<img\n src={require('./assets/docusaurus-asset-example-banner.png').default}\n alt=\"Example banner\"\n/>\n"})})]}),(0,a.jsxs)(l.Z,{value:"Import statement",children:[(0,a.jsxs)(s.p,{children:["Display images using ES ",(0,a.jsx)(s.code,{children:"import"})," syntax and JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import myImageUrl from './assets/docusaurus-asset-example-banner.png';\n\n<img src={myImageUrl} alt=\"Example banner\" />;\n"})})]})]}),"\n",(0,a.jsx)(s.p,{children:"All of the above result in displaying the image:"}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"My image alternative text",src:t(17288).Z+"",width:"422",height:"110"})})}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If you are using ",(0,a.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-ideal-image",children:"@docusaurus/plugin-ideal-image"}),", you need to use the dedicated image component, as documented."]})}),"\n",(0,a.jsx)(s.h2,{id:"files",children:"Files"}),"\n",(0,a.jsxs)(s.p,{children:["In the same way, you can link to existing assets by ",(0,a.jsx)(s.code,{children:"require"}),"'ing them and using the returned URL in ",(0,a.jsx)(s.code,{children:"video"}),"s, ",(0,a.jsx)(s.code,{children:"a"})," anchor links, etc."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"# My Markdown page\n\n<a target=\"\\_blank\" href={require('./assets/docusaurus-asset-example.docx').default}> Download this docx </a>\n\nor\n\n[Download this docx using Markdown](./assets/docusaurus-asset-example.docx)\n"})}),"\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsx)("a",{target:"_blank",href:t(23266).Z,children:"Download this docx"}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(3072).Z+"",children:"Download this docx using Markdown"})})]}),"\n",(0,a.jsx)(s.admonition,{title:"Markdown links are always file paths",type:"info",children:(0,a.jsxs)(s.p,{children:["If you use the Markdown image or link syntax, all asset paths will be resolved as file paths by Docusaurus and automatically converted to ",(0,a.jsx)(s.code,{children:"require()"})," calls. You don't need to use ",(0,a.jsx)(s.code,{children:"require()"})," in Markdown unless you use the JSX syntax, which you do have to handle yourself."]})}),"\n",(0,a.jsx)(s.h2,{id:"inline-svgs",children:"Inline SVGs"}),"\n",(0,a.jsx)(s.p,{children:"Docusaurus supports inlining SVGs out of the box."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg />;\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{})}),"\n",(0,a.jsx)(s.p,{children:"This can be useful if you want to alter the part of the SVG image via CSS. For example, you can change one of the SVG colors based on the current theme."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg className=\"themedDocusaurus\" />;\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",children:"[data-theme='light'] .themedDocusaurus [fill='#FFFF50'] {\n fill: greenyellow;\n}\n\n[data-theme='dark'] .themedDocusaurus [fill='#FFFF50'] {\n fill: seagreen;\n}\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{className:"themedDocusaurus"})}),"\n",(0,a.jsx)(s.h2,{id:"themed-images",children:"Themed Images"}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus supports themed images: the ",(0,a.jsx)(s.code,{children:"ThemedImage"})," component (included in the themes) allows you to switch the image source based on the current theme."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import useBaseUrl from '@docusaurus/useBaseUrl';\nimport ThemedImage from '@theme/ThemedImage';\n\n<ThemedImage\n alt=\"Docusaurus themed image\"\n // highlight-start\n sources={{\n light: useBaseUrl('/img/docusaurus_light.svg'),\n dark: useBaseUrl('/img/docusaurus_dark.svg'),\n }}\n // highlight-end\n/>;\n"})}),"\n","\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(m.Z,{alt:"Docusaurus themed image",sources:{light:(0,h.ZP)("/img/docusaurus_keytar.svg"),dark:(0,h.ZP)("/img/docusaurus_speed.svg")}})}),"\n",(0,a.jsx)(s.h3,{id:"github-style-themed-images",children:"GitHub-style themed images"}),"\n",(0,a.jsxs)(s.p,{children:["GitHub uses its own ",(0,a.jsx)(s.a,{href:"https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/",children:"image theming approach"})," with path fragments, which you can easily implement yourself."]}),"\n",(0,a.jsxs)(s.p,{children:["To toggle the visibility of an image using the path fragment (for GitHub, it's ",(0,a.jsx)(s.code,{children:"#gh-dark-mode-only"})," and ",(0,a.jsx)(s.code,{children:"#gh-light-mode-only"}),"), add the following to your custom CSS (you can also use your own suffix if you don't want to be coupled to GitHub):"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",metastring:'title="src/css/custom.css"',children:"[data-theme='light'] img[src$='#gh-dark-mode-only'],\n[data-theme='dark'] img[src$='#gh-light-mode-only'] {\n display: none;\n}\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Docusaurus themed image](/img/docusaurus_keytar.svg#gh-light-mode-only)![Docusaurus themed image](/img/docusaurus_speed.svg#gh-dark-mode-only)\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(90056).Z+"#gh-light-mode-only",width:"200",height:"200"}),(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(3854).Z+"#gh-dark-mode-only",width:"250",height:"200"})]})}),"\n",(0,a.jsx)(s.h2,{id:"static-assets",children:"Static assets"}),"\n",(0,a.jsxs)(s.p,{children:["If a Markdown link or image has an absolute path, the path will be seen as a file path and will be resolved from the static directories. For example, if you have configured ",(0,a.jsx)(s.a,{href:"/docs/static-assets",children:"static directories"})," to be ",(0,a.jsx)(s.code,{children:"['public', 'static']"}),", then for the following image:"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",metastring:'title="my-doc.md"',children:"![An image from the static](/img/docusaurus.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus will try to look for it in both ",(0,a.jsx)(s.code,{children:"static/img/docusaurus.png"})," and ",(0,a.jsx)(s.code,{children:"public/img/docusaurus.png"}),". The link will then be converted to a ",(0,a.jsx)(s.code,{children:"require()"})," call instead of staying as a URL. This is desirable in two regards:"]}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsx)(s.li,{children:"You don't have to worry about the base URL, which Docusaurus will take care of when serving the asset;"}),"\n",(0,a.jsx)(s.li,{children:"The image enters Webpack's build pipeline and its name will be appended by a hash, which enables browsers to aggressively cache the image and improves your site's performance."}),"\n"]}),"\n",(0,a.jsxs)(s.p,{children:["If you intend to write URLs, you can use the ",(0,a.jsx)(s.code,{children:"pathname://"})," protocol to disable automatic asset linking."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![banner](pathname:///img/docusaurus-asset-example-banner.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["This link will be generated as ",(0,a.jsx)(s.code,{children:'<img src="/img/docusaurus-asset-example-banner.png" alt="banner" />'}),", without any processing or file existence checking."]})]})}function y(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(j,{...e})}):j(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a3883fa.06d308e9.js b/assets/js/4a3883fa.06d308e9.js new file mode 100644 index 000000000000..aa8d65fd27fd --- /dev/null +++ b/assets/js/4a3883fa.06d308e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88203],{56059:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=n(24246),i=n(71670);const a={unlisted:!0},d="Unlisted page",o={type:"mdx",permalink:"/tests/pages/unlisted",source:"@site/_dogfooding/_pages tests/unlisted.mdx",title:"Unlisted page",description:"This unlisted page should always be directly accessible, but hidden from search engines",frontMatter:{unlisted:!0},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx",unlisted:!0},r={},c=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"unlisted-page",children:"Unlisted page"})}),"\n",(0,s.jsx)(t.p,{children:"This unlisted page should always be directly accessible, but hidden from search engines"})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>d});var s=n(27378);const i={},a=s.createContext(i);function d(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a3883fa.417b548d.js b/assets/js/4a3883fa.417b548d.js deleted file mode 100644 index 15cd69d971bb..000000000000 --- a/assets/js/4a3883fa.417b548d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88203],{56059:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=n(24246),i=n(71670);const o={unlisted:!0},d="Unlisted page",a={type:"mdx",permalink:"/tests/pages/unlisted",source:"@site/_dogfooding/_pages tests/unlisted.mdx",title:"Unlisted page",description:"This unlisted page should always be directly accessible, but hidden from search engines",frontMatter:{unlisted:!0},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx",unlisted:!0},r={},c=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"unlisted-page",children:"Unlisted page"})}),"\n",(0,s.jsx)(t.p,{children:"This unlisted page should always be directly accessible, but hidden from search engines"})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>d});var s=n(27378);const i={},o=s.createContext(i);function d(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ab187ba.8f63174d.js b/assets/js/4ab187ba.8f63174d.js deleted file mode 100644 index 7ef4364485c0..000000000000 --- a/assets/js/4ab187ba.8f63174d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[465],{29175:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var o=n(24246),s=n(71670);const i={},c="Introduction",r={id:"tests/category-links/custom-index-convention/intro",title:"Introduction",description:"This file is called intro.md. Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one.",source:"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx",sourceDirName:"tests/category-links/custom-index-convention",slug:"/tests/category-links/custom-index-convention/intro",permalink:"/tests/docs/tests/category-links/custom-index-convention/intro",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category Links",permalink:"/tests/docs/category-links-generated-index-slug"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},d={},a=[];function l(e){const t={code:"code",h1:"h1",header:"header",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,o.jsxs)(t.p,{children:["This file is called ",(0,o.jsx)(t.code,{children:"intro.md"}),". Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>c});var o=n(27378);const s={},i=o.createContext(s);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ab187ba.df1715de.js b/assets/js/4ab187ba.df1715de.js new file mode 100644 index 000000000000..3c45c89448e9 --- /dev/null +++ b/assets/js/4ab187ba.df1715de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[465],{29175:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var o=n(24246),s=n(71670);const i={},c="Introduction",r={id:"tests/category-links/custom-index-convention/intro",title:"Introduction",description:"This file is called intro.md. Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one.",source:"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx",sourceDirName:"tests/category-links/custom-index-convention",slug:"/tests/category-links/custom-index-convention/intro",permalink:"/tests/docs/tests/category-links/custom-index-convention/intro",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category Links",permalink:"/tests/docs/category-links-generated-index-slug"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},a={},d=[];function l(e){const t={code:"code",h1:"h1",header:"header",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,o.jsxs)(t.p,{children:["This file is called ",(0,o.jsx)(t.code,{children:"intro.md"}),". Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>c});var o=n(27378);const s={},i=o.createContext(s);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c9d8eaa.04f4758a.js b/assets/js/4c9d8eaa.3b7863e6.js similarity index 68% rename from assets/js/4c9d8eaa.04f4758a.js rename to assets/js/4c9d8eaa.3b7863e6.js index 588c497b89b4..f983b7c70f4a 100644 --- a/assets/js/4c9d8eaa.04f4758a.js +++ b/assets/js/4c9d8eaa.3b7863e6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83692],{6535:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>w,contentTitle:()=>f,default:()=>v,frontMatter:()=>g,metadata:()=>j,toc:()=>y});var n=i(24246),r=i(71670),a=(i(27378),i(36712)),o=i(41428),s=i(52615);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}(Object(t)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))})),e}function h({to:e,children:t}){return(0,n.jsx)(o.Z,{to:e,children:null!=t?t:(0,n.jsx)(a.Z,{id:"team.profile.websiteLinkLabel",children:"website"})})}function d({className:e,name:t,children:i,githubUrl:r,twitterUrl:a}){return(0,n.jsx)("div",{className:e,children:(0,n.jsxs)("div",{className:"card card--full-height",children:[(0,n.jsx)("div",{className:"card__header",children:(0,n.jsxs)("div",{className:"avatar avatar--vertical",children:[(0,n.jsx)("img",{className:"avatar__photo avatar__photo--xl",src:`${r}.png`,alt:`${t}'s avatar`}),(0,n.jsx)("div",{className:"avatar__intro",children:(0,n.jsx)(s.Z,{as:"h3",className:"avatar__name",children:t})})]})}),(0,n.jsx)("div",{className:"card__body",children:i}),(0,n.jsx)("div",{className:"card__footer",children:(0,n.jsxs)("div",{className:"button-group button-group--block",children:[r&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:r,children:"GitHub"}),a&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:a,children:"Twitter"})]})})]})})}function u(e){return(0,n.jsx)(d,c(function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{},n=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),n.forEach((function(t){l(e,t,i[t])}))}return e}({},e),{className:"col col--6 margin-bottom--lg"}))}function m(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"S\xe9bastien Lorber",githubUrl:"https://github.com/slorber",twitterUrl:"https://twitter.com/sebastienlorber",children:(0,n.jsx)(a.Z,{id:"team.profile.Sebastien Lorber.body",values:{website:(0,n.jsx)(h,{to:"https://sebastienlorber.com/"}),devto:(0,n.jsx)(o.Z,{to:"https://dev.to/sebastienlorber",children:"Dev.to"})},children:"React lover since 2014. Freelance, helping Facebook ship Docusaurus v2. He writes regularly, on his {website} and {devto}."})}),(0,n.jsx)(u,{name:"Sida Chen",githubUrl:"https://github.com/Josh-Cena",twitterUrl:"https://twitter.com/SidaChen63",children:(0,n.jsx)(a.Z,{id:"team.profile.Sida Chen.body",children:"Student from Shanghai, China. Enthusiastic open-source project creator, but never actually works hard on those projects he created."})}),(0,n.jsx)(u,{name:"Cl\xe9ment Couriol",githubUrl:"https://github.com/ozakione",children:(0,n.jsx)(a.Z,{id:"team.profile.Clement Couriol.body",children:"Student from CPE Lyon, France. Passionate web developer who tries to become an expert web developer."})})]})}function p(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Joel Marcey",githubUrl:"https://github.com/JoelMarcey",twitterUrl:"https://twitter.com/joelmarcey",children:(0,n.jsx)(a.Z,{id:"team.profile.Joel Marcey.body",children:"Docusaurus founder and now ever grateful Docusaurus cheerleader to those who actually write code for it."})}),(0,n.jsx)(u,{name:"Alexey Pyltsyn",githubUrl:"https://github.com/lex111",children:(0,n.jsx)(a.Z,{id:"team.profile.Alexey Pyltsyn.body",children:"Obsessed open-source enthusiast \ud83d\udc4b Eternal amateur at everything \ud83e\udd37\u200d\u2642\ufe0f Maintainer of Russian docs on PHP, React, Kubernetes and much more \ud83e\uddd0"})}),(0,n.jsx)(u,{name:"Yangshun Tay",githubUrl:"https://github.com/yangshun",twitterUrl:"https://twitter.com/yangshunz",children:(0,n.jsx)(a.Z,{id:"team.profile.Yangshun Tay.body",children:"Full Front End Stack developer who likes working on the Jamstack. Working on Docusaurus made him Facebook's unofficial part-time Open Source webmaster, which is an awesome role to be in."})}),(0,n.jsx)(u,{name:"Endilie Yacop Sucipto",githubUrl:"https://github.com/endiliey",twitterUrl:"https://twitter.com/endiliey",children:(0,n.jsx)(a.Z,{id:"team.profile.Endilie Yacop Sucipto.body",children:"Maintainer @docusaurus \xb7 \ud83d\udd25\ud83d\udd25\ud83d\udd25"})}),(0,n.jsx)(u,{name:"Wei Gao",githubUrl:"https://github.com/wgao19",twitterUrl:"https://twitter.com/wgao19",children:(0,n.jsx)(a.Z,{id:"team.profile.Wei Gao.body",children:"\ud83c\udffb\u200d\ud83c\udf3e Work in progress React developer, maintains Docusaurus, writes docs and spams this world with many websites."})})]})}function b(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Anshul Goyal",githubUrl:"https://github.com/anshulrgoyal",twitterUrl:"https://twitter.com/ar_goyal",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://anshulgoyal.dev/",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})})},children:"Fullstack developer who loves to code and try new technologies. In his free time, he contributes to open source, writes blog posts on his {websiteLink} and watches Anime."})}),(0,n.jsx)(u,{name:"Drew Alexander",githubUrl:"https://github.com/drewbi",children:(0,n.jsx)(a.Z,{id:"team.profile.Drew Alexander.body",children:"Developer and Creative, trying to gain the skills to build whatever he can think of."})}),(0,n.jsx)(u,{name:"Fanny Vieira",githubUrl:"https://github.com/fanny",twitterUrl:"https://twitter.com/fannyvieiira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body",values:{blogLink:(0,n.jsx)(o.Z,{href:"https://dev.to/fannyvieira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.blogLink.label",children:"her blog"})}),spotifyLink:(0,n.jsx)(o.Z,{href:"https://open.spotify.com/user/anotherfanny",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.spotifyLink.label",children:"Spotify playlists"})})},children:"Fanny got started with web development in high school, building a project for the school kitchen. In her free time she loves contributing to Open Source, occasionally writing on {blogLink} about her experiences, cooking, and creating {spotifyLink}."})}),(0,n.jsx)(u,{name:"Sam Zhou",githubUrl:"https://github.com/SamChou19815",twitterUrl:"https://twitter.com/SamChou19815",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://developersam.com",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})}),samLangLink:(0,n.jsx)(o.Z,{href:"https://samlang.developersam.com/",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.samLangLink.label",children:"programming language"})}),miniReactLink:(0,n.jsx)(o.Z,{href:"https://github.com/SamChou19815/mini-react",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.miniReactLink.label",children:"mini React"})})},children:"Sam started programming in 2011 and built his {websiteLink} in 2015. He is interested in programming languages, dev infra and web development, and has built his own {samLangLink} and {miniReactLink}."})}),(0,n.jsx)(u,{name:"Tan Teik Jun",githubUrl:"https://github.com/teikjun",twitterUrl:"https://twitter.com/teik_jun",children:(0,n.jsx)(a.Z,{id:"team.profile.Tan Teik Jun.body",children:"Open-source enthusiast who aims to become as awesome as the other humans on this page. Working on Docusaurus brought him closer to his goal. \ud83c\udf31"})}),(0,n.jsx)(u,{name:"Nisarag Bhatt",githubUrl:"https://github.com/FocalChord",twitterUrl:"https://twitter.com/focalchord_",children:(0,n.jsx)(a.Z,{id:"team.profile.Nisarag Bhatt.body",children:"Fullstack web developer who loves learning new technologies and applying them! Loves contributing to open source as well as writing content articles and tutorials."})})]})}const g={},f="Team",j={id:"team",title:"Team",description:"Active Team",source:"@site/community/1-team.mdx",sourceDirName:".",slug:"/team",permalink:"/community/team",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:1,frontMatter:{},sidebar:"community",previous:{title:"Support",permalink:"/community/support"},next:{title:"Awesome Resources",permalink:"/community/resources"}},w={},y=[{value:"Active Team",id:"active-team",level:2},{value:"Honorary Alumni",id:"honorary-alumni",level:2},{value:"Student Fellows",id:"student-fellows",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2}];function x(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"team",children:"Team"})}),"\n","\n",(0,n.jsx)(t.h2,{id:"active-team",children:"Active Team"}),"\n",(0,n.jsx)(t.p,{children:"The Docusaurus team works on the core functionality, plugins for the classic theme, as well as the Docusaurus documentation website."}),"\n",(0,n.jsx)(t.p,{children:"Current members of the Docusaurus team are listed in alphabetical order below."}),"\n",(0,n.jsx)(m,{}),"\n",(0,n.jsx)(t.h2,{id:"honorary-alumni",children:"Honorary Alumni"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus would never be what it is today without the huge contributions from these folks who have moved on to bigger and greater things."}),"\n",(0,n.jsx)(p,{}),"\n",(0,n.jsx)(t.h2,{id:"student-fellows",children:"Student Fellows"}),"\n",(0,n.jsxs)(t.p,{children:["A handful of students have also worked on Docusaurus as part of their school term/internship and the ",(0,n.jsx)(t.a,{href:"https://fellowship.mlh.io/",children:"Major League Hacking Fellowship program"}),", contributing amazing features such as plugin options validation, migration tooling, and a Bootstrap theme."]}),"\n",(0,n.jsx)(b,{}),"\n",(0,n.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus was originally created by Joel Marcey. Today, Docusaurus has a few hundred open source contributors. We\u2019d like to recognize a few people who have made significant contributions to Docusaurus and its documentation in the past and have helped maintain them over the years:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/amyrlam",children:"Amy Lam"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/chenglou",children:"Cheng Lou"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/caabernathy",children:"Christine Abernathy"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/vjeux",children:"Christopher Chedeau"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/elviswolcott",children:"Elvis Wolcott"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/fiennyangeln",children:"Fienny Angelina"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/hramos",children:"H\xe9ctor Ramos"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rlamana",children:"Ram\xf3n Lamana"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rickyvetter",children:"Ricky Vetter"})}),"\n"]})]})}function v(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>s,a:()=>o});var n=i(27378);const r={},a=n.createContext(r);function o(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83692],{6535:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>w,contentTitle:()=>f,default:()=>v,frontMatter:()=>g,metadata:()=>j,toc:()=>y});var n=i(24246),r=i(71670),a=(i(27378),i(36712)),o=i(41428),s=i(52615);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}(Object(t)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))})),e}function h({to:e,children:t}){return(0,n.jsx)(o.Z,{to:e,children:null!=t?t:(0,n.jsx)(a.Z,{id:"team.profile.websiteLinkLabel",children:"website"})})}function d({className:e,name:t,children:i,githubUrl:r,twitterUrl:a}){return(0,n.jsx)("div",{className:e,children:(0,n.jsxs)("div",{className:"card card--full-height",children:[(0,n.jsx)("div",{className:"card__header",children:(0,n.jsxs)("div",{className:"avatar avatar--vertical",children:[(0,n.jsx)("img",{className:"avatar__photo avatar__photo--xl",src:`${r}.png`,alt:`${t}'s avatar`}),(0,n.jsx)("div",{className:"avatar__intro",children:(0,n.jsx)(s.Z,{as:"h3",className:"avatar__name",children:t})})]})}),(0,n.jsx)("div",{className:"card__body",children:i}),(0,n.jsx)("div",{className:"card__footer",children:(0,n.jsxs)("div",{className:"button-group button-group--block",children:[r&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:r,children:"GitHub"}),a&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:a,children:"Twitter"})]})})]})})}function u(e){return(0,n.jsx)(d,c(function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{},n=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),n.forEach((function(t){l(e,t,i[t])}))}return e}({},e),{className:"col col--6 margin-bottom--lg"}))}function m(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"S\xe9bastien Lorber",githubUrl:"https://github.com/slorber",twitterUrl:"https://twitter.com/sebastienlorber",children:(0,n.jsx)(a.Z,{id:"team.profile.Sebastien Lorber.body",values:{website:(0,n.jsx)(h,{to:"https://sebastienlorber.com/"}),devto:(0,n.jsx)(o.Z,{to:"https://dev.to/sebastienlorber",children:"Dev.to"})},children:"React lover since 2014. Freelance, helping Facebook ship Docusaurus v2. He writes regularly, on his {website} and {devto}."})}),(0,n.jsx)(u,{name:"Sida Chen",githubUrl:"https://github.com/Josh-Cena",twitterUrl:"https://twitter.com/SidaChen63",children:(0,n.jsx)(a.Z,{id:"team.profile.Sida Chen.body",children:"Student from Shanghai, China. Enthusiastic open-source project creator, but never actually works hard on those projects he created."})}),(0,n.jsx)(u,{name:"Cl\xe9ment Couriol",githubUrl:"https://github.com/ozakione",children:(0,n.jsx)(a.Z,{id:"team.profile.Clement Couriol.body",children:"Student from CPE Lyon, France. Passionate web developer who tries to become an expert web developer."})})]})}function p(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Joel Marcey",githubUrl:"https://github.com/JoelMarcey",twitterUrl:"https://twitter.com/joelmarcey",children:(0,n.jsx)(a.Z,{id:"team.profile.Joel Marcey.body",children:"Docusaurus founder and now ever grateful Docusaurus cheerleader to those who actually write code for it."})}),(0,n.jsx)(u,{name:"Alexey Pyltsyn",githubUrl:"https://github.com/lex111",children:(0,n.jsx)(a.Z,{id:"team.profile.Alexey Pyltsyn.body",children:"Obsessed open-source enthusiast \ud83d\udc4b Eternal amateur at everything \ud83e\udd37\u200d\u2642\ufe0f Maintainer of Russian docs on PHP, React, Kubernetes and much more \ud83e\uddd0"})}),(0,n.jsx)(u,{name:"Yangshun Tay",githubUrl:"https://github.com/yangshun",twitterUrl:"https://twitter.com/yangshunz",children:(0,n.jsx)(a.Z,{id:"team.profile.Yangshun Tay.body",children:"Full Front End Stack developer who likes working on the Jamstack. Working on Docusaurus made him Facebook's unofficial part-time Open Source webmaster, which is an awesome role to be in."})}),(0,n.jsx)(u,{name:"Endilie Yacop Sucipto",githubUrl:"https://github.com/endiliey",twitterUrl:"https://twitter.com/endiliey",children:(0,n.jsx)(a.Z,{id:"team.profile.Endilie Yacop Sucipto.body",children:"Maintainer @docusaurus \xb7 \ud83d\udd25\ud83d\udd25\ud83d\udd25"})}),(0,n.jsx)(u,{name:"Wei Gao",githubUrl:"https://github.com/wgao19",twitterUrl:"https://twitter.com/wgao19",children:(0,n.jsx)(a.Z,{id:"team.profile.Wei Gao.body",children:"\ud83c\udffb\u200d\ud83c\udf3e Work in progress React developer, maintains Docusaurus, writes docs and spams this world with many websites."})})]})}function b(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Anshul Goyal",githubUrl:"https://github.com/anshulrgoyal",twitterUrl:"https://twitter.com/ar_goyal",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://anshulgoyal.dev/",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})})},children:"Fullstack developer who loves to code and try new technologies. In his free time, he contributes to open source, writes blog posts on his {websiteLink} and watches Anime."})}),(0,n.jsx)(u,{name:"Drew Alexander",githubUrl:"https://github.com/drewbi",children:(0,n.jsx)(a.Z,{id:"team.profile.Drew Alexander.body",children:"Developer and Creative, trying to gain the skills to build whatever he can think of."})}),(0,n.jsx)(u,{name:"Fanny Vieira",githubUrl:"https://github.com/fanny",twitterUrl:"https://twitter.com/fannyvieiira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body",values:{blogLink:(0,n.jsx)(o.Z,{href:"https://dev.to/fannyvieira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.blogLink.label",children:"her blog"})}),spotifyLink:(0,n.jsx)(o.Z,{href:"https://open.spotify.com/user/anotherfanny",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.spotifyLink.label",children:"Spotify playlists"})})},children:"Fanny got started with web development in high school, building a project for the school kitchen. In her free time she loves contributing to Open Source, occasionally writing on {blogLink} about her experiences, cooking, and creating {spotifyLink}."})}),(0,n.jsx)(u,{name:"Sam Zhou",githubUrl:"https://github.com/SamChou19815",twitterUrl:"https://twitter.com/SamChou19815",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://developersam.com",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})}),samLangLink:(0,n.jsx)(o.Z,{href:"https://samlang.developersam.com/",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.samLangLink.label",children:"programming language"})}),miniReactLink:(0,n.jsx)(o.Z,{href:"https://github.com/SamChou19815/mini-react",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.miniReactLink.label",children:"mini React"})})},children:"Sam started programming in 2011 and built his {websiteLink} in 2015. He is interested in programming languages, dev infra and web development, and has built his own {samLangLink} and {miniReactLink}."})}),(0,n.jsx)(u,{name:"Tan Teik Jun",githubUrl:"https://github.com/teikjun",twitterUrl:"https://twitter.com/teik_jun",children:(0,n.jsx)(a.Z,{id:"team.profile.Tan Teik Jun.body",children:"Open-source enthusiast who aims to become as awesome as the other humans on this page. Working on Docusaurus brought him closer to his goal. \ud83c\udf31"})}),(0,n.jsx)(u,{name:"Nisarag Bhatt",githubUrl:"https://github.com/FocalChord",twitterUrl:"https://twitter.com/focalchord_",children:(0,n.jsx)(a.Z,{id:"team.profile.Nisarag Bhatt.body",children:"Fullstack web developer who loves learning new technologies and applying them! Loves contributing to open source as well as writing content articles and tutorials."})})]})}const g={},f="Team",j={id:"team",title:"Team",description:"Active Team",source:"@site/community/1-team.mdx",sourceDirName:".",slug:"/team",permalink:"/community/team",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:1,frontMatter:{},sidebar:"community",previous:{title:"Support",permalink:"/community/support"},next:{title:"Awesome Resources",permalink:"/community/resources"}},w={},y=[{value:"Active Team",id:"active-team",level:2},{value:"Honorary Alumni",id:"honorary-alumni",level:2},{value:"Student Fellows",id:"student-fellows",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2}];function x(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"team",children:"Team"})}),"\n","\n",(0,n.jsx)(t.h2,{id:"active-team",children:"Active Team"}),"\n",(0,n.jsx)(t.p,{children:"The Docusaurus team works on the core functionality, plugins for the classic theme, as well as the Docusaurus documentation website."}),"\n",(0,n.jsx)(t.p,{children:"Current members of the Docusaurus team are listed in alphabetical order below."}),"\n",(0,n.jsx)(m,{}),"\n",(0,n.jsx)(t.h2,{id:"honorary-alumni",children:"Honorary Alumni"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus would never be what it is today without the huge contributions from these folks who have moved on to bigger and greater things."}),"\n",(0,n.jsx)(p,{}),"\n",(0,n.jsx)(t.h2,{id:"student-fellows",children:"Student Fellows"}),"\n",(0,n.jsxs)(t.p,{children:["A handful of students have also worked on Docusaurus as part of their school term/internship and the ",(0,n.jsx)(t.a,{href:"https://fellowship.mlh.io/",children:"Major League Hacking Fellowship program"}),", contributing amazing features such as plugin options validation, migration tooling, and a Bootstrap theme."]}),"\n",(0,n.jsx)(b,{}),"\n",(0,n.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus was originally created by Joel Marcey. Today, Docusaurus has a few hundred open source contributors. We\u2019d like to recognize a few people who have made significant contributions to Docusaurus and its documentation in the past and have helped maintain them over the years:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/amyrlam",children:"Amy Lam"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/chenglou",children:"Cheng Lou"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/caabernathy",children:"Christine Abernathy"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/vjeux",children:"Christopher Chedeau"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/elviswolcott",children:"Elvis Wolcott"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/fiennyangeln",children:"Fienny Angelina"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/hramos",children:"H\xe9ctor Ramos"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rlamana",children:"Ram\xf3n Lamana"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rickyvetter",children:"Ricky Vetter"})}),"\n"]})]})}function v(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>s,a:()=>o});var n=i(27378);const r={},a=n.createContext(r);function o(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/50a3e386.4565f084.js b/assets/js/50a3e386.4565f084.js new file mode 100644 index 000000000000..a2cc49e930a5 --- /dev/null +++ b/assets/js/50a3e386.4565f084.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24734],{55079:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:5,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-5-5",title:"toc-5-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx",sourceDirName:"toc",slug:"/toc/toc-5-5",permalink:"/tests/docs/toc/toc-5-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:5,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"},next:{title:"toc-_-5",permalink:"/tests/docs/toc/toc-_-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function a(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}a.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-5-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/50a3e386.ec7ec23e.js b/assets/js/50a3e386.ec7ec23e.js deleted file mode 100644 index e74f5f8147db..000000000000 --- a/assets/js/50a3e386.ec7ec23e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24734],{55079:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:5,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-5-5",title:"toc-5-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx",sourceDirName:"toc",slug:"/toc/toc-5-5",permalink:"/tests/docs/toc/toc-5-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:5,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"},next:{title:"toc-_-5",permalink:"/tests/docs/toc/toc-_-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-5-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/514f0e36.58b7e8ff.js b/assets/js/514f0e36.58b7e8ff.js new file mode 100644 index 000000000000..a861cb5c7e17 --- /dev/null +++ b/assets/js/514f0e36.58b7e8ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11454],{96145:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>d,toc:()=>i});var n=t(24246),o=t(71670);const r={title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},s="Markdown page",d={type:"mdx",permalink:"/examples/markdownPageExample",source:"@site/src/pages/examples/markdownPageExample.mdx",title:"Markdown Page example",description:"Markdown Page example",frontMatter:{title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx",unlisted:!1},p={},i=[];function c(e){const a={admonition:"admonition",h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"markdown-page",children:"Markdown page"})}),"\n",(0,n.jsx)(a.p,{children:"This is a page generated from markdown to illustrate the Markdown page feature."}),"\n",(0,n.jsx)(a.admonition,{type:"tip",children:(0,n.jsx)(a.p,{children:"Use Markdown pages when you just want to focus on content and the default layout is good enough"})})]})}function m(e={}){const{wrapper:a}={...(0,o.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,a,t)=>{t.d(a,{Z:()=>d,a:()=>s});var n=t(27378);const o={},r=n.createContext(o);function s(e){const a=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function d(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/514f0e36.f693a915.js b/assets/js/514f0e36.f693a915.js deleted file mode 100644 index 755946f46a27..000000000000 --- a/assets/js/514f0e36.f693a915.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11454],{96145:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>d,toc:()=>i});var n=t(24246),o=t(71670);const r={title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},s="Markdown page",d={type:"mdx",permalink:"/examples/markdownPageExample",source:"@site/src/pages/examples/markdownPageExample.mdx",title:"Markdown Page example",description:"Markdown Page example",frontMatter:{title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx",unlisted:!1},p={},i=[];function c(e){const a={admonition:"admonition",h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"markdown-page",children:"Markdown page"})}),"\n",(0,n.jsx)(a.p,{children:"This is a page generated from markdown to illustrate the Markdown page feature."}),"\n",(0,n.jsx)(a.admonition,{type:"tip",children:(0,n.jsx)(a.p,{children:"Use Markdown pages when you just want to focus on content and the default layout is good enough"})})]})}function l(e={}){const{wrapper:a}={...(0,o.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,a,t)=>{t.d(a,{Z:()=>d,a:()=>s});var n=t(27378);const o={},r=n.createContext(o);function s(e){const a=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function d(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/519746e1.01902e9c.js b/assets/js/519746e1.01902e9c.js new file mode 100644 index 000000000000..271d1a013e87 --- /dev/null +++ b/assets/js/519746e1.01902e9c.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98986],{46514:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},46768:(e,s,t)=>{"use strict";t.d(s,{Z:()=>h});var i=t(24246),a=(t(27378),t(66222)),n=t(36712);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c(e,s){if(null==e)return{};var t,i,a=function(e,s){if(null==e)return{};var t,i,a={},n=Object.keys(e);for(i=0;i<n.length;i++)t=n[i],s.indexOf(t)>=0||(a[t]=e[t]);return a}(e,s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)t=n[i],s.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}function d(e,s){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,n.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=s,{size:t}=e,i=t?` (${function(e){const s=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const t=Math.floor(Math.log(e)/Math.log(1024));return 0===t?`${e} ${s[t]}`:`${(e/1024**t).toFixed(1)} ${s[t]}`}(t)})`:"";return(0,n.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:i})}case"offline":return(0,n.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=s;return 404===e?(0,n.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,n.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function h(e){const{img:s}=e,t=c(e,["img"]);return"string"==typeof s||"default"in s?(0,i.jsx)("img",o({src:"string"==typeof s?s:s.default},t)):(0,i.jsx)(a.Z,l(o({},t),{height:null!==(n=s.src.height)&&void 0!==n?n:100,width:null!==(r=s.src.width)&&void 0!==r?r:100,placeholder:{lqip:s.preSrc},src:s.src.src,srcSet:s.src.images.map((e=>l(o({},e),{src:e.path}))),getMessage:d}));var n,r}},96076:(e,s,t)=>{"use strict";t.d(s,{Gl:()=>d,qg:()=>h,cQ:()=>u});var i=t(24246),a=(t(27378),t(14088)),n=t(41428),r=t(46768);const o={carousel:"carousel_raHC",navButton:"navButton_qSul",dotGroup:"dotGroup_n_95",siteSlide:"siteSlide_AwQk",siteLink:"siteLink_IglZ"};function l({index:e,site:s}){return(0,i.jsxs)(a.Mi,{index:e,className:o.siteSlide,children:[(0,i.jsx)(r.Z,{img:s.image,alt:s.name,loading:0===e?"eager":"lazy"}),(0,i.jsxs)(n.Z,{to:s.url,className:o.siteLink,target:"_blank",children:["\ud83d\udd17 ",s.name]})]})}function c({sites:e,aspectRatio:s}){return(0,i.jsxs)(a.sj,{naturalSlideWidth:1,naturalSlideHeight:1/s,totalSlides:e.length,infinite:!0,className:o.carousel,children:[(0,i.jsx)(a.iR,{children:e.map(((e,s)=>(0,i.jsx)(l,{index:s,site:e},s)))}),(0,i.jsx)(a.P1,{className:o.navButton,style:{right:-20},children:">"}),(0,i.jsx)(a.jp,{className:o.navButton,style:{left:-20},children:"<"}),(0,i.jsx)(a.I5,{className:o.dotGroup})]})}function d(){return(0,i.jsx)(c,{aspectRatio:1072/584,sites:[{name:"Prettier",image:t(49911),url:"https://prettier.io/"},{name:"Babel",image:t(759),url:"https://babeljs.io/"},{name:"React-Native",image:t(45058),url:"https://archive.reactnative.dev/"},{name:"Katex",image:t(91551),url:"https://katex.org/docs/"},{name:"Docusaurus",image:t(92037),url:"https://v1.docusaurus.io/"}]})}function h(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Tauri",image:t(11384),url:"https://tauri.app/"},{name:"Figma",image:t(58155),url:"https://www.figma.com/plugin-docs/"},{name:"Snapchat",image:t(11937),url:"https://docs.snap.com/"},{name:"Iota",image:t(44827),url:"https://wiki.iota.org/"},{name:"SAP Cloud",image:t(42444),url:"https://sap.github.io/cloud-sdk/"},{name:"Supabase",image:t(45785),url:"https://supabase.com/docs"},{name:"StackBlitz",image:t(33339),url:"https://developer.stackblitz.com/"},{name:"Lacework",image:t(11342),url:"https://docs.lacework.com/"},{name:"React-Navigation",image:t(70054),url:"https://reactnavigation.org/"},{name:"Solana",image:t(44102),url:"https://docs.solana.com/"},{name:"Gulp",image:t(9258),url:"https://gulpjs.com/"}]})}function u(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Ionic",image:t(31256),url:"https://ionicframework.com/docs/"},{name:"Outerbounds",image:t(10712),url:"https://outerbounds.com/docs/"},{name:"Courier",image:t(97814),url:"https://www.courier.com/docs/"},{name:"Quickwit",image:t(13296),url:"https://quickwit.io/docs/"},{name:"Dyte",image:t(42431),url:"https://docs.dyte.io/"},{name:"React-Native",image:t(48426),url:"https://reactnative.dev/"},{name:"Hasura",image:t(97314),url:"https://hasura.io/docs/"},{name:"Datagit",image:t(29743),url:"https://www.datagit.ir/"}]})}},6698:(e,s,t)=>{"use strict";t.d(s,{Z:()=>c});var i=t(24246),a=(t(27378),t(40624));const n={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:r,bodyStyle:c}){return(0,i.jsxs)("div",{className:n.browserWindow,style:l(o({},r),{minHeight:s}),children:[(0,i.jsxs)("div",{className:n.browserWindowHeader,children:[(0,i.jsxs)("div",{className:n.buttons,children:[(0,i.jsx)("span",{className:n.dot,style:{background:"#f25f58"}}),(0,i.jsx)("span",{className:n.dot,style:{background:"#fbbe3c"}}),(0,i.jsx)("span",{className:n.dot,style:{background:"#58cb42"}})]}),(0,i.jsx)("div",{className:(0,a.Z)(n.browserWindowAddressBar,"text--truncate"),children:t}),(0,i.jsx)("div",{className:n.browserWindowMenuIcon,children:(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{className:n.bar}),(0,i.jsx)("span",{className:n.bar}),(0,i.jsx)("span",{className:n.bar})]})})]}),(0,i.jsx)("div",{className:n.browserWindowBody,style:c,children:e})]})}},80566:(e,s,t)=>{"use strict";t.d(s,{Z:()=>n});var i=t(24246),a=(t(27378),t(41428));function n({size:e=54}){return(0,i.jsx)(a.Z,{to:"https://news.ycombinator.com/item?id=32303052",style:{display:"block",width:e,height:e},children:(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:e,height:e,children:[(0,i.jsx)("path",{fill:"#FF6D00",d:"M42 42H6V6h36v36z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M8 8v32h32V8H8zm30 30H10V10h28v28z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M23 32h2v-6l5.5-10h-2.1L24 24.1 19.6 16h-2.1L23 26z"})]})})}},58562:(e,s,t)=>{"use strict";t.d(s,{Z:()=>l});var i=t(24246),a=(t(27378),t(40624)),n=t(41428);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l({className:e,style:s}){return(0,i.jsx)(n.Z,{to:"https://www.producthunt.com/posts/docusaurus-2-0?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-docusaurus-2-0",className:(0,a.Z)("producthunt-badge-widget",e),style:o({display:"block",width:250,height:54},s),children:(0,i.jsx)("img",{className:"producthunt-badge-widget",src:"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=353916&theme=light",alt:"Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt",style:{width:250,height:54,maxWidth:"initial"},width:250,height:54})})}},53025:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png"},63692:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png"},22355:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png"},99486:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png"},97531:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg"},76186:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},6255:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/star-history-72ae014f60d05445753e9f690e41d347.png"},17424:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},51374:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},65228:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},71943:(e,s,t)=>{"use strict";t.r(s),t.d(s,{assets:()=>g,contentTitle:()=>u,default:()=>w,frontMatter:()=>h,metadata:()=>p,toc:()=>A});var i=t(24246),a=t(71670),n=t(28475),r=t(6698),o=t(58562),l=t(80566),c=t(64257),d=(t(66448),t(97360),t(96076));const h={title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},u=void 0,p={permalink:"/blog/2022/08/01/announcing-docusaurus-2.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",source:"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",title:"Announcing Docusaurus 2.0",description:"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f",date:"2022-08-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:12.075,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"},{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Alexey Pyltsyn",title:"Open-source enthusiast",url:"https://github.com/lex111",email:"lex@php.net",page:{permalink:"/blog/authors/lex-111"},imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Paul O\u2019Shannessy",title:"Engineering Manager at Meta",url:"https://x.com/zpao",page:{permalink:"/blog/authors/zpao"},socials:{x:"https://x.com/zpao",github:"https://github.com/zpao"},imageURL:"https://github.com/zpao.png",key:"zpao"},{name:"Joel Marcey",title:"Co-creator of Docusaurus 1",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"},nextItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"}},g={image:t(46514).Z,authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},A=[{value:"What is Docusaurus exactly?",id:"what-is-docusaurus-exactly",level:2},{value:"The story behind Docusaurus",id:"the-story-behind-docusaurus",level:2},{value:"Toward Docusaurus 2.0",id:"toward-docusaurus-20",level:2},{value:"Who uses Docusaurus 2.0?",id:"who-uses-docusaurus-20",level:2},{value:"What's New in 2.0?",id:"whats-new-in-20",level:2},{value:"MDX",id:"mdx",level:3},{value:"File system conventions",id:"file-system-conventions",level:3},{value:"Plugins",id:"plugins",level:3},{value:"Theming",id:"theming",level:3},{value:"Other features",id:"other-features",level:3},{value:"Why 2.0 now?",id:"why-20-now",level:2},{value:"What's Next?",id:"whats-next",level:2},{value:"Thank You",id:"thank-you",level:2}];function m(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components},{TweetQuote:h}=s;return h||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("TweetQuote",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(s.p,{children:["Today we are extremely happy to finally ",(0,i.jsx)(s.strong,{children:"announce Docusaurus 2.0"}),"! \ud83e\udd73\ufe0f"]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:(0,i.jsx)(s.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,i.jsx)(s.strong,{children:"best documentation websites"})," with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),", letting you ",(0,i.jsx)(s.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,i.jsxs)(s.p,{children:["After ",(0,i.jsxs)(s.strong,{children:["4 years of work, ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75",children:"75 alphas"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22",children:"22 betas"})]}),", the next generation of Docusaurus is ",(0,i.jsx)(s.strong,{children:"ready for prime time"}),". From now on, we now plan to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]})," and will release ",(0,i.jsx)(s.strong,{children:"major versions more frequently"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"social-card image",src:t(76186).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Now"})," is the best time to show your love for Docusaurus!"]}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["In a hurry? Check ",(0,i.jsx)(s.a,{href:"#whats-new-in-20",children:"what's new in Docusaurus 2.0"}),"!"]})}),"\n",(0,i.jsx)(s.h2,{id:"what-is-docusaurus-exactly",children:"What is Docusaurus exactly?"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is a ",(0,i.jsx)(s.strong,{children:"static site generator"})," that helps you ship ",(0,i.jsx)(s.strong,{children:"beautiful documentation websites"})," in ",(0,i.jsx)(s.strong,{children:"no time"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Focus on your content: just write ",(0,i.jsx)(s.strong,{children:"Markdown files"}),". Docusaurus will generate an optimized ",(0,i.jsx)(s.strong,{children:"website"})," for you that's easy to ",(0,i.jsx)(s.strong,{children:"host anywhere"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is ",(0,i.jsx)(s.strong,{children:"full-featured"})," and very ",(0,i.jsx)(s.strong,{children:"flexible"}),": we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to ",(0,i.jsx)(s.strong,{children:"adapt the UI to match your branding"})," so that it integrates nicely with your main website or documentation portal. Its usage of ",(0,i.jsx)(s.strong,{children:"React"})," enables a ",(0,i.jsx)(s.strong,{children:"modern client-side navigation"}),", and the ability to build an ",(0,i.jsx)(s.strong,{children:"interactive documentation"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Introducing Slash",src:t(51374).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The Docusaurus philosophy is akin to the ",(0,i.jsx)(s.strong,{children:"Pareto principle"}),": you can get ",(0,i.jsx)(s.strong,{children:"80% of the results"})," for ",(0,i.jsx)(s.strong,{children:"20% of the effort"}),". This enables you to compete with top-notch documentation sites with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),"."]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/rachelnabors/status/1452697991039660038",handle:"rachelnabors",name:"Rachel Nabors",job:"Former ReactJS & React-Native docs manager",children:(0,i.jsx)(s.p,{children:"Unless you're spinning up a documentation team with engineering resources, you\nprobably want Docusaurus!"})}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus aims to be the ",(0,i.jsx)(s.strong,{children:"best documentation tool"}),", but you can use it for ",(0,i.jsx)(s.strong,{children:"other use-cases"})," as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/johnny_reilly/status/1551861926334025728",handle:"johnny_reilly",name:"Johnny Reilly",job:"Group Principal Engineer at Investec",children:(0,i.jsx)(s.p,{children:"Using Docusaurus for my tech blog has been a fantastic choice. It looks\ntremendous out-of-the-box and the awesome DX means I write way more"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Try Docusaurus now with our ",(0,i.jsx)(s.a,{href:"/docs/playground",children:"online playgrounds"})," and ",(0,i.jsx)(s.a,{href:"https://tutorial.docusaurus.io/",children:"5 minutes tutorial"})," \u23f1\ufe0f"]})}),"\n",(0,i.jsx)(s.h2,{id:"the-story-behind-docusaurus",children:"The story behind Docusaurus"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus was created at ",(0,i.jsx)(s.strong,{children:"Facebook Open Source"})," in ",(0,i.jsx)(s.strong,{children:"2017"})," (now ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),"). We had a lot of internal and open source projects to document. It's ",(0,i.jsx)(s.strong,{children:"complicated enough to write good documentation"}),", let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to ",(0,i.jsx)(s.strong,{children:"focus on the content"}),", and ",(0,i.jsx)(s.strong,{children:"Markdown"})," is great for that."]}),"\n",(0,i.jsxs)(s.p,{children:["At that time, our solution was to ",(0,i.jsx)(s.strong,{children:"copy/paste a Jekyll template"})," over and over again. This naturally became ",(0,i.jsx)(s.strong,{children:"hard to maintain"}),", so we created a tool to ",(0,i.jsx)(s.strong,{children:"solve our own pain"})," once for all."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.a,{href:"/blog/2017/12/14/introducing-docusaurus",children:"Docusaurus v1 was born"}),"!"]})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Birth of Slash",src:t(17424).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as ",(0,i.jsx)(s.a,{href:"https://prettier.io/",children:"Prettier"}),", ",(0,i.jsx)(s.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,i.jsx)(s.a,{href:"https://archive.reactnative.dev/",children:"React-Native"}),", ",(0,i.jsx)(s.a,{href:"https://katex.org/docs/",children:"KaTeX"}),", and of course ",(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:"Docusaurus v1"})," itself."]}),"\n",(0,i.jsx)(d.Gl,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsx)(s.p,{children:"Notice that the sample sites above use different colors, but still look quite the same."})}),"\n",(0,i.jsx)(s.h2,{id:"toward-docusaurus-20",children:"Toward Docusaurus 2.0"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v1"})})," has been very successful, but we started to ",(0,i.jsx)(s.strong,{children:"question some architectural choices"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React was only used as a ",(0,i.jsx)(s.strong,{children:"server-side templating language"}),", and not used on the client"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming system was pretty limited"}),", and apart from changing a few colors with CSS, it was difficult to do more advanced customizations"]}),"\n",(0,i.jsxs)(s.li,{children:["The ",(0,i.jsx)(s.strong,{children:"docs versioning system was confusing"}),", since it was based on a diff algorithm"]}),"\n",(0,i.jsxs)(s.li,{children:["The codebase was ",(0,i.jsx)(s.strong,{children:"monolithic"}),", neither well-tested nor easy to extend"]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v2"})})," was ",(0,i.jsx)(s.strong,{children:"rebuilt"})," from the ground up with a new ",(0,i.jsx)(s.strong,{children:"modular architecture"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React is now also used on the client, enabling a ",(0,i.jsx)(s.strong,{children:"modern Single Page Application navigation"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Plugins"})," empower the community to contribute useful features as third-party packages"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming"})," is more ",(0,i.jsx)(s.strong,{children:"flexible"})," than ever"]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning is now based on snapshot copies, much easier to understand"}),"\n",(0,i.jsxs)(s.li,{children:["We kept ",(0,i.jsx)(s.strong,{children:"everything good from v1"}),": docs, blog, pages, versioning, i18n..."]}),"\n",(0,i.jsxs)(s.li,{children:["We implemented ",(0,i.jsx)(s.strong,{children:"several new features"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["More details in the ",(0,i.jsx)(s.a,{href:"/blog/2018/09/11/Towards-Docusaurus-2",children:"Docusaurus 2 project announcement"})," and ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/migration",children:"v1 to v2 migration guide"})]}),"\n",(0,i.jsx)(s.h2,{id:"who-uses-docusaurus-20",children:"Who uses Docusaurus 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["Despite being in pre-release, it didn't take long for ",(0,i.jsx)(s.strong,{children:"Docusaurus v2 to outgrow Docusaurus v1"})," in terms of NPM downloads:"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,i.jsx)(s.img,{alt:"NPM downloads: v2 outgrows v1",src:t(53025).Z+"",width:"1200",height:"645"})})}),"\n",(0,i.jsx)(s.p,{children:"Our GitHub star trend is very positive, competing with major frameworks:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline",children:(0,i.jsx)(s.img,{alt:"GitHub stars: Docusaurus is well-positioned",src:t(6255).Z+"",width:"1200",height:"759"})})}),"\n",(0,i.jsx)(s.p,{children:"Today, Docusaurus v2 has already been a great success even before its launch:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["We received so many ",(0,i.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"lovely testimonials"})]}),"\n",(0,i.jsxs)(s.li,{children:["Companies like ",(0,i.jsx)(s.a,{href:"https://blog.1password.com/docusaurus-documentation-framework/",children:"1Password"})," and ",(0,i.jsx)(s.a,{href:"https://www.courier.com/blog/how-we-built-our-documentation/",children:"Courier"})," are writing down their positive experience"]}),"\n",(0,i.jsxs)(s.li,{children:["Our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})," references hundreds of sites, and this is only the tip of the iceberg."]}),"\n"]}),"\n",(0,i.jsx)(d.qg,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Please add your site to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"}),"! It only takes a few seconds: just ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/7826",children:"post a comment here"}),"."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/maxlynch/status/1549415692704825346",handle:"maxlynch",name:"Max Lynch",job:"Ionic co-founder and CEO",children:(0,i.jsx)(s.p,{children:"We use Docusaurus everywhere now and love it"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/supabase/status/1328960757149671425",handle:"supabase",name:"Supabase",job:"Open Source Firebase alternative",children:(0,i.jsx)(s.p,{children:"We've been using V2 since January and it has been great"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/gabrielcsapo/status/1415061312917233665",handle:"gabrielcsapo",name:"Gabriel Csapo",job:"Staff Software Engineer at LinkedIn",children:(0,i.jsx)(s.p,{children:"Docusaurus is next level easy for literally everything you would need for\ndocumentation in your project."})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/ItWasMattGregg/status/1526682295075102721",handle:"ItWasMattGregg",name:"Matt Gregg",job:"Senior Front End Developer at Shopify",children:(0,i.jsx)(s.p,{children:"Docusaurus is awesome. We use it"})}),"\n",(0,i.jsx)(s.h2,{id:"whats-new-in-20",children:"What's New in 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the ",(0,i.jsx)(s.strong,{children:"most impactful"}),"."]}),"\n",(0,i.jsx)(s.h3,{id:"mdx",children:"MDX"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://github.com/mdx-js/mdx",children:"MDX"})," allows you to ",(0,i.jsx)(s.strong,{children:"interleave React components"})," in Markdown. This enables you to build top-notch ",(0,i.jsx)(s.strong,{children:"interactive documentation experiences"})," very easily."]}),"\n",(0,i.jsx)(s.p,{children:"A demo is worth a thousand words:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-md",metastring:'title="docs/my-document.mdx"',children:"### Give it a try: press that button!\n\nimport ColorModeToggle from '@theme/ColorModeToggle';\n\n<ColorModeToggle/>\n"})}),"\n",(0,i.jsxs)(r.Z,{children:[(0,i.jsx)("h3",{children:"Give it a try: press that button!"}),(0,i.jsx)(c.Z,{})]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["MDX has its own ",(0,i.jsx)(s.a,{href:"https://mdxjs.com/docs/extending-mdx/",children:"plugin system"}),". You to customize your Markdown authoring experience, and even create your own Markdown syntax."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/HamelHusain/status/1551962275250053123",handle:"HamelHusain",name:"Hamel Husain",job:"Head Of Data Science at Outerbounds",children:(0,i.jsx)(s.p,{children:"Docusaurus + MDX is great: we were able to implement a beautiful two-pane\nlayout and give the author fine-grained control on the placement of code and\ncorresponding prose."})}),"\n",(0,i.jsx)(s.h3,{id:"file-system-conventions",children:"File system conventions"}),"\n",(0,i.jsxs)(s.p,{children:["Our goal is to make Docusaurus very ",(0,i.jsx)(s.strong,{children:"intuitive"})," to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file."]}),"\n",(0,i.jsx)(n.Z,{id:"T3S8GyFIXjo",params:"autoplay=1&autohide=1&showinfo=0&rel=0",title:"Explain Like I'm 5: Docusaurus",poster:"maxresdefault",webp:!0}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/paularmstrong/status/1552005085168865281",handle:"paularmstrong",name:"Paul Armstrong",job:"Principal Engineer at Microsoft",children:(0,i.jsx)(s.p,{children:"Using the auto-generated sidebars makes it so simple to just create a page and\nnot worry about any other configuration."})}),"\n",(0,i.jsx)(s.h3,{id:"plugins",children:"Plugins"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus now has a ",(0,i.jsx)(s.strong,{children:"modular architecture"})," with a plugin system \u2014 our ",(0,i.jsx)(s.strong,{children:"core features"})," like docs, blog, pages, and search are all powered by individual plugins."]}),"\n",(0,i.jsxs)(s.p,{children:["More importantly, it enables our community to ",(0,i.jsx)(s.strong,{children:"enhance Docusaurus"})," with additional features."]}),"\n",(0,i.jsx)(s.p,{children:"Let's highlight some examples:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"}),": seamless integration with ",(0,i.jsx)(s.a,{href:"https://www.openapis.org/",children:"OpenAPI"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/Redocly/redoc",children:"Redoc"})]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"redocusaurus plugin example",src:t(63692).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash",children:"docusaurus-preset-shiki-twoslash"}),": use ",(0,i.jsx)(s.a,{href:"https://github.com/shikijs/shiki",children:"Shiki"})," code block syntax highlighting with ",(0,i.jsx)(s.a,{href:"https://shikijs.github.io/twoslash/",children:"TwoSlash"})," TypeScript compiler hints"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"shiki-twoslash plugin example",src:t(99486).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/orta",handle:"orta",name:"Orta Therox",job:"Former TypeScript core team at Microsoft",children:(0,i.jsx)(s.p,{children:"The plugin API was a breeze to use, and powerful enough that I could port the\ncode sample renderer from the TypeScript website site in a couple of hours."})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"docusaurus-search-local"}),": one of the various local search alternatives to the built-in Algolia plugin"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"local search plugin example",src:t(22355).Z+"",width:"1200",height:"627"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["We have a curated list of outstanding plugins in our ",(0,i.jsx)(s.a,{href:"/community/resources",children:"community resources"})," page."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/jodyheavener/status/1551974535452311552",handle:"jodyheavener",name:"Jody Heavener",job:"Senior Developer at 1Password",children:(0,i.jsx)(s.p,{children:"The plugin system in Docusaurus v2 has made expanding 1Password's developer\nportal so easy and fun. Super excited to show you what we've got cooking up."})}),"\n",(0,i.jsx)(s.h3,{id:"theming",children:"Theming"}),"\n",(0,i.jsxs)(s.p,{children:["Theming is one of the most important features of Docusaurus: we believe a professional documentation site should ",(0,i.jsx)(s.strong,{children:"respect your company's branding"})," and create a consistent experience."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus theming gives a lot of ",(0,i.jsx)(s.strong,{children:"flexibility"})," on multiple levels:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Customize CSS variables to adjust colors, fonts, and more"}),"\n",(0,i.jsx)(s.li,{children:"Provide your own CSS stylesheets"}),"\n",(0,i.jsx)(s.li,{children:"Implement your own theme from scratch"}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Override any React component"})," provided by our default theme: we call this ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/swizzling",children:"swizzling"})]}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/hung_dev/status/1546918275065741312",handle:"hung_dev",name:"\nHung Viet Nguyen",job:"Creator of JestPreview",children:(0,i.jsx)(s.p,{children:"I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\ntime. This is super cool since a framework usually needs to sacrifice one for\nthe other."})}),"\n",(0,i.jsxs)(s.p,{children:["This enables users willing to invest a bit more time on ",(0,i.jsx)(s.strong,{children:"customizations"})," to build sites that ",(0,i.jsx)(s.strong,{children:"look different"})," from others."]}),"\n",(0,i.jsx)(d.cQ,{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/dabit3/status/1382855449813389315",handle:"dabit3",name:"Nader Dabit",job:"Web3 developer, Developer DAO founder",children:(0,i.jsx)(s.p,{children:"So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\nway that we wanted it to look. No blockers at all."})}),"\n",(0,i.jsx)(s.h3,{id:"other-features",children:"Other features"}),"\n",(0,i.jsx)(s.p,{children:"Docusaurus 2 comes with a very long list of useful features:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Theme: dark mode, better UI and UX, flexible ",(0,i.jsx)(s.code,{children:"themeConfig"})," options..."]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning: flexible plugin options to adapt to your workflow"}),"\n",(0,i.jsx)(s.li,{children:"Docs sidebar: collapsible category, category index pages..."}),"\n",(0,i.jsx)(s.li,{children:"Blog: multiple authors, authors map, archive page..."}),"\n",(0,i.jsx)(s.li,{children:"Markdown: tabs, math equations, live code blocks, linking, flexible front matter..."}),"\n",(0,i.jsx)(s.li,{children:"Search: use the new Algolia DocSearch 3 experience"}),"\n",(0,i.jsx)(s.li,{children:"Assets: make it easy to incorporate images and other kinds of files"}),"\n",(0,i.jsx)(s.li,{children:"Internationalization: config options, default theme translations..."}),"\n",(0,i.jsx)(s.li,{children:"Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement..."}),"\n",(0,i.jsx)(s.li,{children:"SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang..."}),"\n",(0,i.jsx)(s.li,{children:"PWA: add offline support to your site, and make it installable"}),"\n",(0,i.jsx)(s.li,{children:"Fail-fast: strict config validation, detect broken links, and prevent bad production deployments"}),"\n",(0,i.jsx)(s.li,{children:"TypeScript support for config files, plugins, custom pages and theme authors"}),"\n",(0,i.jsxs)(s.li,{children:["Playgrounds: assess Docusaurus easily from your browser with ",(0,i.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(s.li,{children:"Canary releases: use the @canary npm tag to use the upcoming release before anyone else"}),"\n",(0,i.jsx)(s.li,{children:"Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working"}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/alexbdebrie/status/1540010328335032320",handle:"alexbdebrie",name:"Alex DeBrie",job:"AWS Data Hero, author of The DynamoDB Book",children:(0,i.jsx)(s.p,{children:"Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\na good bit of configuration without being overwhelming, and the ability to\nreally customize the styling if you're braver than I am."})}),"\n",(0,i.jsx)(s.h2,{id:"why-20-now",children:"Why 2.0 now?"}),"\n",(0,i.jsxs)(s.p,{children:["Many enthusiastic followers of ours have been curious ",(0,i.jsx)(s.strong,{children:"why it took us 4 years to release Docusaurus 2.0"}),", considering the beta is already successful and ",(0,i.jsx)(s.strong,{children:"widely used in production"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["The reason is that we aim to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]}),", which means we will be incrementing the major version number whenever we release a ",(0,i.jsx)(s.strong,{children:"breaking change"}),"."]}),"\n",(0,i.jsx)(s.p,{children:"It is important for multiple reasons:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["It ",(0,i.jsx)(s.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,i.jsx)(s.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,i.jsx)(s.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,i.jsx)(s.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["The problem is that our flexible theming system inherently creates a very ",(0,i.jsx)(s.strong,{children:"implicit API surface"})," on which it is ",(0,i.jsx)(s.strong,{children:"hard to know what is a breaking change"})," in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"}),", so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["From now on, Docusaurus will ",(0,i.jsx)(s.strong,{children:"release new major versions more frequently"}),". In practice, you can expect a ",(0,i.jsx)(s.strong,{children:"new major version every 2 to 4 months"}),"."]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]}),(0,i.jsxs)(s.p,{children:["Check our ",(0,i.jsx)(s.a,{href:"/community/release-process",children:"release process"})," documentation for details."]})]}),"\n",(0,i.jsx)(s.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash Up and Running",src:t(65228).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will ",(0,i.jsx)(s.strong,{children:"backport retro-compatible changes in Docusaurus 2.x"})," minor versions to make them available as soon as possible to the community on a stable channel."]}),"\n",(0,i.jsx)(s.p,{children:"A sample of the features on our roadmap for the upcoming major versions of Docusaurus:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4029",children:"Upgrade to MDX 2.0"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4625",children:"Improve Markdown infrastructure"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6114",children:"Improve theming and swizzle"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2961",children:"TailwindCSS theme"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/7227",children:"Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4389",children:"Dynamic navbar: navbar item activation strategies"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2968",children:"Custom Social Cards"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3236",children:"CSS-in-JS support"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6520",children:"Use Node.js ES Modules"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"Improve build time performance"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4138",children:"Extend Docusaurus plugins, CMS integration"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"thank-you",children:"Thank You"}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"all our contributors"}),", including:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["The Docusaurus core team: ",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," and all our ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/community/team",children:"former team members"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/zpao",children:"Paul O\u2019Shannessy"})," for supporting the development of all the next versions of Docusaurus at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})," for creating our cutest mascot Slash"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," for his significant ",(0,i.jsx)(s.a,{href:"/blog/2020/01/07/tribute-to-endi",children:"initial work on Docusaurus v2"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/shortcuts",children:"Cl\xe9ment Vannicatte"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Shipow",children:"Kevin Granger"})," and the whole Algolia team for their support"]}),"\n",(0,i.jsxs)(s.li,{children:["All the community members for making valuable code contributions, improving our documentation, and answering questions on ",(0,i.jsx)(s.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to thank in particular all our ",(0,i.jsx)(s.strong,{children:"Docusaurus 2.0 early adopters"})," for assessing its alpha, beta and canary releases, providing a ton of ",(0,i.jsx)(s.strong,{children:"invaluable feedback"}),". We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0."]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),", Docusaurus is one of our ",(0,i.jsx)(s.strong,{children:"most successful projects"}),". We can't wait to see all the outstanding documentation websites that you will create! Don't forget to ",(0,i.jsxs)(s.strong,{children:["submit them to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})]}),"!"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Now, let your imagination run wild \ud83e\udd2a!"})}),"\n",(0,i.jsx)(s.p,{children:"\u2014 Slash"}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsx)(s.p,{children:"\ud83d\ude4f Share your experience using Docusaurus with the community!"}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash plushies",src:t(97531).Z+"",width:"1332",height:"1331"})})]})}function w(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},759:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/babel.cbc364a.640.png 640w,"+t.p+"assets/ideal-img/babel.3669cfa.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/babel.cbc364a.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/babel.3669cfa.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/babel.cbc364a.640.png",toString:function(){return t.p+"assets/ideal-img/babel.cbc364a.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AHW3yo+qtZWouZOjuZCTupGGu4yEuoKCt3yHsnCOwQDI2OD07urj4uHc29ns6+fy8+3y8+3s7Oj18enC0+UA1ODq/vz78vP06+vu8PDz9PT38/P39/f5////0dbpANjf6f/9/Pj28fDs4PXy6P767/757v359P///+TH1wDb3ej4/Pv1+PPw8eb1+O31+Oz1+ez4+/b+///vwMwA1p7J1Zuk2JSQ1oZ71IB01Htx1nhv23lw3Xxy5m11yK+UrA2JDh4AAAAASUVORK5CYII="}},92037:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png 640w,"+t.p+"assets/ideal-img/docusaurus.ba4280f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/docusaurus.ba4280f.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png",toString:function(){return t.p+"assets/ideal-img/docusaurus.2ad1782.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAwUlEQVR4nBXJPQuCQBgA4PvBQWE4CEFBSwQhRG1KU1M/oYYCzaCGCLIPjb4uQ++6pNOztHqjZ32QPFk0LbM1MtW+0eiZDX1c18ZV3VD0QV63kLU7xSL0yPnkbRn3aHQJxZVGPhdkaF/Q8kgAIIkfd4pf4p4m4Tfjn3cKAPOlj1zM/p1wEhzYDYcMC+5/MwEA2Fqhw/nf4skD4gTUpbd9FOPsHX0A2HCGVp2prXU3bXVdU+yKtC5LTqngKnm3VPRy8g+/UpX4n6rSEgAAAABJRU5ErkJggg=="}},91551:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/katex.2b3ecc9.640.png 640w,"+t.p+"assets/ideal-img/katex.91ac937.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/katex.2b3ecc9.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/katex.91ac937.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/katex.2b3ecc9.640.png",toString:function(){return t.p+"assets/ideal-img/katex.2b3ecc9.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAv0lEQVR4nAXB3wrBUBwA4PPAaiHSduOGG4UiV0rIC3gCNwqToraz5d8K46zNzraznbMxP9+HqqrV3eiDldFfmp252Z4arQluTLA83UnjA1pfbJFxQv2n51LOaMbiXPgiiri/wARplgP5N04S50VCSlkY8ThJRQYAe40gwyIAOWPMth9vzw0CGoZBygUA3FYYna4kB6Asvr8c4r1dGkQiFZ/vD8BfbBEeqfpwZva6elPW6mVNKeKadKxJZ6VkFyp/r/+XglW08JQAAAAASUVORK5CYII="}},49911:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/prettier.0987194.640.png 640w,"+t.p+"assets/ideal-img/prettier.ac62bde.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/prettier.0987194.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/prettier.ac62bde.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/prettier.0987194.640.png",toString:function(){return t.p+"assets/ideal-img/prettier.0987194.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAvklEQVR4nDXCzwvBUBwA8PcHO6yWQktIK0kcnJRc5OIosZ1wkXKRNjYchmbzY794tnnv7SsHnz6IGy6rfbnWkyqdkViXxJJULspCYcyXB6naDM23Bvac4+mk69rFNv2n6z9dx7uzOJiuTaQYNwCGo4gwBn+MJQCwUm2kGVegJMD4FYaUEEbp74cAwHm+QfrBihnx8Nt6uO4Le/gdhHFEaALgTJZIaS+UVldrNlQxqxbTmzy/zXG7DLcXeDOV/gIPyZWv09LiSwAAAABJRU5ErkJggg=="}},45058:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.e8025ec.640.png 640w,"+t.p+"assets/ideal-img/react-native.8cebf9a.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.e8025ec.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/react-native.8cebf9a.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/react-native.e8025ec.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.e8025ec.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AGisw32brIaZrYCSqn2EroB1rX52r5eYzoGMumSBtwC8ztfm4uHZ2dnLy8rP0c/i49/q6+f4+fX/+/S7zN8Az9zl+/n38vP04uTm6enq7O3u7Ovt9vb3////0NXpANDY4vXz8vHx8efm5+zr6vPy8vTz8vv4+f///+PG1wDY2+b3+/ni6OnO1djY3d/d4uTb4OPu8fL////uwMwA1p7J1pylzYiFvW5iu2dcu2NZulxUz2tk33505mx04r2PDpDiiAMAAAAASUVORK5CYII="}},97814:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/courier.e9b71f4.640.png 640w,"+t.p+"assets/ideal-img/courier.f8addf0.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/courier.e9b71f4.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/courier.f8addf0.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/courier.e9b71f4.640.png",toString:function(){return t.p+"assets/ideal-img/courier.e9b71f4.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AIyt27SXz7ud17eW2bGD269z3qhv3p5x3ZJw2X1+2gDIyeH52u/XwdTDq8LRu8/SvdLQu9Hm1+j/8//EzewAz9ro+/j+3dzizczR1NPY19XbxMHIxLzH49/hvb7XANTW5/ft+Pr3+//+/v39/f///8S+xUIjSS8XPIZdfwDW1ub39v3y9Pju8fTy9vj///+4uMImFDceEjeUVXkA1pzJ1Jej2JKO2IZ61oB024B1zGpjrUNDrERE11Vl8lGDEKxF5owAAAAASUVORK5CYII="}},29743:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/datagit.98630dd.640.png 640w,"+t.p+"assets/ideal-img/datagit.afeea1f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/datagit.98630dd.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/datagit.afeea1f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/datagit.98630dd.640.png",toString:function(){return t.p+"assets/ideal-img/datagit.98630dd.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtElEQVR4nB3MSwtBQRiH8fm+SkoSycLOykI2ZOUb2CqxILlEJ5dDlFyaFIccnZk5877zF+un3yMah3B+UytpvJOZLsykb0Y90+urzjCstaVYyhcAdg6Ati6M6RFGlhiIB/5d+JcnAGMptsTETKyUUTomsjNPisP1l91fR5rfEQdvzUQAzsO1OJ4DAIqcIheR+1j3+Gj9vwfdidg0x+t6a1ut7MoFv5Txi+ldLrXPJvf5lEykv9L2nupSFk8xAAAAAElFTkSuQmCC"}},42431:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/dyte.b411d0a.640.png 640w,"+t.p+"assets/ideal-img/dyte.9d967ec.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/dyte.b411d0a.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/dyte.9d967ec.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/dyte.b411d0a.640.png",toString:function(){return t.p+"assets/ideal-img/dyte.b411d0a.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAvElEQVR4nCXJPQ/BQBgA4Pu9FqSDIBKjicFmEIPERmwkWCQkREvQpr4SJK7otb1DtXp3r4hnfVBhZrfmZHpg6uGpLkJt+BkP/H6PNjqs2LyhWmfZ7por82RZl3foCxBSSi4iABgaDlJ3FucCM/9IGKYv2/+QgLNAAIC2xEjfYwBJXM/1vIj/CcF/fR7paLO3JIBD6eVuXx2XsAd9B2H0e2cwRUZ1olfqZrlkFrLrvGLklE06sUvFt5kkjilfulmaxNksu3AAAAAASUVORK5CYII="}},97314:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png 640w,"+t.p+"assets/ideal-img/hasura.226d6d3.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/hasura.226d6d3.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png",toString:function(){return t.p+"assets/ideal-img/hasura.e4f3ebd.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFqhu2SFmW2FnGR7l2Bpl2Fcl1pXk1dblk1lm1N7tgBGXm0VGyImLjUhKC0cJCgdJykbJSYWHyERHB0sSGIASl1sGSIqJi81KzI4KDA1JCsxJSwyISkvGiAiOUJZAFJgbxwkLCYuNiUtNR8nLiIqMh8mLiQqMhooLk42TABOWWkPHSUbKTMgMkEcLTsjNEEdMD4hMD4XNEFYMUUAtn6soWhzqmZjqFpPplJIqFBHqElCq0lCp0hAxUpUim0yiR9LFnEAAAAASUVORK5CYII="}},31256:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/ionic.7f10b53.640.png 640w,"+t.p+"assets/ideal-img/ionic.cd19b49.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/ionic.7f10b53.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/ionic.cd19b49.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/ionic.7f10b53.640.png",toString:function(){return t.p+"assets/ideal-img/ionic.7f10b53.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJbY7s3o99Xo+tPk+8DK/MbA+ci/98HB98DM+Ji26gDK3ej//Pzy8vLs6+rn6u74+vn////x8u/w7OXE1uoA0d7p////7u/w4uPm6Ojq7e7z8/T309PW19fWub7UANTd6P/+/vj4+Pj4+fr6/Pr7/fb3+tve5/3//tCzxADZ3en8///0+Pn1+vv2+/v2+/vz+fvO2ef3///crLoA1ZzJ1Zqj2ZSP2ol814F12H1z2Hhv1HFq23lw42ZvKQ2aZPs/3GIAAAAASUVORK5CYII="}},10712:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png 640w,"+t.p+"assets/ideal-img/outerbounds.17abaf6.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/outerbounds.17abaf6.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png",toString:function(){return t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwklEQVR4nAXBPWvCQBgA4Pu7UhQsUh2Kk2sXF8Ghkz/BqdqCIBkUbf1Ag5GKaFsjyZ2X+3ovd+bt85BuxD9jszip6T6bzPVsBMFQfLzzt/Gt0/8jy3OCWFCasvSaZdR7i17fnUSEIIzJ4vvi81xIBZAbcNY6kMIIgd5MZ0eyin6cBSU1ZTJOtFRWcXZLWYH5cfRFosO1QJQGuJBCG3COZYIybhGTQUDC18mm2wvbL5vW07pZ3T5Xw3p5V3vYNSq/pcd/0kecLyndd98AAAAASUVORK5CYII="}},13296:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/quickwit.aae4257.640.png 640w,"+t.p+"assets/ideal-img/quickwit.e851c05.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/quickwit.aae4257.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/quickwit.e851c05.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/quickwit.aae4257.640.png",toString:function(){return t.p+"assets/ideal-img/quickwit.aae4257.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFyguGaElrfL3djp/8zP+MvA98e99b7C97yt3pmd1QBLYG0jIii6u77x7+3s7On+//z+/fr8/vz/9/PHy+EAVWRzKCszvb/C6uvr4ODi7+7w8vHz8vL0////ztToAFxmdSkrM7/Bw/Ty8ujo6Ors6/T09P38/P///+PF1QBXXW0bIyu4vcDk7OzZ3+Dc4eLn7e72+fr9///uvssAuYCtpGl0zYeD2Ip70n1x13xy13du2XVs3Hpx52tzWcaFkyvPIw8AAAAASUVORK5CYII="}},48426:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.9ad7a23.640.png 640w,"+t.p+"assets/ideal-img/react-native.02f5343.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.9ad7a23.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-native.02f5343.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-native.9ad7a23.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.9ad7a23.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGaqwXuXqIWWqoKSqoKEroN1rYF2rXVzq32Jt22MwAC/0drp4uDF0NSpvcS+0dTI3N6909nQ3N789+++0eQA0+Dp///90urysdjlttrmuN3rpsXg0+Xw////ztPoANTc5vv5+PTy8ejk5O3p6fn19fz39f36+f///+PG1QDZ3Of09/bv8/Xq7/Hz+Pr0+vv0+vz5/Pz9///uvssA1p3J05eh1Y+L1IN22YN32X9023px3Hhv23pw52pzwqeO97QIzhcAAAAASUVORK5CYII="}},58155:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/figma.e023b25.640.png 640w,"+t.p+"assets/ideal-img/figma.4b79b06.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/figma.e023b25.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/figma.4b79b06.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/figma.e023b25.640.png",toString:function(){return t.p+"assets/ideal-img/figma.e023b25.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHCswX+aqIearISVrH6Cq4F3rn93r3V1rG54pmeFuQDC09zu6ebp5+fl5OTo6OXu7+rx8ezr7Ojz7+e8zuEA0d7o///++fn65+fo9fX1+Pj5+Pj5/Pz9////0NToANXd5/z6+Pf39+Xk4+Ph5ePi5urp6vv5+f///+PF1QDe4ez////z+Pnf4+rg5O7m6/Hr8fP5/Pz9///uvssA157K1pqk2ZOO1YN50nxz1Xtw2Hdu3Hdv3Hpw52pyiw2SNplStDwAAAAASUVORK5CYII="}},9258:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/gulp.645374a.640.png 640w,"+t.p+"assets/ideal-img/gulp.f298c97.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/gulp.645374a.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/gulp.f298c97.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/gulp.645374a.640.png",toString:function(){return t.p+"assets/ideal-img/gulp.645374a.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJG2zL6ls8OmuMGiubuLs7x9tLd7s7F+taR/rIeGugDU3eb/8/D97+7/8e/97en45N/76eX57On/6+PBx9oA0N/o8fPz7fDy7fDx8fT1/P7++fT189/i////ztLmANHY4u/r6vDu7+/t7fXz8//+/vrt7vXY2v///+PE1QDg4+7////9/v7+///8/v729/j3+/v2+fr4///ru8gA153J1pqj25SQ2ol82IF12X5z2npw3Hdu3Hpw52py1S6WZvfndWMAAAAASUVORK5CYII="}},44827:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/iota.95754da.640.png 640w,"+t.p+"assets/ideal-img/iota.117672c.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/iota.95754da.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/iota.117672c.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/iota.95754da.640.png",toString:function(){return t.p+"assets/ideal-img/iota.95754da.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFOYtVZ2j111kl1zlFpilVtVl09LjkhLjEJSi05uqgA0TWYSGC8lLkQTGzELFy0IFCknOEsoOk4FDSAmQmUAO1BoGyU7NURYHTJIEh83DBQsZJGpbJeuBQ8lSUZpAEBPZwYRJw8qPRVDUwwWLR4sQUpvkUhoihAhNFQxUQA7Rl8ABx0DESgADSUCEigNHjQRJkIVJ0MAGCxJITwAs3uqnWNypmNjpFZOpVJKo0xFoUI8pEE8oUJAxEhVk18yaV+3uG0AAAAASUVORK5CYII="}},11342:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png 640w,"+t.p+"assets/ideal-img/lacework.33303f9.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/lacework.33303f9.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png",toString:function(){return t.p+"assets/ideal-img/lacework.dfc8aa5.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AIzU7rnd78Te8cHa8b7I87+69ri19ayx8qCy7oao5wCd1eWz3eO94OTI5eXM6/K43/+bw/6Bqfxji/xTgOoAt93q1/b53PX65fr83/T7zuT8vdT8rMT6nrj/hpzmAN3k7vTw8PLw8Pv6+vHv8P/+/Pn29fXw7P///uTH1gDe4ezx9/bx9vj2+/zw9vj3/f7x9/nq7/Pz///pu8kA153J0JWf1pCN2IZ60ntv1ntw13dt1G9n13Vr52pzffeTuLcnN78AAAAASUVORK5CYII="}},70054:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-navigation.1b40364.640.png 640w,"+t.p+"assets/ideal-img/react-navigation.a6b28c6.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-navigation.1b40364.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-navigation.a6b28c6.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-navigation.1b40364.640.png",toString:function(){return t.p+"assets/ideal-img/react-navigation.1b40364.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJna8c3n9tLl99Hh+c3Q+czC+cjA+L+/9bfC8JWz6QDN3u728Pjw7/j29Pz19fv09fr29/zz8/n69vjC1O4Aydfr3dzu2Nrp19fkzc7gzs/g29znxMXitbbevsTiAMzU6c/O7NHR5+Xk7c/O3aWkt+bl7bOy2Kyx29W30wDKzujQ1fHR1vHb4PXZ3/LT1+za4PXP1O/R4Pnaq8gA0pjHz5Oi1I6P1YR71H901Xtz1HNv1XFu1HNv4mVyADiS2eC63VAAAAAASUVORK5CYII="}},42444:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png 640w,"+t.p+"assets/ideal-img/sap-cloud.312bf29.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/sap-cloud.312bf29.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png",toString:function(){return t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJjT3Mzc1NLa1tDW2M7F186318i12MG217q50Zas1ADUrU3/pgD8pwv+rBD/uC//uTD/rxH9rQ3/rQDHokwA2bRi/7Ie/bkx/7Yq9rxT9rtS/7Yt/bUx/7QezqJbANzk7P///8XHyN7g4f//+f///dLPyNzZz////+PF1ADf4+7////N2NzW5Ob7///5/v/U3dTV2sr6///uvssA153K0JWe15CK14R2035y1Hlu1HRs1nJr13Vr52pyn7CEdE5qo0kAAAAASUVORK5CYII="}},11937:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/snapchat.5f28663.640.png 640w,"+t.p+"assets/ideal-img/snapchat.39e00a7.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/snapchat.5f28663.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/snapchat.39e00a7.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/snapchat.5f28663.640.png",toString:function(){return t.p+"assets/ideal-img/snapchat.5f28663.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHGztIijj5GjlYydlIqNkYqAk4Z9lYCAlnJ9iGiGpQDQ2Er96gDz5wP26QDv5RHw5xD47QD26wP/7wDAykgAr7dRwbcEvrcSwLYLvLMWurQWv7gQv7cQxLsFpqZLAD9IY19YEVtVGxUiNy0oMDQ0LTA+PxwZIhkeI1E0SgBITFs2OB44OiggLC8mLSovLSwoLSskKSwbKytaLDkAuH2ppGl3q2ZlrlxPqlRJqE9Fq0pDsk1ErkxDx0pT21lMrI2uNt0AAAAASUVORK5CYII="}},44102:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/solana.8bcac78.640.png 640w,"+t.p+"assets/ideal-img/solana.e7c1e4f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/solana.8bcac78.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/solana.e7c1e4f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/solana.8bcac78.640.png",toString:function(){return t.p+"assets/ideal-img/solana.8bcac78.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJfa783n9dXo+c/g9szP98zB98i/98C+9LfC7pa06QDS5e3+/Pj7+/r8/Pr2+vX7/vr8/fr2+/b///vH2e4A1eLs9Pb08fT09PX26/Dw9vb38vL06/Dx/f38zNHlAN3l7v////z+/v7+//3+/v////7//v39/f///+PG1wCcoKuWmZiVmZqWm5yXm5yVmZqWm5yWmZuRnp2qfIgAsXejmF1noFlUolBDnkk8nUM4oUA3oj41njwywENMFZ6NFBzee74AAAAASUVORK5CYII="}},33339:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png 640w,"+t.p+"assets/ideal-img/stackblitz.786829d.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/stackblitz.786829d.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png",toString:function(){return t.p+"assets/ideal-img/stackblitz.3a585ac.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGmswn6ZqIibrISUq4CDrH90qntyqXNzqGl1omaEuADK2+Tx6+ns6unv7evr6+j4+fT5+vXz8/D//fW+z+IA2ebv/v37+Pr79v7/8vX3ysrMv8DDur3B0tbXzdLmAN3m7////fj5+ff//9bv9SEmKwUIDgYNFR0sM9W5yQDLz9nd4uDZ3d7a4ePE1txxen5kbHBka29oeXnRpLEAv4azsHR/uHJuuGdbuGFUwWdbxGNaxmFZw2JY0FRd0wl8G5D7uNgAAAAASUVORK5CYII="}},45785:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/supabase.e96fd5f.640.png 640w,"+t.p+"assets/ideal-img/supabase.f37ca60.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/supabase.e96fd5f.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/supabase.f37ca60.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/supabase.e96fd5f.640.png",toString:function(){return t.p+"assets/ideal-img/supabase.e96fd5f.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFibsGF8iWx/kGd4jmFljWFWjFxUjFhYjU5ZhVRypgBGWGAXEg4jIiEnJiQcHBgZGhUaGhUcHRkZFQ0yRFcAUV5nHx0cKiorLS0tKSkqJyYoKSgpKCgqHx4cPkNXAFdfaB8dGywsLDIxMS0rKyknJzEvLzAuLyMmI1Y4SABVWWMTFxUiJicnLC0hJicdIiMlKywkKCkTISBbLTkAuX+so2dxqmVgqllMp1FFp01Cqkk/rEc+qEY9xkpSZqAv5L+d0r8AAAAASUVORK5CYII="}},11384:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/tauri.7d284be.640.png 640w,"+t.p+"assets/ideal-img/tauri.4852075.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/tauri.7d284be.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/tauri.4852075.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/tauri.7d284be.640.png",toString:function(){return t.p+"assets/ideal-img/tauri.7d284be.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFucsWV/jXCCk2h4kGBljmFXjl9Yk1tbkVBbiFV0qgBFWWMTEhIYGxwuLyQ4ODM0NzMuKhoxNjczNDI5SFcAQ1lmSkM2UUxELTk4S0pKR0hLPzcnQEpYPUpbR0dSAEhWY0ZEOE1HPh4fJTc4PDQ0NyIkKSomIyYmG1w9SwBNUl0PHB4YIicaHyEwNjg0Oz0YHiAkKCcaJyFbLTkAtXypqGt0rWZirVxPpVBDqE1CrExCrUlAqEc+xUlStsQ1Jd2lGVkAAAAASUVORK5CYII="}}}]); \ No newline at end of file diff --git a/assets/js/519746e1.a6c23f5f.js b/assets/js/519746e1.a6c23f5f.js deleted file mode 100644 index 433d6deb8c73..000000000000 --- a/assets/js/519746e1.a6c23f5f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98986],{46514:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},46768:(e,s,t)=>{"use strict";t.d(s,{Z:()=>h});var i=t(24246),a=(t(27378),t(66222)),n=t(36712);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c(e,s){if(null==e)return{};var t,i,a=function(e,s){if(null==e)return{};var t,i,a={},n=Object.keys(e);for(i=0;i<n.length;i++)t=n[i],s.indexOf(t)>=0||(a[t]=e[t]);return a}(e,s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)t=n[i],s.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}function d(e,s){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,n.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=s,{size:t}=e,i=t?` (${function(e){const s=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const t=Math.floor(Math.log(e)/Math.log(1024));return 0===t?`${e} ${s[t]}`:`${(e/1024**t).toFixed(1)} ${s[t]}`}(t)})`:"";return(0,n.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:i})}case"offline":return(0,n.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=s;return 404===e?(0,n.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,n.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function h(e){const{img:s}=e,t=c(e,["img"]);return"string"==typeof s||"default"in s?(0,i.jsx)("img",o({src:"string"==typeof s?s:s.default},t)):(0,i.jsx)(a.Z,l(o({},t),{height:null!==(n=s.src.height)&&void 0!==n?n:100,width:null!==(r=s.src.width)&&void 0!==r?r:100,placeholder:{lqip:s.preSrc},src:s.src.src,srcSet:s.src.images.map((e=>l(o({},e),{src:e.path}))),getMessage:d}));var n,r}},96076:(e,s,t)=>{"use strict";t.d(s,{Gl:()=>d,qg:()=>h,cQ:()=>u});var i=t(24246),a=(t(27378),t(14088)),n=t(41428),r=t(46768);const o={carousel:"carousel_raHC",navButton:"navButton_qSul",dotGroup:"dotGroup_n_95",siteSlide:"siteSlide_AwQk",siteLink:"siteLink_IglZ"};function l({index:e,site:s}){return(0,i.jsxs)(a.Mi,{index:e,className:o.siteSlide,children:[(0,i.jsx)(r.Z,{img:s.image,alt:s.name,loading:0===e?"eager":"lazy"}),(0,i.jsxs)(n.Z,{to:s.url,className:o.siteLink,target:"_blank",children:["\ud83d\udd17 ",s.name]})]})}function c({sites:e,aspectRatio:s}){return(0,i.jsxs)(a.sj,{naturalSlideWidth:1,naturalSlideHeight:1/s,totalSlides:e.length,infinite:!0,className:o.carousel,children:[(0,i.jsx)(a.iR,{children:e.map(((e,s)=>(0,i.jsx)(l,{index:s,site:e},s)))}),(0,i.jsx)(a.P1,{className:o.navButton,style:{right:-20},children:">"}),(0,i.jsx)(a.jp,{className:o.navButton,style:{left:-20},children:"<"}),(0,i.jsx)(a.I5,{className:o.dotGroup})]})}function d(){return(0,i.jsx)(c,{aspectRatio:1072/584,sites:[{name:"Prettier",image:t(49911),url:"https://prettier.io/"},{name:"Babel",image:t(759),url:"https://babeljs.io/"},{name:"React-Native",image:t(45058),url:"https://archive.reactnative.dev/"},{name:"Katex",image:t(91551),url:"https://katex.org/docs/"},{name:"Docusaurus",image:t(92037),url:"https://v1.docusaurus.io/"}]})}function h(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Tauri",image:t(11384),url:"https://tauri.app/"},{name:"Figma",image:t(58155),url:"https://www.figma.com/plugin-docs/"},{name:"Snapchat",image:t(11937),url:"https://docs.snap.com/"},{name:"Iota",image:t(44827),url:"https://wiki.iota.org/"},{name:"SAP Cloud",image:t(42444),url:"https://sap.github.io/cloud-sdk/"},{name:"Supabase",image:t(45785),url:"https://supabase.com/docs"},{name:"StackBlitz",image:t(33339),url:"https://developer.stackblitz.com/"},{name:"Lacework",image:t(11342),url:"https://docs.lacework.com/"},{name:"React-Navigation",image:t(70054),url:"https://reactnavigation.org/"},{name:"Solana",image:t(44102),url:"https://docs.solana.com/"},{name:"Gulp",image:t(9258),url:"https://gulpjs.com/"}]})}function u(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Ionic",image:t(31256),url:"https://ionicframework.com/docs/"},{name:"Outerbounds",image:t(10712),url:"https://outerbounds.com/docs/"},{name:"Courier",image:t(97814),url:"https://www.courier.com/docs/"},{name:"Quickwit",image:t(13296),url:"https://quickwit.io/docs/"},{name:"Dyte",image:t(42431),url:"https://docs.dyte.io/"},{name:"React-Native",image:t(48426),url:"https://reactnative.dev/"},{name:"Hasura",image:t(97314),url:"https://hasura.io/docs/"},{name:"Datagit",image:t(29743),url:"https://www.datagit.ir/"}]})}},6698:(e,s,t)=>{"use strict";t.d(s,{Z:()=>c});var i=t(24246),a=(t(27378),t(40624));const n={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:r,bodyStyle:c}){return(0,i.jsxs)("div",{className:n.browserWindow,style:l(o({},r),{minHeight:s}),children:[(0,i.jsxs)("div",{className:n.browserWindowHeader,children:[(0,i.jsxs)("div",{className:n.buttons,children:[(0,i.jsx)("span",{className:n.dot,style:{background:"#f25f58"}}),(0,i.jsx)("span",{className:n.dot,style:{background:"#fbbe3c"}}),(0,i.jsx)("span",{className:n.dot,style:{background:"#58cb42"}})]}),(0,i.jsx)("div",{className:(0,a.Z)(n.browserWindowAddressBar,"text--truncate"),children:t}),(0,i.jsx)("div",{className:n.browserWindowMenuIcon,children:(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{className:n.bar}),(0,i.jsx)("span",{className:n.bar}),(0,i.jsx)("span",{className:n.bar})]})})]}),(0,i.jsx)("div",{className:n.browserWindowBody,style:c,children:e})]})}},80566:(e,s,t)=>{"use strict";t.d(s,{Z:()=>n});var i=t(24246),a=(t(27378),t(41428));function n({size:e=54}){return(0,i.jsx)(a.Z,{to:"https://news.ycombinator.com/item?id=32303052",style:{display:"block",width:e,height:e},children:(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:e,height:e,children:[(0,i.jsx)("path",{fill:"#FF6D00",d:"M42 42H6V6h36v36z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M8 8v32h32V8H8zm30 30H10V10h28v28z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M23 32h2v-6l5.5-10h-2.1L24 24.1 19.6 16h-2.1L23 26z"})]})})}},58562:(e,s,t)=>{"use strict";t.d(s,{Z:()=>l});var i=t(24246),a=(t(27378),t(40624)),n=t(41428);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l({className:e,style:s}){return(0,i.jsx)(n.Z,{to:"https://www.producthunt.com/posts/docusaurus-2-0?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-docusaurus-2-0",className:(0,a.Z)("producthunt-badge-widget",e),style:o({display:"block",width:250,height:54},s),children:(0,i.jsx)("img",{className:"producthunt-badge-widget",src:"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=353916&theme=light",alt:"Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt",style:{width:250,height:54,maxWidth:"initial"},width:250,height:54})})}},53025:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png"},63692:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png"},22355:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png"},99486:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png"},97531:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg"},76186:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},6255:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/star-history-72ae014f60d05445753e9f690e41d347.png"},17424:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},51374:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},65228:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},71943:(e,s,t)=>{"use strict";t.r(s),t.d(s,{assets:()=>g,contentTitle:()=>u,default:()=>w,frontMatter:()=>h,metadata:()=>p,toc:()=>A});var i=t(24246),a=t(71670),n=t(28475),r=t(6698),o=t(58562),l=t(80566),c=t(64257),d=(t(66448),t(97360),t(96076));const h={title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},u=void 0,p={permalink:"/blog/2022/08/01/announcing-docusaurus-2.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",source:"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",title:"Announcing Docusaurus 2.0",description:"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f",date:"2022-08-01T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:12.075,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"},{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Alexey Pyltsyn",title:"Open-source enthusiast",url:"https://github.com/lex111",email:"lex@php.net",page:{permalink:"/blog/authors/lex-111"},imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Paul O\u2019Shannessy",title:"Engineering Manager at Meta",url:"https://x.com/zpao",page:{permalink:"/blog/authors/zpao"},socials:{x:"https://x.com/zpao",github:"https://github.com/zpao"},imageURL:"https://github.com/zpao.png",key:"zpao"},{name:"Joel Marcey",title:"Co-creator of Docusaurus 1",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"},nextItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"}},g={image:t(46514).Z,authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},A=[{value:"What is Docusaurus exactly?",id:"what-is-docusaurus-exactly",level:2},{value:"The story behind Docusaurus",id:"the-story-behind-docusaurus",level:2},{value:"Toward Docusaurus 2.0",id:"toward-docusaurus-20",level:2},{value:"Who uses Docusaurus 2.0?",id:"who-uses-docusaurus-20",level:2},{value:"What's New in 2.0?",id:"whats-new-in-20",level:2},{value:"MDX",id:"mdx",level:3},{value:"File system conventions",id:"file-system-conventions",level:3},{value:"Plugins",id:"plugins",level:3},{value:"Theming",id:"theming",level:3},{value:"Other features",id:"other-features",level:3},{value:"Why 2.0 now?",id:"why-20-now",level:2},{value:"What's Next?",id:"whats-next",level:2},{value:"Thank You",id:"thank-you",level:2}];function m(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components},{TweetQuote:h}=s;return h||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("TweetQuote",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(s.p,{children:["Today we are extremely happy to finally ",(0,i.jsx)(s.strong,{children:"announce Docusaurus 2.0"}),"! \ud83e\udd73\ufe0f"]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:(0,i.jsx)(s.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,i.jsx)(s.strong,{children:"best documentation websites"})," with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),", letting you ",(0,i.jsx)(s.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,i.jsxs)(s.p,{children:["After ",(0,i.jsxs)(s.strong,{children:["4 years of work, ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75",children:"75 alphas"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22",children:"22 betas"})]}),", the next generation of Docusaurus is ",(0,i.jsx)(s.strong,{children:"ready for prime time"}),". From now on, we now plan to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]})," and will release ",(0,i.jsx)(s.strong,{children:"major versions more frequently"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"social-card image",src:t(76186).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Now"})," is the best time to show your love for Docusaurus!"]}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["In a hurry? Check ",(0,i.jsx)(s.a,{href:"#whats-new-in-20",children:"what's new in Docusaurus 2.0"}),"!"]})}),"\n",(0,i.jsx)(s.h2,{id:"what-is-docusaurus-exactly",children:"What is Docusaurus exactly?"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is a ",(0,i.jsx)(s.strong,{children:"static site generator"})," that helps you ship ",(0,i.jsx)(s.strong,{children:"beautiful documentation websites"})," in ",(0,i.jsx)(s.strong,{children:"no time"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Focus on your content: just write ",(0,i.jsx)(s.strong,{children:"Markdown files"}),". Docusaurus will generate an optimized ",(0,i.jsx)(s.strong,{children:"website"})," for you that's easy to ",(0,i.jsx)(s.strong,{children:"host anywhere"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is ",(0,i.jsx)(s.strong,{children:"full-featured"})," and very ",(0,i.jsx)(s.strong,{children:"flexible"}),": we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to ",(0,i.jsx)(s.strong,{children:"adapt the UI to match your branding"})," so that it integrates nicely with your main website or documentation portal. Its usage of ",(0,i.jsx)(s.strong,{children:"React"})," enables a ",(0,i.jsx)(s.strong,{children:"modern client-side navigation"}),", and the ability to build an ",(0,i.jsx)(s.strong,{children:"interactive documentation"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Introducing Slash",src:t(51374).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The Docusaurus philosophy is akin to the ",(0,i.jsx)(s.strong,{children:"Pareto principle"}),": you can get ",(0,i.jsx)(s.strong,{children:"80% of the results"})," for ",(0,i.jsx)(s.strong,{children:"20% of the effort"}),". This enables you to compete with top-notch documentation sites with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),"."]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/rachelnabors/status/1452697991039660038",handle:"rachelnabors",name:"Rachel Nabors",job:"Former ReactJS & React-Native docs manager",children:(0,i.jsx)(s.p,{children:"Unless you're spinning up a documentation team with engineering resources, you\nprobably want Docusaurus!"})}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus aims to be the ",(0,i.jsx)(s.strong,{children:"best documentation tool"}),", but you can use it for ",(0,i.jsx)(s.strong,{children:"other use-cases"})," as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/johnny_reilly/status/1551861926334025728",handle:"johnny_reilly",name:"Johnny Reilly",job:"Group Principal Engineer at Investec",children:(0,i.jsx)(s.p,{children:"Using Docusaurus for my tech blog has been a fantastic choice. It looks\ntremendous out-of-the-box and the awesome DX means I write way more"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Try Docusaurus now with our ",(0,i.jsx)(s.a,{href:"/docs/playground",children:"online playgrounds"})," and ",(0,i.jsx)(s.a,{href:"https://tutorial.docusaurus.io/",children:"5 minutes tutorial"})," \u23f1\ufe0f"]})}),"\n",(0,i.jsx)(s.h2,{id:"the-story-behind-docusaurus",children:"The story behind Docusaurus"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus was created at ",(0,i.jsx)(s.strong,{children:"Facebook Open Source"})," in ",(0,i.jsx)(s.strong,{children:"2017"})," (now ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),"). We had a lot of internal and open source projects to document. It's ",(0,i.jsx)(s.strong,{children:"complicated enough to write good documentation"}),", let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to ",(0,i.jsx)(s.strong,{children:"focus on the content"}),", and ",(0,i.jsx)(s.strong,{children:"Markdown"})," is great for that."]}),"\n",(0,i.jsxs)(s.p,{children:["At that time, our solution was to ",(0,i.jsx)(s.strong,{children:"copy/paste a Jekyll template"})," over and over again. This naturally became ",(0,i.jsx)(s.strong,{children:"hard to maintain"}),", so we created a tool to ",(0,i.jsx)(s.strong,{children:"solve our own pain"})," once for all."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.a,{href:"/blog/2017/12/14/introducing-docusaurus",children:"Docusaurus v1 was born"}),"!"]})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Birth of Slash",src:t(17424).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as ",(0,i.jsx)(s.a,{href:"https://prettier.io/",children:"Prettier"}),", ",(0,i.jsx)(s.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,i.jsx)(s.a,{href:"https://archive.reactnative.dev/",children:"React-Native"}),", ",(0,i.jsx)(s.a,{href:"https://katex.org/docs/",children:"KaTeX"}),", and of course ",(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:"Docusaurus v1"})," itself."]}),"\n",(0,i.jsx)(d.Gl,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsx)(s.p,{children:"Notice that the sample sites above use different colors, but still look quite the same."})}),"\n",(0,i.jsx)(s.h2,{id:"toward-docusaurus-20",children:"Toward Docusaurus 2.0"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v1"})})," has been very successful, but we started to ",(0,i.jsx)(s.strong,{children:"question some architectural choices"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React was only used as a ",(0,i.jsx)(s.strong,{children:"server-side templating language"}),", and not used on the client"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming system was pretty limited"}),", and apart from changing a few colors with CSS, it was difficult to do more advanced customizations"]}),"\n",(0,i.jsxs)(s.li,{children:["The ",(0,i.jsx)(s.strong,{children:"docs versioning system was confusing"}),", since it was based on a diff algorithm"]}),"\n",(0,i.jsxs)(s.li,{children:["The codebase was ",(0,i.jsx)(s.strong,{children:"monolithic"}),", neither well-tested nor easy to extend"]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v2"})})," was ",(0,i.jsx)(s.strong,{children:"rebuilt"})," from the ground up with a new ",(0,i.jsx)(s.strong,{children:"modular architecture"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React is now also used on the client, enabling a ",(0,i.jsx)(s.strong,{children:"modern Single Page Application navigation"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Plugins"})," empower the community to contribute useful features as third-party packages"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming"})," is more ",(0,i.jsx)(s.strong,{children:"flexible"})," than ever"]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning is now based on snapshot copies, much easier to understand"}),"\n",(0,i.jsxs)(s.li,{children:["We kept ",(0,i.jsx)(s.strong,{children:"everything good from v1"}),": docs, blog, pages, versioning, i18n..."]}),"\n",(0,i.jsxs)(s.li,{children:["We implemented ",(0,i.jsx)(s.strong,{children:"several new features"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["More details in the ",(0,i.jsx)(s.a,{href:"/blog/2018/09/11/Towards-Docusaurus-2",children:"Docusaurus 2 project announcement"})," and ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/migration",children:"v1 to v2 migration guide"})]}),"\n",(0,i.jsx)(s.h2,{id:"who-uses-docusaurus-20",children:"Who uses Docusaurus 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["Despite being in pre-release, it didn't take long for ",(0,i.jsx)(s.strong,{children:"Docusaurus v2 to outgrow Docusaurus v1"})," in terms of NPM downloads:"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,i.jsx)(s.img,{alt:"NPM downloads: v2 outgrows v1",src:t(53025).Z+"",width:"1200",height:"645"})})}),"\n",(0,i.jsx)(s.p,{children:"Our GitHub star trend is very positive, competing with major frameworks:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline",children:(0,i.jsx)(s.img,{alt:"GitHub stars: Docusaurus is well-positioned",src:t(6255).Z+"",width:"1200",height:"759"})})}),"\n",(0,i.jsx)(s.p,{children:"Today, Docusaurus v2 has already been a great success even before its launch:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["We received so many ",(0,i.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"lovely testimonials"})]}),"\n",(0,i.jsxs)(s.li,{children:["Companies like ",(0,i.jsx)(s.a,{href:"https://blog.1password.com/docusaurus-documentation-framework/",children:"1Password"})," and ",(0,i.jsx)(s.a,{href:"https://www.courier.com/blog/how-we-built-our-documentation/",children:"Courier"})," are writing down their positive experience"]}),"\n",(0,i.jsxs)(s.li,{children:["Our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})," references hundreds of sites, and this is only the tip of the iceberg."]}),"\n"]}),"\n",(0,i.jsx)(d.qg,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Please add your site to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"}),"! It only takes a few seconds: just ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/7826",children:"post a comment here"}),"."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/maxlynch/status/1549415692704825346",handle:"maxlynch",name:"Max Lynch",job:"Ionic co-founder and CEO",children:(0,i.jsx)(s.p,{children:"We use Docusaurus everywhere now and love it"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/supabase/status/1328960757149671425",handle:"supabase",name:"Supabase",job:"Open Source Firebase alternative",children:(0,i.jsx)(s.p,{children:"We've been using V2 since January and it has been great"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/gabrielcsapo/status/1415061312917233665",handle:"gabrielcsapo",name:"Gabriel Csapo",job:"Staff Software Engineer at LinkedIn",children:(0,i.jsx)(s.p,{children:"Docusaurus is next level easy for literally everything you would need for\ndocumentation in your project."})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/ItWasMattGregg/status/1526682295075102721",handle:"ItWasMattGregg",name:"Matt Gregg",job:"Senior Front End Developer at Shopify",children:(0,i.jsx)(s.p,{children:"Docusaurus is awesome. We use it"})}),"\n",(0,i.jsx)(s.h2,{id:"whats-new-in-20",children:"What's New in 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the ",(0,i.jsx)(s.strong,{children:"most impactful"}),"."]}),"\n",(0,i.jsx)(s.h3,{id:"mdx",children:"MDX"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://github.com/mdx-js/mdx",children:"MDX"})," allows you to ",(0,i.jsx)(s.strong,{children:"interleave React components"})," in Markdown. This enables you to build top-notch ",(0,i.jsx)(s.strong,{children:"interactive documentation experiences"})," very easily."]}),"\n",(0,i.jsx)(s.p,{children:"A demo is worth a thousand words:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-md",metastring:'title="docs/my-document.mdx"',children:"### Give it a try: press that button!\n\nimport ColorModeToggle from '@theme/ColorModeToggle';\n\n<ColorModeToggle/>\n"})}),"\n",(0,i.jsxs)(r.Z,{children:[(0,i.jsx)("h3",{children:"Give it a try: press that button!"}),(0,i.jsx)(c.Z,{})]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["MDX has its own ",(0,i.jsx)(s.a,{href:"https://mdxjs.com/docs/extending-mdx/",children:"plugin system"}),". You to customize your Markdown authoring experience, and even create your own Markdown syntax."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/HamelHusain/status/1551962275250053123",handle:"HamelHusain",name:"Hamel Husain",job:"Head Of Data Science at Outerbounds",children:(0,i.jsx)(s.p,{children:"Docusaurus + MDX is great: we were able to implement a beautiful two-pane\nlayout and give the author fine-grained control on the placement of code and\ncorresponding prose."})}),"\n",(0,i.jsx)(s.h3,{id:"file-system-conventions",children:"File system conventions"}),"\n",(0,i.jsxs)(s.p,{children:["Our goal is to make Docusaurus very ",(0,i.jsx)(s.strong,{children:"intuitive"})," to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file."]}),"\n",(0,i.jsx)(n.Z,{id:"T3S8GyFIXjo",params:"autoplay=1&autohide=1&showinfo=0&rel=0",title:"Explain Like I'm 5: Docusaurus",poster:"maxresdefault",webp:!0}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/paularmstrong/status/1552005085168865281",handle:"paularmstrong",name:"Paul Armstrong",job:"Principal Engineer at Microsoft",children:(0,i.jsx)(s.p,{children:"Using the auto-generated sidebars makes it so simple to just create a page and\nnot worry about any other configuration."})}),"\n",(0,i.jsx)(s.h3,{id:"plugins",children:"Plugins"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus now has a ",(0,i.jsx)(s.strong,{children:"modular architecture"})," with a plugin system \u2014 our ",(0,i.jsx)(s.strong,{children:"core features"})," like docs, blog, pages, and search are all powered by individual plugins."]}),"\n",(0,i.jsxs)(s.p,{children:["More importantly, it enables our community to ",(0,i.jsx)(s.strong,{children:"enhance Docusaurus"})," with additional features."]}),"\n",(0,i.jsx)(s.p,{children:"Let's highlight some examples:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"}),": seamless integration with ",(0,i.jsx)(s.a,{href:"https://www.openapis.org/",children:"OpenAPI"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/Redocly/redoc",children:"Redoc"})]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"redocusaurus plugin example",src:t(63692).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash",children:"docusaurus-preset-shiki-twoslash"}),": use ",(0,i.jsx)(s.a,{href:"https://github.com/shikijs/shiki",children:"Shiki"})," code block syntax highlighting with ",(0,i.jsx)(s.a,{href:"https://shikijs.github.io/twoslash/",children:"TwoSlash"})," TypeScript compiler hints"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"shiki-twoslash plugin example",src:t(99486).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/orta",handle:"orta",name:"Orta Therox",job:"Former TypeScript core team at Microsoft",children:(0,i.jsx)(s.p,{children:"The plugin API was a breeze to use, and powerful enough that I could port the\ncode sample renderer from the TypeScript website site in a couple of hours."})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"docusaurus-search-local"}),": one of the various local search alternatives to the built-in Algolia plugin"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"local search plugin example",src:t(22355).Z+"",width:"1200",height:"627"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["We have a curated list of outstanding plugins in our ",(0,i.jsx)(s.a,{href:"/community/resources",children:"community resources"})," page."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/jodyheavener/status/1551974535452311552",handle:"jodyheavener",name:"Jody Heavener",job:"Senior Developer at 1Password",children:(0,i.jsx)(s.p,{children:"The plugin system in Docusaurus v2 has made expanding 1Password's developer\nportal so easy and fun. Super excited to show you what we've got cooking up."})}),"\n",(0,i.jsx)(s.h3,{id:"theming",children:"Theming"}),"\n",(0,i.jsxs)(s.p,{children:["Theming is one of the most important features of Docusaurus: we believe a professional documentation site should ",(0,i.jsx)(s.strong,{children:"respect your company's branding"})," and create a consistent experience."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus theming gives a lot of ",(0,i.jsx)(s.strong,{children:"flexibility"})," on multiple levels:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Customize CSS variables to adjust colors, fonts, and more"}),"\n",(0,i.jsx)(s.li,{children:"Provide your own CSS stylesheets"}),"\n",(0,i.jsx)(s.li,{children:"Implement your own theme from scratch"}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Override any React component"})," provided by our default theme: we call this ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/swizzling",children:"swizzling"})]}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/hung_dev/status/1546918275065741312",handle:"hung_dev",name:"\nHung Viet Nguyen",job:"Creator of JestPreview",children:(0,i.jsx)(s.p,{children:"I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\ntime. This is super cool since a framework usually needs to sacrifice one for\nthe other."})}),"\n",(0,i.jsxs)(s.p,{children:["This enables users willing to invest a bit more time on ",(0,i.jsx)(s.strong,{children:"customizations"})," to build sites that ",(0,i.jsx)(s.strong,{children:"look different"})," from others."]}),"\n",(0,i.jsx)(d.cQ,{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/dabit3/status/1382855449813389315",handle:"dabit3",name:"Nader Dabit",job:"Web3 developer, Developer DAO founder",children:(0,i.jsx)(s.p,{children:"So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\nway that we wanted it to look. No blockers at all."})}),"\n",(0,i.jsx)(s.h3,{id:"other-features",children:"Other features"}),"\n",(0,i.jsx)(s.p,{children:"Docusaurus 2 comes with a very long list of useful features:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Theme: dark mode, better UI and UX, flexible ",(0,i.jsx)(s.code,{children:"themeConfig"})," options..."]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning: flexible plugin options to adapt to your workflow"}),"\n",(0,i.jsx)(s.li,{children:"Docs sidebar: collapsible category, category index pages..."}),"\n",(0,i.jsx)(s.li,{children:"Blog: multiple authors, authors map, archive page..."}),"\n",(0,i.jsx)(s.li,{children:"Markdown: tabs, math equations, live code blocks, linking, flexible front matter..."}),"\n",(0,i.jsx)(s.li,{children:"Search: use the new Algolia DocSearch 3 experience"}),"\n",(0,i.jsx)(s.li,{children:"Assets: make it easy to incorporate images and other kinds of files"}),"\n",(0,i.jsx)(s.li,{children:"Internationalization: config options, default theme translations..."}),"\n",(0,i.jsx)(s.li,{children:"Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement..."}),"\n",(0,i.jsx)(s.li,{children:"SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang..."}),"\n",(0,i.jsx)(s.li,{children:"PWA: add offline support to your site, and make it installable"}),"\n",(0,i.jsx)(s.li,{children:"Fail-fast: strict config validation, detect broken links, and prevent bad production deployments"}),"\n",(0,i.jsx)(s.li,{children:"TypeScript support for config files, plugins, custom pages and theme authors"}),"\n",(0,i.jsxs)(s.li,{children:["Playgrounds: assess Docusaurus easily from your browser with ",(0,i.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(s.li,{children:"Canary releases: use the @canary npm tag to use the upcoming release before anyone else"}),"\n",(0,i.jsx)(s.li,{children:"Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working"}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/alexbdebrie/status/1540010328335032320",handle:"alexbdebrie",name:"Alex DeBrie",job:"AWS Data Hero, author of The DynamoDB Book",children:(0,i.jsx)(s.p,{children:"Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\na good bit of configuration without being overwhelming, and the ability to\nreally customize the styling if you're braver than I am."})}),"\n",(0,i.jsx)(s.h2,{id:"why-20-now",children:"Why 2.0 now?"}),"\n",(0,i.jsxs)(s.p,{children:["Many enthusiastic followers of ours have been curious ",(0,i.jsx)(s.strong,{children:"why it took us 4 years to release Docusaurus 2.0"}),", considering the beta is already successful and ",(0,i.jsx)(s.strong,{children:"widely used in production"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["The reason is that we aim to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]}),", which means we will be incrementing the major version number whenever we release a ",(0,i.jsx)(s.strong,{children:"breaking change"}),"."]}),"\n",(0,i.jsx)(s.p,{children:"It is important for multiple reasons:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["It ",(0,i.jsx)(s.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,i.jsx)(s.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,i.jsx)(s.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,i.jsx)(s.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["The problem is that our flexible theming system inherently creates a very ",(0,i.jsx)(s.strong,{children:"implicit API surface"})," on which it is ",(0,i.jsx)(s.strong,{children:"hard to know what is a breaking change"})," in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"}),", so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["From now on, Docusaurus will ",(0,i.jsx)(s.strong,{children:"release new major versions more frequently"}),". In practice, you can expect a ",(0,i.jsx)(s.strong,{children:"new major version every 2 to 4 months"}),"."]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]}),(0,i.jsxs)(s.p,{children:["Check our ",(0,i.jsx)(s.a,{href:"/community/release-process",children:"release process"})," documentation for details."]})]}),"\n",(0,i.jsx)(s.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash Up and Running",src:t(65228).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will ",(0,i.jsx)(s.strong,{children:"backport retro-compatible changes in Docusaurus 2.x"})," minor versions to make them available as soon as possible to the community on a stable channel."]}),"\n",(0,i.jsx)(s.p,{children:"A sample of the features on our roadmap for the upcoming major versions of Docusaurus:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4029",children:"Upgrade to MDX 2.0"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4625",children:"Improve Markdown infrastructure"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6114",children:"Improve theming and swizzle"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2961",children:"TailwindCSS theme"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/7227",children:"Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4389",children:"Dynamic navbar: navbar item activation strategies"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2968",children:"Custom Social Cards"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3236",children:"CSS-in-JS support"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6520",children:"Use Node.js ES Modules"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"Improve build time performance"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4138",children:"Extend Docusaurus plugins, CMS integration"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"thank-you",children:"Thank You"}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"all our contributors"}),", including:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["The Docusaurus core team: ",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," and all our ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/community/team",children:"former team members"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/zpao",children:"Paul O\u2019Shannessy"})," for supporting the development of all the next versions of Docusaurus at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})," for creating our cutest mascot Slash"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," for his significant ",(0,i.jsx)(s.a,{href:"/blog/2020/01/07/tribute-to-endi",children:"initial work on Docusaurus v2"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/shortcuts",children:"Cl\xe9ment Vannicatte"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Shipow",children:"Kevin Granger"})," and the whole Algolia team for their support"]}),"\n",(0,i.jsxs)(s.li,{children:["All the community members for making valuable code contributions, improving our documentation, and answering questions on ",(0,i.jsx)(s.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to thank in particular all our ",(0,i.jsx)(s.strong,{children:"Docusaurus 2.0 early adopters"})," for assessing its alpha, beta and canary releases, providing a ton of ",(0,i.jsx)(s.strong,{children:"invaluable feedback"}),". We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0."]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),", Docusaurus is one of our ",(0,i.jsx)(s.strong,{children:"most successful projects"}),". We can't wait to see all the outstanding documentation websites that you will create! Don't forget to ",(0,i.jsxs)(s.strong,{children:["submit them to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})]}),"!"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Now, let your imagination run wild \ud83e\udd2a!"})}),"\n",(0,i.jsx)(s.p,{children:"\u2014 Slash"}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsx)(s.p,{children:"\ud83d\ude4f Share your experience using Docusaurus with the community!"}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash plushies",src:t(97531).Z+"",width:"1332",height:"1331"})})]})}function w(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},759:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/babel.cbc364a.640.png 640w,"+t.p+"assets/ideal-img/babel.3669cfa.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/babel.cbc364a.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/babel.3669cfa.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/babel.cbc364a.640.png",toString:function(){return t.p+"assets/ideal-img/babel.cbc364a.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AHW3yo+qtZWouZOjuZCTupGGu4yEuoKCt3yHsnCOwQDI2OD07urj4uHc29ns6+fy8+3y8+3s7Oj18enC0+UA1ODq/vz78vP06+vu8PDz9PT38/P39/f5////0dbpANjf6f/9/Pj28fDs4PXy6P767/757v359P///+TH1wDb3ej4/Pv1+PPw8eb1+O31+Oz1+ez4+/b+///vwMwA1p7J1Zuk2JSQ1oZ71IB01Htx1nhv23lw3Xxy5m11yK+UrA2JDh4AAAAASUVORK5CYII="}},92037:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png 640w,"+t.p+"assets/ideal-img/docusaurus.ba4280f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/docusaurus.ba4280f.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/docusaurus.2ad1782.640.png",toString:function(){return t.p+"assets/ideal-img/docusaurus.2ad1782.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAwUlEQVR4nBXJPQuCQBgA4PvBQWE4CEFBSwQhRG1KU1M/oYYCzaCGCLIPjb4uQ++6pNOztHqjZ32QPFk0LbM1MtW+0eiZDX1c18ZV3VD0QV63kLU7xSL0yPnkbRn3aHQJxZVGPhdkaF/Q8kgAIIkfd4pf4p4m4Tfjn3cKAPOlj1zM/p1wEhzYDYcMC+5/MwEA2Fqhw/nf4skD4gTUpbd9FOPsHX0A2HCGVp2prXU3bXVdU+yKtC5LTqngKnm3VPRy8g+/UpX4n6rSEgAAAABJRU5ErkJggg=="}},91551:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/katex.2b3ecc9.640.png 640w,"+t.p+"assets/ideal-img/katex.91ac937.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/katex.2b3ecc9.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/katex.91ac937.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/katex.2b3ecc9.640.png",toString:function(){return t.p+"assets/ideal-img/katex.2b3ecc9.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAv0lEQVR4nAXB3wrBUBwA4PPAaiHSduOGG4UiV0rIC3gCNwqToraz5d8K46zNzraznbMxP9+HqqrV3eiDldFfmp252Z4arQluTLA83UnjA1pfbJFxQv2n51LOaMbiXPgiiri/wARplgP5N04S50VCSlkY8ThJRQYAe40gwyIAOWPMth9vzw0CGoZBygUA3FYYna4kB6Asvr8c4r1dGkQiFZ/vD8BfbBEeqfpwZva6elPW6mVNKeKadKxJZ6VkFyp/r/+XglW08JQAAAAASUVORK5CYII="}},49911:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/prettier.0987194.640.png 640w,"+t.p+"assets/ideal-img/prettier.ac62bde.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/prettier.0987194.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/prettier.ac62bde.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/prettier.0987194.640.png",toString:function(){return t.p+"assets/ideal-img/prettier.0987194.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAvklEQVR4nDXCzwvBUBwA8PcHO6yWQktIK0kcnJRc5OIosZ1wkXKRNjYchmbzY794tnnv7SsHnz6IGy6rfbnWkyqdkViXxJJULspCYcyXB6naDM23Bvac4+mk69rFNv2n6z9dx7uzOJiuTaQYNwCGo4gwBn+MJQCwUm2kGVegJMD4FYaUEEbp74cAwHm+QfrBihnx8Nt6uO4Le/gdhHFEaALgTJZIaS+UVldrNlQxqxbTmzy/zXG7DLcXeDOV/gIPyZWv09LiSwAAAABJRU5ErkJggg=="}},45058:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.e8025ec.640.png 640w,"+t.p+"assets/ideal-img/react-native.8cebf9a.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.e8025ec.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/react-native.8cebf9a.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/react-native.e8025ec.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.e8025ec.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AGisw32brIaZrYCSqn2EroB1rX52r5eYzoGMumSBtwC8ztfm4uHZ2dnLy8rP0c/i49/q6+f4+fX/+/S7zN8Az9zl+/n38vP04uTm6enq7O3u7Ovt9vb3////0NXpANDY4vXz8vHx8efm5+zr6vPy8vTz8vv4+f///+PG1wDY2+b3+/ni6OnO1djY3d/d4uTb4OPu8fL////uwMwA1p7J1pylzYiFvW5iu2dcu2NZulxUz2tk33505mx04r2PDpDiiAMAAAAASUVORK5CYII="}},97814:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/courier.e9b71f4.640.png 640w,"+t.p+"assets/ideal-img/courier.f8addf0.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/courier.e9b71f4.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/courier.f8addf0.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/courier.e9b71f4.640.png",toString:function(){return t.p+"assets/ideal-img/courier.e9b71f4.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AIyt27SXz7ud17eW2bGD269z3qhv3p5x3ZJw2X1+2gDIyeH52u/XwdTDq8LRu8/SvdLQu9Hm1+j/8//EzewAz9ro+/j+3dzizczR1NPY19XbxMHIxLzH49/hvb7XANTW5/ft+Pr3+//+/v39/f///8S+xUIjSS8XPIZdfwDW1ub39v3y9Pju8fTy9vj///+4uMImFDceEjeUVXkA1pzJ1Jej2JKO2IZ61oB024B1zGpjrUNDrERE11Vl8lGDEKxF5owAAAAASUVORK5CYII="}},29743:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/datagit.98630dd.640.png 640w,"+t.p+"assets/ideal-img/datagit.afeea1f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/datagit.98630dd.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/datagit.afeea1f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/datagit.98630dd.640.png",toString:function(){return t.p+"assets/ideal-img/datagit.98630dd.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtElEQVR4nB3MSwtBQRiH8fm+SkoSycLOykI2ZOUb2CqxILlEJ5dDlFyaFIccnZk5877zF+un3yMah3B+UytpvJOZLsykb0Y90+urzjCstaVYyhcAdg6Ati6M6RFGlhiIB/5d+JcnAGMptsTETKyUUTomsjNPisP1l91fR5rfEQdvzUQAzsO1OJ4DAIqcIheR+1j3+Gj9vwfdidg0x+t6a1ut7MoFv5Txi+ldLrXPJvf5lEykv9L2nupSFk8xAAAAAElFTkSuQmCC"}},42431:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/dyte.b411d0a.640.png 640w,"+t.p+"assets/ideal-img/dyte.9d967ec.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/dyte.b411d0a.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/dyte.9d967ec.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/dyte.b411d0a.640.png",toString:function(){return t.p+"assets/ideal-img/dyte.b411d0a.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAvElEQVR4nCXJPQ/BQBgA4Pu9FqSDIBKjicFmEIPERmwkWCQkREvQpr4SJK7otb1DtXp3r4hnfVBhZrfmZHpg6uGpLkJt+BkP/H6PNjqs2LyhWmfZ7por82RZl3foCxBSSi4iABgaDlJ3FucCM/9IGKYv2/+QgLNAAIC2xEjfYwBJXM/1vIj/CcF/fR7paLO3JIBD6eVuXx2XsAd9B2H0e2cwRUZ1olfqZrlkFrLrvGLklE06sUvFt5kkjilfulmaxNksu3AAAAAASUVORK5CYII="}},97314:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png 640w,"+t.p+"assets/ideal-img/hasura.226d6d3.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/hasura.226d6d3.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/hasura.e4f3ebd.640.png",toString:function(){return t.p+"assets/ideal-img/hasura.e4f3ebd.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFqhu2SFmW2FnGR7l2Bpl2Fcl1pXk1dblk1lm1N7tgBGXm0VGyImLjUhKC0cJCgdJykbJSYWHyERHB0sSGIASl1sGSIqJi81KzI4KDA1JCsxJSwyISkvGiAiOUJZAFJgbxwkLCYuNiUtNR8nLiIqMh8mLiQqMhooLk42TABOWWkPHSUbKTMgMkEcLTsjNEEdMD4hMD4XNEFYMUUAtn6soWhzqmZjqFpPplJIqFBHqElCq0lCp0hAxUpUim0yiR9LFnEAAAAASUVORK5CYII="}},31256:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/ionic.7f10b53.640.png 640w,"+t.p+"assets/ideal-img/ionic.cd19b49.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/ionic.7f10b53.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/ionic.cd19b49.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/ionic.7f10b53.640.png",toString:function(){return t.p+"assets/ideal-img/ionic.7f10b53.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJbY7s3o99Xo+tPk+8DK/MbA+ci/98HB98DM+Ji26gDK3ej//Pzy8vLs6+rn6u74+vn////x8u/w7OXE1uoA0d7p////7u/w4uPm6Ojq7e7z8/T309PW19fWub7UANTd6P/+/vj4+Pj4+fr6/Pr7/fb3+tve5/3//tCzxADZ3en8///0+Pn1+vv2+/v2+/vz+fvO2ef3///crLoA1ZzJ1Zqj2ZSP2ol814F12H1z2Hhv1HFq23lw42ZvKQ2aZPs/3GIAAAAASUVORK5CYII="}},10712:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png 640w,"+t.p+"assets/ideal-img/outerbounds.17abaf6.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/outerbounds.17abaf6.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png",toString:function(){return t.p+"assets/ideal-img/outerbounds.7fa8be7.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwklEQVR4nAXBPWvCQBgA4Pu7UhQsUh2Kk2sXF8Ghkz/BqdqCIBkUbf1Ag5GKaFsjyZ2X+3ovd+bt85BuxD9jszip6T6bzPVsBMFQfLzzt/Gt0/8jy3OCWFCasvSaZdR7i17fnUSEIIzJ4vvi81xIBZAbcNY6kMIIgd5MZ0eyin6cBSU1ZTJOtFRWcXZLWYH5cfRFosO1QJQGuJBCG3COZYIybhGTQUDC18mm2wvbL5vW07pZ3T5Xw3p5V3vYNSq/pcd/0kecLyndd98AAAAASUVORK5CYII="}},13296:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/quickwit.aae4257.640.png 640w,"+t.p+"assets/ideal-img/quickwit.e851c05.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/quickwit.aae4257.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/quickwit.e851c05.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/quickwit.aae4257.640.png",toString:function(){return t.p+"assets/ideal-img/quickwit.aae4257.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFyguGaElrfL3djp/8zP+MvA98e99b7C97yt3pmd1QBLYG0jIii6u77x7+3s7On+//z+/fr8/vz/9/PHy+EAVWRzKCszvb/C6uvr4ODi7+7w8vHz8vL0////ztToAFxmdSkrM7/Bw/Ty8ujo6Ors6/T09P38/P///+PF1QBXXW0bIyu4vcDk7OzZ3+Dc4eLn7e72+fr9///uvssAuYCtpGl0zYeD2Ip70n1x13xy13du2XVs3Hpx52tzWcaFkyvPIw8AAAAASUVORK5CYII="}},48426:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.9ad7a23.640.png 640w,"+t.p+"assets/ideal-img/react-native.02f5343.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.9ad7a23.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-native.02f5343.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-native.9ad7a23.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.9ad7a23.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGaqwXuXqIWWqoKSqoKEroN1rYF2rXVzq32Jt22MwAC/0drp4uDF0NSpvcS+0dTI3N6909nQ3N789+++0eQA0+Dp///90urysdjlttrmuN3rpsXg0+Xw////ztPoANTc5vv5+PTy8ejk5O3p6fn19fz39f36+f///+PG1QDZ3Of09/bv8/Xq7/Hz+Pr0+vv0+vz5/Pz9///uvssA1p3J05eh1Y+L1IN22YN32X9023px3Hhv23pw52pzwqeO97QIzhcAAAAASUVORK5CYII="}},58155:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/figma.e023b25.640.png 640w,"+t.p+"assets/ideal-img/figma.4b79b06.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/figma.e023b25.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/figma.4b79b06.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/figma.e023b25.640.png",toString:function(){return t.p+"assets/ideal-img/figma.e023b25.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHCswX+aqIearISVrH6Cq4F3rn93r3V1rG54pmeFuQDC09zu6ebp5+fl5OTo6OXu7+rx8ezr7Ojz7+e8zuEA0d7o///++fn65+fo9fX1+Pj5+Pj5/Pz9////0NToANXd5/z6+Pf39+Xk4+Ph5ePi5urp6vv5+f///+PF1QDe4ez////z+Pnf4+rg5O7m6/Hr8fP5/Pz9///uvssA157K1pqk2ZOO1YN50nxz1Xtw2Hdu3Hdv3Hpw52pyiw2SNplStDwAAAAASUVORK5CYII="}},9258:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/gulp.645374a.640.png 640w,"+t.p+"assets/ideal-img/gulp.f298c97.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/gulp.645374a.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/gulp.f298c97.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/gulp.645374a.640.png",toString:function(){return t.p+"assets/ideal-img/gulp.645374a.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJG2zL6ls8OmuMGiubuLs7x9tLd7s7F+taR/rIeGugDU3eb/8/D97+7/8e/97en45N/76eX57On/6+PBx9oA0N/o8fPz7fDy7fDx8fT1/P7++fT189/i////ztLmANHY4u/r6vDu7+/t7fXz8//+/vrt7vXY2v///+PE1QDg4+7////9/v7+///8/v729/j3+/v2+fr4///ru8gA153J1pqj25SQ2ol82IF12X5z2npw3Hdu3Hpw52py1S6WZvfndWMAAAAASUVORK5CYII="}},44827:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/iota.95754da.640.png 640w,"+t.p+"assets/ideal-img/iota.117672c.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/iota.95754da.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/iota.117672c.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/iota.95754da.640.png",toString:function(){return t.p+"assets/ideal-img/iota.95754da.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFOYtVZ2j111kl1zlFpilVtVl09LjkhLjEJSi05uqgA0TWYSGC8lLkQTGzELFy0IFCknOEsoOk4FDSAmQmUAO1BoGyU7NURYHTJIEh83DBQsZJGpbJeuBQ8lSUZpAEBPZwYRJw8qPRVDUwwWLR4sQUpvkUhoihAhNFQxUQA7Rl8ABx0DESgADSUCEigNHjQRJkIVJ0MAGCxJITwAs3uqnWNypmNjpFZOpVJKo0xFoUI8pEE8oUJAxEhVk18yaV+3uG0AAAAASUVORK5CYII="}},11342:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png 640w,"+t.p+"assets/ideal-img/lacework.33303f9.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/lacework.33303f9.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/lacework.dfc8aa5.640.png",toString:function(){return t.p+"assets/ideal-img/lacework.dfc8aa5.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AIzU7rnd78Te8cHa8b7I87+69ri19ayx8qCy7oao5wCd1eWz3eO94OTI5eXM6/K43/+bw/6Bqfxji/xTgOoAt93q1/b53PX65fr83/T7zuT8vdT8rMT6nrj/hpzmAN3k7vTw8PLw8Pv6+vHv8P/+/Pn29fXw7P///uTH1gDe4ezx9/bx9vj2+/zw9vj3/f7x9/nq7/Pz///pu8kA153J0JWf1pCN2IZ60ntv1ntw13dt1G9n13Vr52pzffeTuLcnN78AAAAASUVORK5CYII="}},70054:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-navigation.1b40364.640.png 640w,"+t.p+"assets/ideal-img/react-navigation.a6b28c6.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-navigation.1b40364.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-navigation.a6b28c6.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-navigation.1b40364.640.png",toString:function(){return t.p+"assets/ideal-img/react-navigation.1b40364.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJna8c3n9tLl99Hh+c3Q+czC+cjA+L+/9bfC8JWz6QDN3u728Pjw7/j29Pz19fv09fr29/zz8/n69vjC1O4Aydfr3dzu2Nrp19fkzc7gzs/g29znxMXitbbevsTiAMzU6c/O7NHR5+Xk7c/O3aWkt+bl7bOy2Kyx29W30wDKzujQ1fHR1vHb4PXZ3/LT1+za4PXP1O/R4Pnaq8gA0pjHz5Oi1I6P1YR71H901Xtz1HNv1XFu1HNv4mVyADiS2eC63VAAAAAASUVORK5CYII="}},42444:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png 640w,"+t.p+"assets/ideal-img/sap-cloud.312bf29.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/sap-cloud.312bf29.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png",toString:function(){return t.p+"assets/ideal-img/sap-cloud.f57d7fa.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJjT3Mzc1NLa1tDW2M7F186318i12MG217q50Zas1ADUrU3/pgD8pwv+rBD/uC//uTD/rxH9rQ3/rQDHokwA2bRi/7Ie/bkx/7Yq9rxT9rtS/7Yt/bUx/7QezqJbANzk7P///8XHyN7g4f//+f///dLPyNzZz////+PF1ADf4+7////N2NzW5Ob7///5/v/U3dTV2sr6///uvssA153K0JWe15CK14R2035y1Hlu1HRs1nJr13Vr52pyn7CEdE5qo0kAAAAASUVORK5CYII="}},11937:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/snapchat.5f28663.640.png 640w,"+t.p+"assets/ideal-img/snapchat.39e00a7.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/snapchat.5f28663.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/snapchat.39e00a7.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/snapchat.5f28663.640.png",toString:function(){return t.p+"assets/ideal-img/snapchat.5f28663.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHGztIijj5GjlYydlIqNkYqAk4Z9lYCAlnJ9iGiGpQDQ2Er96gDz5wP26QDv5RHw5xD47QD26wP/7wDAykgAr7dRwbcEvrcSwLYLvLMWurQWv7gQv7cQxLsFpqZLAD9IY19YEVtVGxUiNy0oMDQ0LTA+PxwZIhkeI1E0SgBITFs2OB44OiggLC8mLSovLSwoLSskKSwbKytaLDkAuH2ppGl3q2ZlrlxPqlRJqE9Fq0pDsk1ErkxDx0pT21lMrI2uNt0AAAAASUVORK5CYII="}},44102:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/solana.8bcac78.640.png 640w,"+t.p+"assets/ideal-img/solana.e7c1e4f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/solana.8bcac78.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/solana.e7c1e4f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/solana.8bcac78.640.png",toString:function(){return t.p+"assets/ideal-img/solana.8bcac78.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJfa783n9dXo+c/g9szP98zB98i/98C+9LfC7pa06QDS5e3+/Pj7+/r8/Pr2+vX7/vr8/fr2+/b///vH2e4A1eLs9Pb08fT09PX26/Dw9vb38vL06/Dx/f38zNHlAN3l7v////z+/v7+//3+/v////7//v39/f///+PG1wCcoKuWmZiVmZqWm5yXm5yVmZqWm5yWmZuRnp2qfIgAsXejmF1noFlUolBDnkk8nUM4oUA3oj41njwywENMFZ6NFBzee74AAAAASUVORK5CYII="}},33339:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png 640w,"+t.p+"assets/ideal-img/stackblitz.786829d.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/stackblitz.786829d.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/stackblitz.3a585ac.640.png",toString:function(){return t.p+"assets/ideal-img/stackblitz.3a585ac.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGmswn6ZqIibrISUq4CDrH90qntyqXNzqGl1omaEuADK2+Tx6+ns6unv7evr6+j4+fT5+vXz8/D//fW+z+IA2ebv/v37+Pr79v7/8vX3ysrMv8DDur3B0tbXzdLmAN3m7////fj5+ff//9bv9SEmKwUIDgYNFR0sM9W5yQDLz9nd4uDZ3d7a4ePE1txxen5kbHBka29oeXnRpLEAv4azsHR/uHJuuGdbuGFUwWdbxGNaxmFZw2JY0FRd0wl8G5D7uNgAAAAASUVORK5CYII="}},45785:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/supabase.e96fd5f.640.png 640w,"+t.p+"assets/ideal-img/supabase.f37ca60.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/supabase.e96fd5f.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/supabase.f37ca60.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/supabase.e96fd5f.640.png",toString:function(){return t.p+"assets/ideal-img/supabase.e96fd5f.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFibsGF8iWx/kGd4jmFljWFWjFxUjFhYjU5ZhVRypgBGWGAXEg4jIiEnJiQcHBgZGhUaGhUcHRkZFQ0yRFcAUV5nHx0cKiorLS0tKSkqJyYoKSgpKCgqHx4cPkNXAFdfaB8dGywsLDIxMS0rKyknJzEvLzAuLyMmI1Y4SABVWWMTFxUiJicnLC0hJicdIiMlKywkKCkTISBbLTkAuX+so2dxqmVgqllMp1FFp01Cqkk/rEc+qEY9xkpSZqAv5L+d0r8AAAAASUVORK5CYII="}},11384:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/tauri.7d284be.640.png 640w,"+t.p+"assets/ideal-img/tauri.4852075.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/tauri.7d284be.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/tauri.4852075.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/tauri.7d284be.640.png",toString:function(){return t.p+"assets/ideal-img/tauri.7d284be.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFucsWV/jXCCk2h4kGBljmFXjl9Yk1tbkVBbiFV0qgBFWWMTEhIYGxwuLyQ4ODM0NzMuKhoxNjczNDI5SFcAQ1lmSkM2UUxELTk4S0pKR0hLPzcnQEpYPUpbR0dSAEhWY0ZEOE1HPh4fJTc4PDQ0NyIkKSomIyYmG1w9SwBNUl0PHB4YIicaHyEwNjg0Oz0YHiAkKCcaJyFbLTkAtXypqGt0rWZirVxPpVBDqE1CrExCrUlAqEc+xUlStsQ1Jd2lGVkAAAAASUVORK5CYII="}}}]); \ No newline at end of file diff --git a/assets/js/519fdddf.057c0eb7.js b/assets/js/519fdddf.057c0eb7.js deleted file mode 100644 index 5b58ff205eff..000000000000 --- a/assets/js/519fdddf.057c0eb7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52085],{17623:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var n=s(24246),r=s(71670);const i={unlisted:!0,force_unlisted_parseFrontMatter_test:!0},o="force_unlisted_parseFrontMatter_test",d={id:"tests/visibility/force-unlisted",title:"force_unlisted_parseFrontMatter_test",description:"This doc is hidden despite unlisted: false",source:"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx",sourceDirName:"tests/visibility",slug:"/tests/visibility/force-unlisted",permalink:"/tests/docs/tests/visibility/force-unlisted",draft:!1,unlisted:!0,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{unlisted:!0,force_unlisted_parseFrontMatter_test:!0},sidebar:"sidebar"},c={},a=[];function l(e){const t={code:"code",h1:"h1",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"force_unlisted_parsefrontmatter_test",children:"force_unlisted_parseFrontMatter_test"})}),"\n",(0,n.jsxs)(t.p,{children:["This doc is hidden despite ",(0,n.jsx)(t.code,{children:"unlisted: false"})]}),"\n",(0,n.jsxs)(t.p,{children:["We use ",(0,n.jsx)(t.code,{children:"parseFrontMatter"})," to force it to true thanks to ",(0,n.jsx)(t.code,{children:"force_unlisted_parseFrontMatter_test: true"})]})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>o});var n=s(27378);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/519fdddf.8b47b825.js b/assets/js/519fdddf.8b47b825.js new file mode 100644 index 000000000000..e18d1621d48d --- /dev/null +++ b/assets/js/519fdddf.8b47b825.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52085],{17623:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var n=s(24246),r=s(71670);const i={unlisted:!0,force_unlisted_parseFrontMatter_test:!0},o="force_unlisted_parseFrontMatter_test",d={id:"tests/visibility/force-unlisted",title:"force_unlisted_parseFrontMatter_test",description:"This doc is hidden despite unlisted: false",source:"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx",sourceDirName:"tests/visibility",slug:"/tests/visibility/force-unlisted",permalink:"/tests/docs/tests/visibility/force-unlisted",draft:!1,unlisted:!0,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{unlisted:!0,force_unlisted_parseFrontMatter_test:!0},sidebar:"sidebar"},c={},a=[];function l(e){const t={code:"code",h1:"h1",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"force_unlisted_parsefrontmatter_test",children:"force_unlisted_parseFrontMatter_test"})}),"\n",(0,n.jsxs)(t.p,{children:["This doc is hidden despite ",(0,n.jsx)(t.code,{children:"unlisted: false"})]}),"\n",(0,n.jsxs)(t.p,{children:["We use ",(0,n.jsx)(t.code,{children:"parseFrontMatter"})," to force it to true thanks to ",(0,n.jsx)(t.code,{children:"force_unlisted_parseFrontMatter_test: true"})]})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>o});var n=s(27378);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/520a8178.7b200511.js b/assets/js/520a8178.d9aec79b.js similarity index 56% rename from assets/js/520a8178.7b200511.js rename to assets/js/520a8178.d9aec79b.js index a7792dc319c7..29dc461dcabc 100644 --- a/assets/js/520a8178.7b200511.js +++ b/assets/js/520a8178.d9aec79b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52110],{61132:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),i=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function u({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),i=t(27378),s=t(40624),u=t(75527),o=t(3620),a=t(44479),l=t(62821),c=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function m({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,l._X)(r),u=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,u]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=b(e),[u,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,c]=m({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:p;return f({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:u,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),h(e)}),[c,h,s]),tabValues:s}}var j=t(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){x(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,u.o5)(),c=e=>{const n=e.currentTarget,r=a.indexOf(n),s=o[r].value;s!==t&&(l(n),i(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:c},i),{className:(0,s.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:t}){const u=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=u.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:u.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function P(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(I,w({},n,e))]})}function E(e){const n=(0,j.Z)();return(0,r.jsx)(P,O(w({},e),{children:g(e.children)}),String(n))}},51340:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(24246),i=t(71670),s=t(97555),u=t(61132);const o={sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},a="\ud83d\udce6 plugin-debug",l={id:"api/plugins/plugin-debug",title:"\ud83d\udce6 plugin-debug",description:"The debug plugin will display useful debug information at http3000/docusaurus/debug.",source:"@site/docs/api/plugins/plugin-debug.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects"},next:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-debug",children:"\ud83d\udce6 plugin-debug"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["The debug plugin will display useful debug information at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/__docusaurus/debug",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/__docusaurus/debug"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is mostly useful for plugin authors, that will be able to inspect more easily the content of the ",(0,r.jsx)(n.code,{children:".docusaurus"})," folder (like the creates routes), but also be able to inspect data structures that are never written to disk, like the plugin data loaded through the ",(0,r.jsx)(n.code,{children:"contentLoaded"})," lifecycle."]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If you use the plugin via the classic preset, the preset will ",(0,r.jsx)(n.strong,{children:"enable the plugin in development and disable it in production"})," by default (",(0,r.jsx)(n.code,{children:"debug: undefined"}),") to avoid exposing potentially sensitive information. You can use ",(0,r.jsx)(n.code,{children:"debug: true"})," to always enable it or ",(0,r.jsx)(n.code,{children:"debug: false"})," to always disable it."]}),(0,r.jsx)(n.p,{children:"If you use a standalone plugin, you may need to achieve the same effect by checking the environment:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n // highlight-next-line\n process.env.NODE_ENV === 'production' && '@docusaurus/plugin-debug',\n ].filter(Boolean),\n};\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsx)(n.p,{children:"If you report a bug, we will probably ask you to have this plugin turned on in the production, so that we can inspect your deployment config more easily."}),(0,r.jsxs)(n.p,{children:["If you don't have any sensitive information, you can keep it on in production ",(0,r.jsx)(n.a,{href:"/__docusaurus/debug",children:"like we do"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(u.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-debug\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"This plugin currently has no options."}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n",(0,r.jsxs)(s.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(u.Z,{value:"preset",label:"Preset options",children:[(0,r.jsxs)(n.p,{children:["If you use a preset, configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-next-line\n debug: true, // This will enable the plugin in production\n },\n ],\n ],\n};\n"})})]}),(0,r.jsxs)(u.Z,{value:"plugin",label:"Plugin Options",children:[(0,r.jsx)(n.p,{children:"If you are using a standalone plugin, provide options directly to the plugin:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-next-line\n plugins: ['@docusaurus/plugin-debug'],\n};\n"})})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>u});var r=t(27378);const i={},s=r.createContext(i);function u(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:u(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52110],{61132:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),i=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function u({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),i=t(27378),s=t(40624),u=t(75527),o=t(3620),a=t(44479),l=t(62821),c=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function m({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,l._X)(r),u=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,u]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=b(e),[u,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,c]=m({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:p;return f({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:u,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),h(e)}),[c,h,s]),tabValues:s}}var j=t(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){x(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,u.o5)(),c=e=>{const n=e.currentTarget,r=a.indexOf(n),s=o[r].value;s!==t&&(l(n),i(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:c},i),{className:(0,s.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:t}){const u=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=u.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:u.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function P(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(I,w({},n,e))]})}function E(e){const n=(0,j.Z)();return(0,r.jsx)(P,O(w({},e),{children:g(e.children)}),String(n))}},51340:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(24246),i=t(71670),s=t(97555),u=t(61132);const o={sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},a="\ud83d\udce6 plugin-debug",l={id:"api/plugins/plugin-debug",title:"\ud83d\udce6 plugin-debug",description:"The debug plugin will display useful debug information at http3000/docusaurus/debug.",source:"@site/docs/api/plugins/plugin-debug.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects"},next:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-plugin-debug",children:"\ud83d\udce6 plugin-debug"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["The debug plugin will display useful debug information at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/__docusaurus/debug",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/__docusaurus/debug"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is mostly useful for plugin authors, that will be able to inspect more easily the content of the ",(0,r.jsx)(n.code,{children:".docusaurus"})," folder (like the creates routes), but also be able to inspect data structures that are never written to disk, like the plugin data loaded through the ",(0,r.jsx)(n.code,{children:"contentLoaded"})," lifecycle."]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If you use the plugin via the classic preset, the preset will ",(0,r.jsx)(n.strong,{children:"enable the plugin in development and disable it in production"})," by default (",(0,r.jsx)(n.code,{children:"debug: undefined"}),") to avoid exposing potentially sensitive information. You can use ",(0,r.jsx)(n.code,{children:"debug: true"})," to always enable it or ",(0,r.jsx)(n.code,{children:"debug: false"})," to always disable it."]}),(0,r.jsx)(n.p,{children:"If you use a standalone plugin, you may need to achieve the same effect by checking the environment:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n // highlight-next-line\n process.env.NODE_ENV === 'production' && '@docusaurus/plugin-debug',\n ].filter(Boolean),\n};\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsx)(n.p,{children:"If you report a bug, we will probably ask you to have this plugin turned on in the production, so that we can inspect your deployment config more easily."}),(0,r.jsxs)(n.p,{children:["If you don't have any sensitive information, you can keep it on in production ",(0,r.jsx)(n.a,{href:"/__docusaurus/debug",children:"like we do"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(u.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-debug\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"This plugin currently has no options."}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n",(0,r.jsxs)(s.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(u.Z,{value:"preset",label:"Preset options",children:[(0,r.jsxs)(n.p,{children:["If you use a preset, configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-next-line\n debug: true, // This will enable the plugin in production\n },\n ],\n ],\n};\n"})})]}),(0,r.jsxs)(u.Z,{value:"plugin",label:"Plugin Options",children:[(0,r.jsx)(n.p,{children:"If you are using a standalone plugin, provide options directly to the plugin:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-next-line\n plugins: ['@docusaurus/plugin-debug'],\n};\n"})})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>u});var r=t(27378);const i={},s=r.createContext(i);function u(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:u(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54542266.983828fc.js b/assets/js/54542266.983828fc.js new file mode 100644 index 000000000000..1ef233b7a3b5 --- /dev/null +++ b/assets/js/54542266.983828fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89832],{909:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},32890:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},78152:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=t(24246),n=t(71670);const o={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},r=void 0,i={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},c={image:t(909).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,a.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,a.jsxs)(s.p,{children:["We've ",(0,a.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,a.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,a.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,a.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,a.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{src:t(32890).Z+"",width:"1000",height:"562"})})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>r});var a=t(27378);const n={},o=a.createContext(n);function r(e){const s=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54542266.d1df2f13.js b/assets/js/54542266.d1df2f13.js deleted file mode 100644 index 3e5cc8a3393d..000000000000 --- a/assets/js/54542266.d1df2f13.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89832],{909:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},32890:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},78152:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=t(24246),n=t(71670);const o={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},r=void 0,i={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",page:{permalink:"/blog/authors/josh-cena"},imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},c={image:t(909).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,a.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,a.jsxs)(s.p,{children:["We've ",(0,a.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,a.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,a.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,a.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,a.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{src:t(32890).Z+"",width:"1000",height:"562"})})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>r});var a=t(27378);const n={},o=a.createContext(n);function r(e){const s=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/554438a9.75168a63.js b/assets/js/554438a9.75168a63.js new file mode 100644 index 000000000000..37519b71d6aa --- /dev/null +++ b/assets/js/554438a9.75168a63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51215],{51374:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},60932:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>i,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=t(24246),s=t(71670);const a={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},r=void 0,u={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Documentation",permalink:"/blog/tags/documentation"},{inline:!1,label:"Blog",permalink:"/blog/tags/blog"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},i={authorsImageUrls:[void 0]},c=[];function l(e){const o={a:"a",img:"img",li:"li",ol:"ol",p:"p",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{src:t(51374).Z+"",width:"760",height:"160"})}),"\n",(0,n.jsxs)(o.p,{children:["We are very happy to introduce ",(0,n.jsx)(o.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,n.jsxs)(o.p,{children:["We created ",(0,n.jsx)(o.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,n.jsxs)(o.ol,{children:["\n",(0,n.jsx)(o.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,n.jsx)(o.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,n.jsx)(o.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,n.jsx)(o.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]})]})}function d(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,o,t)=>{t.d(o,{Z:()=>u,a:()=>r});var n=t(27378);const s={},a=n.createContext(s);function r(e){const o=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function u(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/554438a9.f543f6a4.js b/assets/js/554438a9.f543f6a4.js deleted file mode 100644 index 97a1b896bac2..000000000000 --- a/assets/js/554438a9.f543f6a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51215],{51374:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},60932:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>u,toc:()=>c});var n=t(24246),s=t(71670);const r={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},a=void 0,u={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Documentation",permalink:"/blog/tags/documentation"},{inline:!1,label:"Blog",permalink:"/blog/tags/blog"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},i={authorsImageUrls:[void 0]},c=[];function l(e){const o={a:"a",img:"img",li:"li",ol:"ol",p:"p",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{src:t(51374).Z+"",width:"760",height:"160"})}),"\n",(0,n.jsxs)(o.p,{children:["We are very happy to introduce ",(0,n.jsx)(o.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,n.jsxs)(o.p,{children:["We created ",(0,n.jsx)(o.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,n.jsxs)(o.ol,{children:["\n",(0,n.jsx)(o.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,n.jsx)(o.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,n.jsx)(o.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,n.jsx)(o.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]})]})}function d(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,o,t)=>{t.d(o,{Z:()=>u,a:()=>a});var n=t(27378);const s={},r=n.createContext(s);function a(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function u(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55a7f034.1d50f3fc.js b/assets/js/55a7f034.1d50f3fc.js new file mode 100644 index 000000000000..18beb5893754 --- /dev/null +++ b/assets/js/55a7f034.1d50f3fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59874],{61557:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=n(24246),a=n(71670);const r={},o="navbar-dropdown-tests",i={type:"mdx",permalink:"/tests/pages/navbar-dropdown-tests",source:"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",title:"navbar-dropdown-tests",description:"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.",frontMatter:{},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",unlisted:!1},d={},c=[];function l(e){const t={code:"code",h1:"h1",header:"header",li:"li",ol:"ol",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"navbar-dropdown-tests",children:"navbar-dropdown-tests"})}),"\n",(0,s.jsx)("div",{id:"navbar-dropdown-tests",children:(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Make sure that the theme switcher is placed immediately after the language switcher in the navbar."}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to focus language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Enter"})," to open language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to exit language switcher."]}),"\n",(0,s.jsx)(t.li,{children:"Check if the theme selection button is in focus immediately after the last item."}),"\n"]})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var s=n(27378);const a={},r=s.createContext(a);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55a7f034.a67f695b.js b/assets/js/55a7f034.a67f695b.js deleted file mode 100644 index afb439b63a34..000000000000 --- a/assets/js/55a7f034.a67f695b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59874],{61557:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=n(24246),r=n(71670);const a={},o="navbar-dropdown-tests",i={type:"mdx",permalink:"/tests/pages/navbar-dropdown-tests",source:"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",title:"navbar-dropdown-tests",description:"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.",frontMatter:{},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",unlisted:!1},d={},c=[];function l(e){const t={code:"code",h1:"h1",header:"header",li:"li",ol:"ol",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"navbar-dropdown-tests",children:"navbar-dropdown-tests"})}),"\n",(0,s.jsx)("div",{id:"navbar-dropdown-tests",children:(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Make sure that the theme switcher is placed immediately after the language switcher in the navbar."}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to focus language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Enter"})," to open language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to exit language switcher."]}),"\n",(0,s.jsx)(t.li,{children:"Check if the theme selection button is in focus immediately after the last item."}),"\n"]})})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var s=n(27378);const r={},a=s.createContext(r);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5665a0fb.004d382b.js b/assets/js/5665a0fb.004d382b.js deleted file mode 100644 index b65ac29b6ec1..000000000000 --- a/assets/js/5665a0fb.004d382b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72135],{48804:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var i=t(24246),s=t(71670);const l={sidebar_position:3},a="I18n lifecycles",o={id:"api/plugin-methods/i18n-lifecycles",title:"I18n lifecycles",description:"Plugins use these lifecycles to load i18n-related data.",source:"@site/docs/api/plugin-methods/i18n-lifecycles.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/i18n-lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"api",previous:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"},next:{title:"Static methods",permalink:"/docs/api/plugin-methods/static-methods"}},r={},c=[{value:"<code>getTranslationFiles({content})</code>",id:"getTranslationFiles",level:2},{value:"<code>translateContent({content,translationFiles})</code>",id:"translateContent",level:2},{value:"<code>translateThemeConfig({themeConfig,translationFiles})</code>",id:"translateThemeConfig",level:2},{value:"<code>async getDefaultCodeTranslationMessages()</code>",id:"getDefaultCodeTranslationMessages",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"i18n-lifecycles",children:"I18n lifecycles"})}),"\n",(0,i.jsx)(n.p,{children:"Plugins use these lifecycles to load i18n-related data."}),"\n",(0,i.jsx)(n.h2,{id:"getTranslationFiles",children:(0,i.jsx)(n.code,{children:"getTranslationFiles({content})"})}),"\n",(0,i.jsx)(n.p,{children:"Plugins declare the JSON translation files they want to use."}),"\n",(0,i.jsxs)(n.p,{children:["Returns translation files ",(0,i.jsx)(n.code,{children:"{path: string, content: ChromeI18nJSON}"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": relative to the plugin localized folder ",(0,i.jsx)(n.code,{children:"i18n/[locale]/[pluginName]"}),". Extension ",(0,i.jsx)(n.code,{children:".json"})," should be omitted to remain generic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"content"}),": using the Chrome i18n JSON format."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These files will be written by the ",(0,i.jsxs)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:[(0,i.jsx)(n.code,{children:"write-translations"})," CLI"]})," to the plugin i18n subfolder, and will be read in the appropriate locale before calling ",(0,i.jsx)(n.a,{href:"#translateContent",children:(0,i.jsx)(n.code,{children:"translateContent()"})})," and ",(0,i.jsx)(n.a,{href:"#translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig()"})})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n async getTranslationFiles({content}) {\n return [\n {\n path: 'sidebar-labels',\n content: {\n someSidebarLabel: {\n message: 'Some Sidebar Label',\n description: 'A label used in my plugin in the sidebar',\n },\n someLabelFromContent: content.myLabel,\n },\n },\n ];\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateContent",children:(0,i.jsx)(n.code,{children:"translateContent({content,translationFiles})"})}),"\n",(0,i.jsx)(n.p,{children:"Translate the plugin content, using the localized translation files."}),"\n",(0,i.jsx)(n.p,{children:"Returns the localized plugin content."}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"contentLoaded()"})," lifecycle will be called with the localized plugin content returned by ",(0,i.jsx)(n.code,{children:"translateContent()"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n translateContent({content, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...content,\n someContentLabel: myTranslationFile.someContentLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig({themeConfig,translationFiles})"})}),"\n",(0,i.jsxs)(n.p,{children:["Translate the site ",(0,i.jsx)(n.code,{children:"themeConfig"})," labels, using the localized translation files."]}),"\n",(0,i.jsxs)(n.p,{children:["Returns the localized ",(0,i.jsx)(n.code,{children:"themeConfig"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n translateThemeConfig({themeConfig, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...themeConfig,\n someThemeConfigLabel: myTranslationFile.someThemeConfigLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"getDefaultCodeTranslationMessages",children:(0,i.jsx)(n.code,{children:"async getDefaultCodeTranslationMessages()"})}),"\n",(0,i.jsxs)(n.p,{children:["Themes using the ",(0,i.jsx)(n.code,{children:"<Translate>"})," API can provide default code translation messages."]}),"\n",(0,i.jsxs)(n.p,{children:["It should return messages in ",(0,i.jsx)(n.code,{children:"Record<string, string>"}),", where keys are translation IDs and values are messages (without the description) localized using the site's current locale."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n async getDefaultCodeTranslationMessages() {\n return readJsonFile(`${context.i18n.currentLocale}.json`);\n },\n // highlight-end\n };\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var i=t(27378);const s={},l=i.createContext(s);function a(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5665a0fb.1c6e6722.js b/assets/js/5665a0fb.1c6e6722.js new file mode 100644 index 000000000000..3577008e110b --- /dev/null +++ b/assets/js/5665a0fb.1c6e6722.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72135],{48804:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var i=t(24246),s=t(71670);const l={sidebar_position:3},a="I18n lifecycles",o={id:"api/plugin-methods/i18n-lifecycles",title:"I18n lifecycles",description:"Plugins use these lifecycles to load i18n-related data.",source:"@site/docs/api/plugin-methods/i18n-lifecycles.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/i18n-lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"api",previous:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"},next:{title:"Static methods",permalink:"/docs/api/plugin-methods/static-methods"}},r={},c=[{value:"<code>getTranslationFiles({content})</code>",id:"getTranslationFiles",level:2},{value:"<code>translateContent({content,translationFiles})</code>",id:"translateContent",level:2},{value:"<code>translateThemeConfig({themeConfig,translationFiles})</code>",id:"translateThemeConfig",level:2},{value:"<code>async getDefaultCodeTranslationMessages()</code>",id:"getDefaultCodeTranslationMessages",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"i18n-lifecycles",children:"I18n lifecycles"})}),"\n",(0,i.jsx)(n.p,{children:"Plugins use these lifecycles to load i18n-related data."}),"\n",(0,i.jsx)(n.h2,{id:"getTranslationFiles",children:(0,i.jsx)(n.code,{children:"getTranslationFiles({content})"})}),"\n",(0,i.jsx)(n.p,{children:"Plugins declare the JSON translation files they want to use."}),"\n",(0,i.jsxs)(n.p,{children:["Returns translation files ",(0,i.jsx)(n.code,{children:"{path: string, content: ChromeI18nJSON}"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": relative to the plugin localized folder ",(0,i.jsx)(n.code,{children:"i18n/[locale]/[pluginName]"}),". Extension ",(0,i.jsx)(n.code,{children:".json"})," should be omitted to remain generic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"content"}),": using the Chrome i18n JSON format."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These files will be written by the ",(0,i.jsxs)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:[(0,i.jsx)(n.code,{children:"write-translations"})," CLI"]})," to the plugin i18n subfolder, and will be read in the appropriate locale before calling ",(0,i.jsx)(n.a,{href:"#translateContent",children:(0,i.jsx)(n.code,{children:"translateContent()"})})," and ",(0,i.jsx)(n.a,{href:"#translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig()"})})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n async getTranslationFiles({content}) {\n return [\n {\n path: 'sidebar-labels',\n content: {\n someSidebarLabel: {\n message: 'Some Sidebar Label',\n description: 'A label used in my plugin in the sidebar',\n },\n someLabelFromContent: content.myLabel,\n },\n },\n ];\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateContent",children:(0,i.jsx)(n.code,{children:"translateContent({content,translationFiles})"})}),"\n",(0,i.jsx)(n.p,{children:"Translate the plugin content, using the localized translation files."}),"\n",(0,i.jsx)(n.p,{children:"Returns the localized plugin content."}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"contentLoaded()"})," lifecycle will be called with the localized plugin content returned by ",(0,i.jsx)(n.code,{children:"translateContent()"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n translateContent({content, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...content,\n someContentLabel: myTranslationFile.someContentLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig({themeConfig,translationFiles})"})}),"\n",(0,i.jsxs)(n.p,{children:["Translate the site ",(0,i.jsx)(n.code,{children:"themeConfig"})," labels, using the localized translation files."]}),"\n",(0,i.jsxs)(n.p,{children:["Returns the localized ",(0,i.jsx)(n.code,{children:"themeConfig"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n translateThemeConfig({themeConfig, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...themeConfig,\n someThemeConfigLabel: myTranslationFile.someThemeConfigLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"getDefaultCodeTranslationMessages",children:(0,i.jsx)(n.code,{children:"async getDefaultCodeTranslationMessages()"})}),"\n",(0,i.jsxs)(n.p,{children:["Themes using the ",(0,i.jsx)(n.code,{children:"<Translate>"})," API can provide default code translation messages."]}),"\n",(0,i.jsxs)(n.p,{children:["It should return messages in ",(0,i.jsx)(n.code,{children:"Record<string, string>"}),", where keys are translation IDs and values are messages (without the description) localized using the site's current locale."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n async getDefaultCodeTranslationMessages() {\n return readJsonFile(`${context.i18n.currentLocale}.json`);\n },\n // highlight-end\n };\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var i=t(27378);const s={},l=i.createContext(s);function a(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/575718d1.22b9b800.js b/assets/js/575718d1.22b9b800.js new file mode 100644 index 000000000000..a7079fecde6c --- /dev/null +++ b/assets/js/575718d1.22b9b800.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74768],{87739:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},13381:(e,n,s)=>{s.d(n,{Z:()=>i});var r=s(24246),t=(s(27378),s(6698));function i({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(t.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,n,s)=>{s.d(n,{Z:()=>d});var r=s(24246),t=(s(27378),s(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function a(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},r=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),r.forEach((function(n){o(e,n,s[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,r)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function d({children:e,minHeight:n,url:s="http://localhost:3000",style:o,bodyStyle:d}){return(0,r.jsxs)("div",{className:i.browserWindow,style:c(a({},o),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,t.Z)(i.browserWindowAddressBar,"text--truncate"),children:s}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:d,children:e})]})}},15745:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},92471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=s(24246),t=s(71670),i=s(13381);const o={title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-10-31T00:00:00.000Z")},a=void 0,c={permalink:"/blog/releases/3.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx",source:"@site/blog/releases/3.0/index.mdx",title:"Announcing Docusaurus 3.0",description:"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73",date:"2023-10-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:10.515,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-10-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"},nextItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"}},d={image:s(87739).Z,authorsImageUrls:[void 0]},l=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Highlights",id:"highlights",level:2},{value:"Markdown",id:"markdown",level:3},{value:"ESM and TypeScript configs",id:"esm-ts-configs",level:3},{value:"Unlisted content",id:"unlisted-content",level:3},{value:"React 18",id:"react-18",level:3},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"Debug builds",id:"debug-builds",level:3},{value:"TypeScript",id:"typescript",level:3},{value:"Code blocks",id:"code-blocks",level:3},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Query-string data attributes",id:"query-string-data-attributes",level:3},{value:"Other features",id:"other-features",level:3},{value:"Conclusion",id:"conclusion",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Today, we are happy to ",(0,r.jsx)(n.strong,{children:"announce Docusaurus 3.0"}),"! \ud83e\udd73"]}),"\n",(0,r.jsxs)(n.p,{children:["At ",(0,r.jsx)(n.a,{href:"https://opensource.fb.com/",children:(0,r.jsx)(n.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,r.jsx)(n.strong,{children:"best documentation websites"})," with ",(0,r.jsx)(n.strong,{children:"minimal effort"}),", letting you ",(0,r.jsx)(n.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,r.jsxs)(n.p,{children:["This is a new ",(0,r.jsx)(n.strong,{children:"major version"})," of Docusaurus, coming with ",(0,r.jsx)(n.strong,{children:"new exciting features"})," and upgraded dependencies."]}),"\n",(0,r.jsxs)(n.p,{children:["In line with the ",(0,r.jsx)(n.a,{href:"https://semver.org/",children:(0,r.jsx)(n.strong,{children:"Semantic Versioning"})})," principles, this release includes ",(0,r.jsx)(n.strong,{children:"breaking changes"})," we documented thoroughly in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3/",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),". Breaking changes can be bothersome, but they are necessary to set the ground for a ",(0,r.jsx)(n.strong,{children:"new wave of Docusaurus features"})," we plan to implement."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"v3.0 social-card image",src:s(15745).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, ",(0,r.jsx)(n.strong,{children:"upgrading to MDX v3"})," is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"compatibility options for MDX v1"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"Prepare your site"})," ahead of time, incrementally, while staying on Docusaurus v2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"Set up visual regression tests"})," to catch unexpected visual changes happening during the upgrade"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"About Docusaurus v2",type:"info",children:(0,r.jsxs)(n.p,{children:["According to our ",(0,r.jsx)(n.a,{href:"/community/release-process#stable-version",children:"release process"}),", Docusaurus v2 has now entered ",(0,r.jsx)(n.strong,{children:"maintenance mode"}),". It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3."]})}),"\n","\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.p,{children:["This section only gives you a quick glance. All the breaking changes are thoroughly documented in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Node.js v16 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"React v17 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"MDX v1 \u27a1\ufe0f v3"}),"\n",(0,r.jsx)(n.li,{children:"TypeScript v4 \u27a1\ufe0f v5"}),"\n",(0,r.jsx)(n.li,{children:"prism-react-renderer v1 \u27a1\ufe0f v2"}),"\n",(0,r.jsx)(n.li,{children:"react-live v2 \u27a1\ufe0f v4"}),"\n",(0,r.jsx)(n.li,{children:"Mermaid v9 \u27a1\ufe0f v10"}),"\n",(0,r.jsx)(n.li,{children:"import-fresh v3 \u27a1\ufe0f jiti v1"}),"\n",(0,r.jsx)(n.li,{children:"remark-emoji v2 \u27a1\ufe0f v4"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A typical ",(0,r.jsx)(n.code,{children:"package.json"})," dependency upgrade looks like:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new default blog RSS feed limit of 20 entries"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:"#9308"}),": fix and re-introduce the ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, deprecate ",(0,r.jsx)(n.code,{children:":::caution"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"#9310"}),": remove the legacy versioned sidebar id prefix, used for sites versioned before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"#7966"}),": refactor docs theme components, eventually requiring to you re-swizzle them"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsxs)(n.p,{children:["Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"markdown",children:"Markdown"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded from MDX v1 to MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"#8288"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"migration guide"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9451",children:"#9451"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"migration guide"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This new MDX version is ",(0,r.jsx)(n.strong,{children:"much better for content writers and plugin authors"}),", and lays the ground for implementing new exciting Markdown features."]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX v3 - the main challenge",type:"warning",children:[(0,r.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,r.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3."]}),(0,r.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,r.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3, while others might ",(0,r.jsx)(n.strong,{children:"render differently"}),"."]}),(0,r.jsxs)(n.p,{children:["Most breaking changes come from ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"}),", and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," is a relatively small release. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Don't be intimidated"}),". Most problems are ",(0,r.jsx)(n.strong,{children:"easy to fix"})," and often related to ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,r.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," to help you get an estimate of the work to be done, and we recommend to ",(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"prepare your site in advance"}),"."]}),(0,r.jsxs)(n.p,{children:["If you created custom ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"MDX plugins"})," (Remark/Rehype), the AST is slightly different, and you might need to refactor them."]})]}),"\n",(0,r.jsxs)(n.p,{children:["This notably enables us to add a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#mdx-vs-commonmark",children:"CommonMark mode"})," that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and ",(0,r.jsx)(n.strong,{children:"experimental"})," and limited (",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"some Docusaurus features will not work"}),"). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret ",(0,r.jsx)(n.code,{children:".md"})," files as CommonMark in an upcoming major version, and recommend to use the ",(0,r.jsx)(n.code,{children:".mdx"})," extension for any file using JSX or ES modules."]}),"\n",(0,r.jsxs)(n.p,{children:["We also introduced a new way to ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"configure Markdown globally for your site"}),", and plan to add more flexible options later."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n format: 'mdx',\n mermaid: true,\n preprocessor: ({filePath, fileContent}) => {\n return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n },\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"})," plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"custom directives"})," such as ",(0,r.jsx)(n.code,{children:":textDirective"}),", ",(0,r.jsx)(n.code,{children:"::leafDirective"})," or ",(0,r.jsx)(n.code,{children:":::containerDirective"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"esm-ts-configs",children:"ESM and TypeScript configs"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9317",children:"#9317"}),", we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets."]}),"\n",(0,r.jsx)(n.p,{children:"Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n // your site config ...\n presets: [\n [\n 'classic',\n {\n // your preset config ...\n } satisfies Preset.Options,\n ],\n ],\n themeConfig: {\n // your theme config ...\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="sidebars.ts"',children:"import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n\nconst sidebars: SidebarsConfig = {\n docs: ['introduction'],\n};\n\nexport default sidebars;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"unlisted-content",children:"Unlisted content"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus already supported a ",(0,r.jsx)(n.code,{children:"draft: true"})," front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds."]}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8004",children:"#8004"}),", we introduced a new ",(0,r.jsx)(n.code,{children:"unlisted: true"}),' front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.']}),"\n",(0,r.jsx)(n.p,{children:"Unlisted content will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["be excluded from ",(0,r.jsx)(n.code,{children:"sitemap.xml"})]}),"\n",(0,r.jsxs)(n.li,{children:["be excluded from SEO results thanks to ",(0,r.jsx)(n.code,{children:'<meta name="robots" content="noindex, nofollow" />'})]}),"\n",(0,r.jsx)(n.li,{children:"be excluded from blog RSS feeds"}),"\n",(0,r.jsx)(n.li,{children:"be excluded from Algolia DocSearch results"}),"\n",(0,r.jsx)(n.li,{children:"be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages..."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an ",(0,r.jsx)(n.a,{href:"/tests/blog/unlisted-post",children:"unlisted blog post"}),":"]}),"\n",(0,r.jsx)(i.Z,{url:"/tests/blog/unlisted-post"}),"\n",(0,r.jsx)(n.h3,{id:"react-18",children:"React 18"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8961",children:"#8961"}),", we upgraded to React 18. This is important, notably for the ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features",children:"gradual adoption of Concurrent React features"}),", as well as upcoming exciting features such as ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9089",children:"build-time React Server Components"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", notably the new ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching",children:"automatic batching"})," behavior."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,r.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"startTransition()"})}),"\n"]}),(0,r.jsxs)(n.p,{children:["Their Docusaurus support is considered as ",(0,r.jsx)(n.strong,{children:"experimental"}),". We might have to adjust the integration in the future, leading to a different runtime behavior."]})]}),"\n",(0,r.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,r.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"debug-builds",children:"Debug builds"}),"\n",(0,r.jsx)(n.p,{children:"It is now possible to build your static site in dev mode."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docusaurus build --dev\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Debug React-related problems",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus will log more errors to the console, notably React 18 hydration errors through the new ",(0,r.jsxs)(n.a,{href:"https://react.dev/reference/react-dom/client/hydrateRoot#parameters",children:[(0,r.jsx)(n.code,{children:"onRecoverableError"})," callback"]}),"."]}),(0,r.jsxs)(n.p,{children:["This new build mode is particularly helpful for ",(0,r.jsx)(n.strong,{children:"troubleshooting React problems"}),". Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/error-decoder.html/",children:"React Error Decoder page"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript",children:"TypeScript"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 now requires a minimum version of TypeScript 5.0."}),"\n",(0,r.jsx)(n.p,{children:"We re-internalized the base recommended TypeScript config to a new official package:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new ",(0,r.jsx)(n.a,{href:"#esm-ts-configs",children:"TypeScript config files"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type {Options, ThemeConfig} from '@docusaurus/preset-classic';\nimport type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n"})}),"\n",(0,r.jsx)(n.h3,{id:"code-blocks",children:"Code blocks"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9316",children:"#9316"}),", we improved on syntax highlighting thanks to the ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"prism-react-renderer"})," v2 upgrade. For example, a bash param ",(0,r.jsx)(n.code,{children:"--save"})," is now colored:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save some-package\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," also upgrades to ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"react-live"})," v4, coming with a new ",(0,r.jsx)(n.a,{href:"https://github.com/alangpierce/sucrase",children:"sucrase"})," compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"live",live:!0,children:"function Hello() {\n const name: string = 'World';\n return <div>Hello {name}</div>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8982",children:"#8982"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8870",children:"#8870"}),", we also added ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"})," support for TeX-like, Haskell-like, and WebAssembly comment syntax."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(n.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9305",children:"#9305"}),", we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams."]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Mindmap"}),(0,r.jsx)(n.mermaid,{value:"mindmap\n root((mindmap))\n Research\n Creative techniques\n Strategic planning\n Argument mapping\n Tools\n Pen and paper\n Mermaid"})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Quadrant chart"}),(0,r.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]}),"\n",(0,r.jsx)(n.h3,{id:"query-string-data-attributes",children:"Query-string data attributes"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9028"}),", we made it possible to set custom HTML ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*",children:"data attributes"})," though ",(0,r.jsx)(n.code,{children:"docusaurus-data-x"})," query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(i.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(n.h3,{id:"other-features",children:"Other features"}),"\n",(0,r.jsx)(n.p,{children:"Other new features worth mentioning:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new blog ",(0,r.jsx)(n.code,{children:"feedOptions.limit"})," option"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9071",children:"#9071"}),": add normalized SEO front matter support for the pages plugin"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9171"}),": the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9171",children:"#9171"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,r.jsx)(n.code,{children:"no-html-links"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8384",children:"#8384"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,r.jsx)(n.code,{children:"prefer-docusaurus-heading"})})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Read ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})})," for an exhaustive list of changes."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsxs)(n.p,{children:["This release comes with a few features, but more importantly ",(0,r.jsx)(n.strong,{children:"upgrades many pieces of the Docusaurus infrastructure"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"MDX upgrade"})," consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you."]}),"\n",(0,r.jsxs)(n.p,{children:["Now that we've caught up with our infrastructure, we'll be back ",(0,r.jsx)(n.strong,{children:"delivering useful documentation features"})," very soon, in upcoming minor versions."]}),"\n",(0,r.jsxs)(n.p,{children:["We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a ",(0,r.jsx)(n.strong,{children:"competitive solution"})," that stands out for its great ",(0,r.jsx)(n.strong,{children:"flexibility"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var r=s(27378);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/575718d1.b42e003b.js b/assets/js/575718d1.b42e003b.js deleted file mode 100644 index d15f3bdac122..000000000000 --- a/assets/js/575718d1.b42e003b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74768],{87739:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},13381:(e,n,s)=>{s.d(n,{Z:()=>i});var r=s(24246),t=(s(27378),s(6698));function i({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(t.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,n,s)=>{s.d(n,{Z:()=>d});var r=s(24246),t=(s(27378),s(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function a(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},r=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),r.forEach((function(n){o(e,n,s[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,r)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function d({children:e,minHeight:n,url:s="http://localhost:3000",style:o,bodyStyle:d}){return(0,r.jsxs)("div",{className:i.browserWindow,style:c(a({},o),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,t.Z)(i.browserWindowAddressBar,"text--truncate"),children:s}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:d,children:e})]})}},15745:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},92471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=s(24246),t=s(71670),i=s(13381);const o={title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-10-31T00:00:00.000Z")},a=void 0,c={permalink:"/blog/releases/3.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx",source:"@site/blog/releases/3.0/index.mdx",title:"Announcing Docusaurus 3.0",description:"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73",date:"2023-10-31T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:10.515,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-10-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"},nextItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"}},d={image:s(87739).Z,authorsImageUrls:[void 0]},l=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Highlights",id:"highlights",level:2},{value:"Markdown",id:"markdown",level:3},{value:"ESM and TypeScript configs",id:"esm-ts-configs",level:3},{value:"Unlisted content",id:"unlisted-content",level:3},{value:"React 18",id:"react-18",level:3},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"Debug builds",id:"debug-builds",level:3},{value:"TypeScript",id:"typescript",level:3},{value:"Code blocks",id:"code-blocks",level:3},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Query-string data attributes",id:"query-string-data-attributes",level:3},{value:"Other features",id:"other-features",level:3},{value:"Conclusion",id:"conclusion",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Today, we are happy to ",(0,r.jsx)(n.strong,{children:"announce Docusaurus 3.0"}),"! \ud83e\udd73"]}),"\n",(0,r.jsxs)(n.p,{children:["At ",(0,r.jsx)(n.a,{href:"https://opensource.fb.com/",children:(0,r.jsx)(n.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,r.jsx)(n.strong,{children:"best documentation websites"})," with ",(0,r.jsx)(n.strong,{children:"minimal effort"}),", letting you ",(0,r.jsx)(n.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,r.jsxs)(n.p,{children:["This is a new ",(0,r.jsx)(n.strong,{children:"major version"})," of Docusaurus, coming with ",(0,r.jsx)(n.strong,{children:"new exciting features"})," and upgraded dependencies."]}),"\n",(0,r.jsxs)(n.p,{children:["In line with the ",(0,r.jsx)(n.a,{href:"https://semver.org/",children:(0,r.jsx)(n.strong,{children:"Semantic Versioning"})})," principles, this release includes ",(0,r.jsx)(n.strong,{children:"breaking changes"})," we documented thoroughly in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3/",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),". Breaking changes can be bothersome, but they are necessary to set the ground for a ",(0,r.jsx)(n.strong,{children:"new wave of Docusaurus features"})," we plan to implement."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"v3.0 social-card image",src:s(15745).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, ",(0,r.jsx)(n.strong,{children:"upgrading to MDX v3"})," is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"compatibility options for MDX v1"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"Prepare your site"})," ahead of time, incrementally, while staying on Docusaurus v2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"Set up visual regression tests"})," to catch unexpected visual changes happening during the upgrade"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"About Docusaurus v2",type:"info",children:(0,r.jsxs)(n.p,{children:["According to our ",(0,r.jsx)(n.a,{href:"/community/release-process#stable-version",children:"release process"}),", Docusaurus v2 has now entered ",(0,r.jsx)(n.strong,{children:"maintenance mode"}),". It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3."]})}),"\n","\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.p,{children:["This section only gives you a quick glance. All the breaking changes are thoroughly documented in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Node.js v16 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"React v17 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"MDX v1 \u27a1\ufe0f v3"}),"\n",(0,r.jsx)(n.li,{children:"TypeScript v4 \u27a1\ufe0f v5"}),"\n",(0,r.jsx)(n.li,{children:"prism-react-renderer v1 \u27a1\ufe0f v2"}),"\n",(0,r.jsx)(n.li,{children:"react-live v2 \u27a1\ufe0f v4"}),"\n",(0,r.jsx)(n.li,{children:"Mermaid v9 \u27a1\ufe0f v10"}),"\n",(0,r.jsx)(n.li,{children:"import-fresh v3 \u27a1\ufe0f jiti v1"}),"\n",(0,r.jsx)(n.li,{children:"remark-emoji v2 \u27a1\ufe0f v4"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A typical ",(0,r.jsx)(n.code,{children:"package.json"})," dependency upgrade looks like:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new default blog RSS feed limit of 20 entries"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:"#9308"}),": fix and re-introduce the ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, deprecate ",(0,r.jsx)(n.code,{children:":::caution"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"#9310"}),": remove the legacy versioned sidebar id prefix, used for sites versioned before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"#7966"}),": refactor docs theme components, eventually requiring to you re-swizzle them"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsxs)(n.p,{children:["Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"markdown",children:"Markdown"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded from MDX v1 to MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"#8288"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"migration guide"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9451",children:"#9451"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"migration guide"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This new MDX version is ",(0,r.jsx)(n.strong,{children:"much better for content writers and plugin authors"}),", and lays the ground for implementing new exciting Markdown features."]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX v3 - the main challenge",type:"warning",children:[(0,r.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,r.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3."]}),(0,r.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,r.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3, while others might ",(0,r.jsx)(n.strong,{children:"render differently"}),"."]}),(0,r.jsxs)(n.p,{children:["Most breaking changes come from ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"}),", and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," is a relatively small release. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Don't be intimidated"}),". Most problems are ",(0,r.jsx)(n.strong,{children:"easy to fix"})," and often related to ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,r.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," to help you get an estimate of the work to be done, and we recommend to ",(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"prepare your site in advance"}),"."]}),(0,r.jsxs)(n.p,{children:["If you created custom ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"MDX plugins"})," (Remark/Rehype), the AST is slightly different, and you might need to refactor them."]})]}),"\n",(0,r.jsxs)(n.p,{children:["This notably enables us to add a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#mdx-vs-commonmark",children:"CommonMark mode"})," that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and ",(0,r.jsx)(n.strong,{children:"experimental"})," and limited (",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"some Docusaurus features will not work"}),"). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret ",(0,r.jsx)(n.code,{children:".md"})," files as CommonMark in an upcoming major version, and recommend to use the ",(0,r.jsx)(n.code,{children:".mdx"})," extension for any file using JSX or ES modules."]}),"\n",(0,r.jsxs)(n.p,{children:["We also introduced a new way to ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"configure Markdown globally for your site"}),", and plan to add more flexible options later."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n format: 'mdx',\n mermaid: true,\n preprocessor: ({filePath, fileContent}) => {\n return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n },\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"})," plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"custom directives"})," such as ",(0,r.jsx)(n.code,{children:":textDirective"}),", ",(0,r.jsx)(n.code,{children:"::leafDirective"})," or ",(0,r.jsx)(n.code,{children:":::containerDirective"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"esm-ts-configs",children:"ESM and TypeScript configs"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9317",children:"#9317"}),", we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets."]}),"\n",(0,r.jsx)(n.p,{children:"Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n // your site config ...\n presets: [\n [\n 'classic',\n {\n // your preset config ...\n } satisfies Preset.Options,\n ],\n ],\n themeConfig: {\n // your theme config ...\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="sidebars.ts"',children:"import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n\nconst sidebars: SidebarsConfig = {\n docs: ['introduction'],\n};\n\nexport default sidebars;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"unlisted-content",children:"Unlisted content"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus already supported a ",(0,r.jsx)(n.code,{children:"draft: true"})," front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds."]}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8004",children:"#8004"}),", we introduced a new ",(0,r.jsx)(n.code,{children:"unlisted: true"}),' front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.']}),"\n",(0,r.jsx)(n.p,{children:"Unlisted content will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["be excluded from ",(0,r.jsx)(n.code,{children:"sitemap.xml"})]}),"\n",(0,r.jsxs)(n.li,{children:["be excluded from SEO results thanks to ",(0,r.jsx)(n.code,{children:'<meta name="robots" content="noindex, nofollow" />'})]}),"\n",(0,r.jsx)(n.li,{children:"be excluded from blog RSS feeds"}),"\n",(0,r.jsx)(n.li,{children:"be excluded from Algolia DocSearch results"}),"\n",(0,r.jsx)(n.li,{children:"be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages..."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an ",(0,r.jsx)(n.a,{href:"/tests/blog/unlisted-post",children:"unlisted blog post"}),":"]}),"\n",(0,r.jsx)(i.Z,{url:"/tests/blog/unlisted-post"}),"\n",(0,r.jsx)(n.h3,{id:"react-18",children:"React 18"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8961",children:"#8961"}),", we upgraded to React 18. This is important, notably for the ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features",children:"gradual adoption of Concurrent React features"}),", as well as upcoming exciting features such as ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9089",children:"build-time React Server Components"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", notably the new ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching",children:"automatic batching"})," behavior."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,r.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"startTransition()"})}),"\n"]}),(0,r.jsxs)(n.p,{children:["Their Docusaurus support is considered as ",(0,r.jsx)(n.strong,{children:"experimental"}),". We might have to adjust the integration in the future, leading to a different runtime behavior."]})]}),"\n",(0,r.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,r.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"debug-builds",children:"Debug builds"}),"\n",(0,r.jsx)(n.p,{children:"It is now possible to build your static site in dev mode."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docusaurus build --dev\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Debug React-related problems",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus will log more errors to the console, notably React 18 hydration errors through the new ",(0,r.jsxs)(n.a,{href:"https://react.dev/reference/react-dom/client/hydrateRoot#parameters",children:[(0,r.jsx)(n.code,{children:"onRecoverableError"})," callback"]}),"."]}),(0,r.jsxs)(n.p,{children:["This new build mode is particularly helpful for ",(0,r.jsx)(n.strong,{children:"troubleshooting React problems"}),". Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/error-decoder.html/",children:"React Error Decoder page"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript",children:"TypeScript"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 now requires a minimum version of TypeScript 5.0."}),"\n",(0,r.jsx)(n.p,{children:"We re-internalized the base recommended TypeScript config to a new official package:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new ",(0,r.jsx)(n.a,{href:"#esm-ts-configs",children:"TypeScript config files"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type {Options, ThemeConfig} from '@docusaurus/preset-classic';\nimport type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n"})}),"\n",(0,r.jsx)(n.h3,{id:"code-blocks",children:"Code blocks"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9316",children:"#9316"}),", we improved on syntax highlighting thanks to the ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"prism-react-renderer"})," v2 upgrade. For example, a bash param ",(0,r.jsx)(n.code,{children:"--save"})," is now colored:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save some-package\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," also upgrades to ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"react-live"})," v4, coming with a new ",(0,r.jsx)(n.a,{href:"https://github.com/alangpierce/sucrase",children:"sucrase"})," compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"live",live:!0,children:"function Hello() {\n const name: string = 'World';\n return <div>Hello {name}</div>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8982",children:"#8982"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8870",children:"#8870"}),", we also added ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"})," support for TeX-like, Haskell-like, and WebAssembly comment syntax."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(n.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9305",children:"#9305"}),", we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams."]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Mindmap"}),(0,r.jsx)(n.mermaid,{value:"mindmap\n root((mindmap))\n Research\n Creative techniques\n Strategic planning\n Argument mapping\n Tools\n Pen and paper\n Mermaid"})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Quadrant chart"}),(0,r.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]}),"\n",(0,r.jsx)(n.h3,{id:"query-string-data-attributes",children:"Query-string data attributes"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9028"}),", we made it possible to set custom HTML ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*",children:"data attributes"})," though ",(0,r.jsx)(n.code,{children:"docusaurus-data-x"})," query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(i.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(n.h3,{id:"other-features",children:"Other features"}),"\n",(0,r.jsx)(n.p,{children:"Other new features worth mentioning:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new blog ",(0,r.jsx)(n.code,{children:"feedOptions.limit"})," option"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9071",children:"#9071"}),": add normalized SEO front matter support for the pages plugin"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9171"}),": the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9171",children:"#9171"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,r.jsx)(n.code,{children:"no-html-links"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8384",children:"#8384"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,r.jsx)(n.code,{children:"prefer-docusaurus-heading"})})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Read ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})})," for an exhaustive list of changes."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsxs)(n.p,{children:["This release comes with a few features, but more importantly ",(0,r.jsx)(n.strong,{children:"upgrades many pieces of the Docusaurus infrastructure"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"MDX upgrade"})," consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you."]}),"\n",(0,r.jsxs)(n.p,{children:["Now that we've caught up with our infrastructure, we'll be back ",(0,r.jsx)(n.strong,{children:"delivering useful documentation features"})," very soon, in upcoming minor versions."]}),"\n",(0,r.jsxs)(n.p,{children:["We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a ",(0,r.jsx)(n.strong,{children:"competitive solution"})," that stands out for its great ",(0,r.jsx)(n.strong,{children:"flexibility"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var r=s(27378);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5785f4e1.0bc2a62b.js b/assets/js/5785f4e1.0bc2a62b.js deleted file mode 100644 index 22afd43857a5..000000000000 --- a/assets/js/5785f4e1.0bc2a62b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1040],{61132:(e,s,a)=>{a.d(s,{Z:()=>l});var n=a(24246),t=(a(27378),a(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:s,className:a}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,a),hidden:s,children:e})}},97555:(e,s,a)=>{a.d(s,{Z:()=>M});var n=a(24246),t=a(27378),r=a(40624),l=a(75527),i=a(3620),c=a(44479),m=a(62821),o=a(52196),h=a(53589);function d(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function x(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function p(e){var s,a;return null!==(a=null===(s=t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==a?a:[]}function u(e){const{values:s,children:a}=e;return(0,t.useMemo)((()=>{const e=null!=s?s:function(e){return p(e).map((({props:{value:e,label:s,attributes:a,default:n}})=>({value:e,label:s,attributes:a,default:n})))}(a);return function(e){const s=(0,o.lx)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,a])}function j({value:e,tabValues:s}){return s.some((s=>s.value===e))}function g({queryString:e=!1,groupId:s}){const a=(0,i.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,m._X)(n),l=(0,t.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(a.location.search);s.set(n,e),a.replace(x(function(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){d(e,s,a[s])}))}return e}({},a.location),{search:s.toString()}))}),[n,a]);return[r,l]}function f(e){const{defaultValue:s,queryString:a=!1,groupId:n}=e,r=u(e),[l,i]=(0,t.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!j({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var a;const n=null!==(a=s.find((e=>e.default)))&&void 0!==a?a:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[m,o]=g({queryString:a,groupId:n}),[d,x]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[a,n]=(0,h.Nk)(s);return[a,(0,t.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),p=(()=>{const e=null!=m?m:d;return j({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),o(e),x(e)}),[o,x,r]),tabValues:r}}var b=a(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function N(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function w(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){N(e,s,a[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function v({className:e,block:s,selectedValue:a,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),o=e=>{const s=e.currentTarget,n=c.indexOf(s),r=i[n].value;r!==a&&(m(s),t(r))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var a;s=null!==(a=c[n])&&void 0!==a?a:c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;var n;s=null!==(n=c[a])&&void 0!==n?n:c[c.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:i.map((({value:e,label:s,attributes:t})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:a===e?0:-1,"aria-selected":a===e,ref:e=>c.push(e),onKeyDown:h,onClick:o},t),{className:(0,r.Z)("tabs__item",y.tabItem,null==t?void 0:t.className,{"tabs__item--active":a===e}),children:null!=s?s:e}),e)))})}function O({lazy:e,children:s,selectedValue:a}){const l=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===a));return e?(0,t.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function R(e){const s=f(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(v,w({},s,e)),(0,n.jsx)(O,w({},s,e))]})}function M(e){const s=(0,b.Z)();return(0,n.jsx)(R,k(w({},e),{children:p(e.children)}),String(s))}},6698:(e,s,a)=>{a.d(s,{Z:()=>m});var n=a(24246),t=(a(27378),a(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function i(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){l(e,s,a[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function m({children:e,minHeight:s,url:a="http://localhost:3000",style:l,bodyStyle:m}){return(0,n.jsxs)("div",{className:r.browserWindow,style:c(i({},l),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,t.Z)(r.browserWindowAddressBar,"text--truncate"),children:a}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:m,children:e})]})}},75461:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var n=a(24246),t=a(71670),r=a(97555),l=a(61132),i=a(6698);const c={id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},m="Math Equations",o={id:"guides/markdown-features/math-equations",title:"Math Equations",description:"Writing LaTeX Math Equations",source:"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/math-equations",permalink:"/docs/markdown-features/math-equations",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},sidebar:"docs",previous:{title:"MDX Plugins",permalink:"/docs/markdown-features/plugins"},next:{title:"Diagrams",permalink:"/docs/markdown-features/diagrams"}},h={},d=[{value:"Usage",id:"usage",level:2},{value:"Inline",id:"inline",level:3},{value:"Blocks",id:"blocks",level:3},{value:"Enabling math equations",id:"configuration",level:2},{value:"Self-hosting KaTeX assets",id:"self-hosting-katex-assets",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mspace:"mspace",msubsup:"msubsup",msup:"msup",mtext:"mtext",ol:"ol",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",...(0,t.a)(),...e.components},{Details:a}=s;return a||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"math-equations",children:"Math Equations"})}),"\n","\n",(0,n.jsxs)(s.p,{children:["Mathematical equations can be rendered using ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsxs)(s.p,{children:["Please read ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"})," documentation for more details."]}),"\n",(0,n.jsx)(s.h3,{id:"inline",children:"Inline"}),"\n",(0,n.jsxs)(s.p,{children:["Write inline math equations by wrapping LaTeX equations between ",(0,n.jsx)(s.code,{children:"$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"Let $f\\colon[a,b]\\to\\R$ be Riemann integrable. Let $F\\colon[a,b]\\to\\R$ be\n$F(x)=\\int_{a}^{x} f(t)\\,dt$. Then $F$ is continuous, and at all $x$ such that\n$f$ is continuous at $x$, $F$ is differentiable at $x$ with $F'(x)=f(x)$.\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(s.p,{children:["Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f\\colon[a,b] \\to \\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be Riemann integrable. Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F\\colon[a,b]\\to\\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"t"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F(x)=\n\\int_{a}^{x} f(t)\\,dt"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.2151em",verticalAlign:"-0.3558em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol small-op",style:{marginRight:"0.19445em",position:"relative",top:"-0.0006em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"0.8593em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.3442em",marginLeft:"-0.1945em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"})})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.2579em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"x"})})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.3558em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]}),". Then ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is continuous, and at all ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," such that ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"f"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"})]})})]})," is continuous at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]}),", ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is differentiable at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," with ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F'(x)=f(x)"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"})]})]})]}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"blocks",children:"Blocks"}),"\n",(0,n.jsxs)(s.p,{children:["For equation block or display mode, use line breaks and ",(0,n.jsx)(s.code,{children:"$$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"$$\nI = \\int_0^{2\\pi} \\sin(x)\\,dx\n$$\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"I"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mn,{children:"0"}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mn,{children:"2"}),(0,n.jsx)(s.mi,{children:"\u03c0"})]})]}),(0,n.jsx)(s.mi,{children:"sin"}),(0,n.jsx)(s.mo,{children:"\u2061"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"I = \\int_0^{2\\pi} \\sin(x)\\,dx"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.476em",verticalAlign:"-0.9119em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol large-op",style:{marginRight:"0.44445em",position:"relative",top:"-0.0011em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.564em"},children:[(0,n.jsxs)(s.span,{style:{top:"-1.7881em",marginLeft:"-0.4445em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"0"})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.8129em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(s.span,{className:"mord mtight",children:[(0,n.jsx)(s.span,{className:"mord mtight",children:"2"}),(0,n.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"\u03c0"})]})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.9119em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mop",children:"sin"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})]})]})})}),"\n",(0,n.jsx)(s.h2,{id:"configuration",children:"Enabling math equations"}),"\n",(0,n.jsx)(s.p,{children:"Enable KaTeX:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Install the ",(0,n.jsx)(s.code,{children:"remark-math"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex"})," plugins:"]}),"\n",(0,n.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npm install --save remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"yarn add remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"pnpm add remark-math@6 rehype-katex@7\n"})})})]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["Make sure to use ",(0,n.jsx)(s.code,{children:"remark-math 6"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["These 2 plugins are ",(0,n.jsx)(s.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,n.jsx)(s.strong,{children:"only available as ES Modules"})}),". We recommended to use an ",(0,n.jsx)(s.a,{href:"https://flaviocopes.com/es-modules/",children:(0,n.jsx)(s.strong,{children:"ES Modules"})})," config file:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="ES module docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\n// highlight-start\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:(0,n.jsxs)(s.p,{children:["Using a\n",(0,n.jsx)(s.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:(0,n.jsx)(s.strong,{children:"CommonJS"})}),"\nconfig file?"]})}),(0,n.jsx)(s.p,{children:"If you decide to use a CommonJS config file, it is possible to load those ES module plugins thanks to dynamic imports and an async config creator function:"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="CommonJS module docusaurus.config.js"',children:"// highlight-start\nmodule.exports = async function createConfigAsync() {\n // highlight-end\n return {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [(await import('remark-math')).default],\n rehypePlugins: [(await import('rehype-katex')).default],\n // highlight-end\n },\n },\n ],\n ],\n };\n};\n"})})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Include the KaTeX CSS in your config under ",(0,n.jsx)(s.code,{children:"stylesheets"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"export default {\n //...\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n};\n"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:"See a config file example"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\nexport default {\n title: 'Docusaurus',\n tagline: 'Build optimized websites quickly, focus on your content',\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n // highlight-start\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n // highlight-end\n};\n"})})]}),"\n",(0,n.jsx)(s.h2,{id:"self-hosting-katex-assets",children:"Self-hosting KaTeX assets"}),"\n",(0,n.jsxs)(s.p,{children:["Loading stylesheets, fonts, and JavaScript libraries from CDN sources is a good practice for popular libraries and assets, since it reduces the amount of assets you have to host. In case you prefer to self-host the ",(0,n.jsx)(s.code,{children:"katex.min.css"})," (along with required KaTeX fonts), you can download the latest version from ",(0,n.jsx)(s.a,{href:"https://github.com/KaTeX/KaTeX/releases",children:"KaTeX GitHub releases"}),", extract and copy ",(0,n.jsx)(s.code,{children:"katex.min.css"})," and ",(0,n.jsx)(s.code,{children:"fonts"})," directory (only ",(0,n.jsx)(s.code,{children:".woff2"})," font types should be enough) to your site's ",(0,n.jsx)(s.code,{children:"static"})," directory, and in ",(0,n.jsx)(s.code,{children:"docusaurus.config.js"}),", replace the stylesheet's ",(0,n.jsx)(s.code,{children:"href"})," from the CDN URL to your local path (say, ",(0,n.jsx)(s.code,{children:"/katex/katex.min.css"}),")."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n stylesheets: [\n {\n href: '/katex/katex.min.css',\n type: 'text/css',\n },\n ],\n};\n"})})]})}function p(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>l});var n=a(27378);const t={},r=n.createContext(t);function l(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5785f4e1.e0b3f5e4.js b/assets/js/5785f4e1.e0b3f5e4.js new file mode 100644 index 000000000000..be8f76861178 --- /dev/null +++ b/assets/js/5785f4e1.e0b3f5e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1040],{61132:(e,s,a)=>{a.d(s,{Z:()=>l});var n=a(24246),t=(a(27378),a(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:s,className:a}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,a),hidden:s,children:e})}},97555:(e,s,a)=>{a.d(s,{Z:()=>R});var n=a(24246),t=a(27378),r=a(40624),l=a(75527),i=a(3620),c=a(44479),m=a(62821),o=a(52196),h=a(53589);function d(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function x(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function p(e){var s,a;return null!==(a=null===(s=t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==a?a:[]}function u(e){const{values:s,children:a}=e;return(0,t.useMemo)((()=>{const e=null!=s?s:function(e){return p(e).map((({props:{value:e,label:s,attributes:a,default:n}})=>({value:e,label:s,attributes:a,default:n})))}(a);return function(e){const s=(0,o.lx)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,a])}function j({value:e,tabValues:s}){return s.some((s=>s.value===e))}function g({queryString:e=!1,groupId:s}){const a=(0,i.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,m._X)(n),l=(0,t.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(a.location.search);s.set(n,e),a.replace(x(function(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){d(e,s,a[s])}))}return e}({},a.location),{search:s.toString()}))}),[n,a]);return[r,l]}function f(e){const{defaultValue:s,queryString:a=!1,groupId:n}=e,r=u(e),[l,i]=(0,t.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!j({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var a;const n=null!==(a=s.find((e=>e.default)))&&void 0!==a?a:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[m,o]=g({queryString:a,groupId:n}),[d,x]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[a,n]=(0,h.Nk)(s);return[a,(0,t.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),p=(()=>{const e=null!=m?m:d;return j({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),o(e),x(e)}),[o,x,r]),tabValues:r}}var b=a(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function N(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function w(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){N(e,s,a[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function v({className:e,block:s,selectedValue:a,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),o=e=>{const s=e.currentTarget,n=c.indexOf(s),r=i[n].value;r!==a&&(m(s),t(r))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var a;s=null!==(a=c[n])&&void 0!==a?a:c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;var n;s=null!==(n=c[a])&&void 0!==n?n:c[c.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:i.map((({value:e,label:s,attributes:t})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:a===e?0:-1,"aria-selected":a===e,ref:e=>c.push(e),onKeyDown:h,onClick:o},t),{className:(0,r.Z)("tabs__item",y.tabItem,null==t?void 0:t.className,{"tabs__item--active":a===e}),children:null!=s?s:e}),e)))})}function O({lazy:e,children:s,selectedValue:a}){const l=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===a));return e?(0,t.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function M(e){const s=f(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(v,w({},s,e)),(0,n.jsx)(O,w({},s,e))]})}function R(e){const s=(0,b.Z)();return(0,n.jsx)(M,k(w({},e),{children:p(e.children)}),String(s))}},6698:(e,s,a)=>{a.d(s,{Z:()=>m});var n=a(24246),t=(a(27378),a(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function i(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){l(e,s,a[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function m({children:e,minHeight:s,url:a="http://localhost:3000",style:l,bodyStyle:m}){return(0,n.jsxs)("div",{className:r.browserWindow,style:c(i({},l),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,t.Z)(r.browserWindowAddressBar,"text--truncate"),children:a}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:m,children:e})]})}},75461:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var n=a(24246),t=a(71670),r=a(97555),l=a(61132),i=a(6698);const c={id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},m="Math Equations",o={id:"guides/markdown-features/math-equations",title:"Math Equations",description:"Writing LaTeX Math Equations",source:"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/math-equations",permalink:"/docs/markdown-features/math-equations",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},sidebar:"docs",previous:{title:"MDX Plugins",permalink:"/docs/markdown-features/plugins"},next:{title:"Diagrams",permalink:"/docs/markdown-features/diagrams"}},h={},d=[{value:"Usage",id:"usage",level:2},{value:"Inline",id:"inline",level:3},{value:"Blocks",id:"blocks",level:3},{value:"Enabling math equations",id:"configuration",level:2},{value:"Self-hosting KaTeX assets",id:"self-hosting-katex-assets",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mspace:"mspace",msubsup:"msubsup",msup:"msup",mtext:"mtext",ol:"ol",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",...(0,t.a)(),...e.components},{Details:a}=s;return a||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"math-equations",children:"Math Equations"})}),"\n","\n",(0,n.jsxs)(s.p,{children:["Mathematical equations can be rendered using ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsxs)(s.p,{children:["Please read ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"})," documentation for more details."]}),"\n",(0,n.jsx)(s.h3,{id:"inline",children:"Inline"}),"\n",(0,n.jsxs)(s.p,{children:["Write inline math equations by wrapping LaTeX equations between ",(0,n.jsx)(s.code,{children:"$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"Let $f\\colon[a,b]\\to\\R$ be Riemann integrable. Let $F\\colon[a,b]\\to\\R$ be\n$F(x)=\\int_{a}^{x} f(t)\\,dt$. Then $F$ is continuous, and at all $x$ such that\n$f$ is continuous at $x$, $F$ is differentiable at $x$ with $F'(x)=f(x)$.\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(s.p,{children:["Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f\\colon[a,b] \\to \\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be Riemann integrable. Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F\\colon[a,b]\\to\\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"t"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F(x)=\n\\int_{a}^{x} f(t)\\,dt"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.2151em",verticalAlign:"-0.3558em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol small-op",style:{marginRight:"0.19445em",position:"relative",top:"-0.0006em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"0.8593em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.3442em",marginLeft:"-0.1945em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"})})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.2579em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"x"})})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.3558em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]}),". Then ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is continuous, and at all ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," such that ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"f"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"})]})})]})," is continuous at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]}),", ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is differentiable at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," with ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F'(x)=f(x)"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"})]})]})]}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"blocks",children:"Blocks"}),"\n",(0,n.jsxs)(s.p,{children:["For equation block or display mode, use line breaks and ",(0,n.jsx)(s.code,{children:"$$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"$$\nI = \\int_0^{2\\pi} \\sin(x)\\,dx\n$$\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"I"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mn,{children:"0"}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mn,{children:"2"}),(0,n.jsx)(s.mi,{children:"\u03c0"})]})]}),(0,n.jsx)(s.mi,{children:"sin"}),(0,n.jsx)(s.mo,{children:"\u2061"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"I = \\int_0^{2\\pi} \\sin(x)\\,dx"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.476em",verticalAlign:"-0.9119em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol large-op",style:{marginRight:"0.44445em",position:"relative",top:"-0.0011em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.564em"},children:[(0,n.jsxs)(s.span,{style:{top:"-1.7881em",marginLeft:"-0.4445em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"0"})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.8129em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(s.span,{className:"mord mtight",children:[(0,n.jsx)(s.span,{className:"mord mtight",children:"2"}),(0,n.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"\u03c0"})]})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.9119em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mop",children:"sin"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})]})]})})}),"\n",(0,n.jsx)(s.h2,{id:"configuration",children:"Enabling math equations"}),"\n",(0,n.jsx)(s.p,{children:"Enable KaTeX:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Install the ",(0,n.jsx)(s.code,{children:"remark-math"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex"})," plugins:"]}),"\n",(0,n.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npm install --save remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"yarn add remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"pnpm add remark-math@6 rehype-katex@7\n"})})})]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["Make sure to use ",(0,n.jsx)(s.code,{children:"remark-math 6"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["These 2 plugins are ",(0,n.jsx)(s.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,n.jsx)(s.strong,{children:"only available as ES Modules"})}),". We recommended to use an ",(0,n.jsx)(s.a,{href:"https://flaviocopes.com/es-modules/",children:(0,n.jsx)(s.strong,{children:"ES Modules"})})," config file:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="ES module docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\n// highlight-start\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:(0,n.jsxs)(s.p,{children:["Using a\n",(0,n.jsx)(s.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:(0,n.jsx)(s.strong,{children:"CommonJS"})}),"\nconfig file?"]})}),(0,n.jsx)(s.p,{children:"If you decide to use a CommonJS config file, it is possible to load those ES module plugins thanks to dynamic imports and an async config creator function:"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="CommonJS module docusaurus.config.js"',children:"// highlight-start\nmodule.exports = async function createConfigAsync() {\n // highlight-end\n return {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [(await import('remark-math')).default],\n rehypePlugins: [(await import('rehype-katex')).default],\n // highlight-end\n },\n },\n ],\n ],\n };\n};\n"})})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Include the KaTeX CSS in your config under ",(0,n.jsx)(s.code,{children:"stylesheets"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"export default {\n //...\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n};\n"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:"See a config file example"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\nexport default {\n title: 'Docusaurus',\n tagline: 'Build optimized websites quickly, focus on your content',\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n // highlight-start\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n // highlight-end\n};\n"})})]}),"\n",(0,n.jsx)(s.h2,{id:"self-hosting-katex-assets",children:"Self-hosting KaTeX assets"}),"\n",(0,n.jsxs)(s.p,{children:["Loading stylesheets, fonts, and JavaScript libraries from CDN sources is a good practice for popular libraries and assets, since it reduces the amount of assets you have to host. In case you prefer to self-host the ",(0,n.jsx)(s.code,{children:"katex.min.css"})," (along with required KaTeX fonts), you can download the latest version from ",(0,n.jsx)(s.a,{href:"https://github.com/KaTeX/KaTeX/releases",children:"KaTeX GitHub releases"}),", extract and copy ",(0,n.jsx)(s.code,{children:"katex.min.css"})," and ",(0,n.jsx)(s.code,{children:"fonts"})," directory (only ",(0,n.jsx)(s.code,{children:".woff2"})," font types should be enough) to your site's ",(0,n.jsx)(s.code,{children:"static"})," directory, and in ",(0,n.jsx)(s.code,{children:"docusaurus.config.js"}),", replace the stylesheet's ",(0,n.jsx)(s.code,{children:"href"})," from the CDN URL to your local path (say, ",(0,n.jsx)(s.code,{children:"/katex/katex.min.css"}),")."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n stylesheets: [\n {\n href: '/katex/katex.min.css',\n type: 'text/css',\n },\n ],\n};\n"})})]})}function p(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>l});var n=a(27378);const t={},r=n.createContext(t);function l(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/59cb67ce.8773c246.js b/assets/js/59cb67ce.64dd4037.js similarity index 51% rename from assets/js/59cb67ce.8773c246.js rename to assets/js/59cb67ce.64dd4037.js index b8e343883ee2..2e314d78f8ae 100644 --- a/assets/js/59cb67ce.8773c246.js +++ b/assets/js/59cb67ce.64dd4037.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[17490],{18142:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>g,contentTitle:()=>x,default:()=>f,frontMatter:()=>u,metadata:()=>j,toc:()=>b});var s=n(24246),a=n(71670);const i=[{value:"Partial",id:"partial",level:2},{value:"Partial Sub Heading 1",id:"partial-sub-heading-1",level:3},{value:"Partial Sub Sub Heading 1",id:"partial-sub-sub-heading-1",level:4},{value:"Partial Sub Heading 2",id:"partial-sub-heading-2",level:3},{value:"Partial Sub Sub Heading 2",id:"partial-sub-sub-heading-2",level:4}];function r(e){const t={h2:"h2",h3:"h3",h4:"h4",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"partial",children:"Partial"}),"\n",(0,s.jsx)(t.p,{children:"Partial intro"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-1",children:"Partial Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-1",children:"Partial Sub Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-2",children:"Partial Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 2 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-2",children:"Partial Sub Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 2 content"})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}l.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_partial.mdx)";function o(e){const t={h3:"h3",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h3,{id:"2nd-level-partial",children:"2nd level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 2 levels deep."})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}d.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_second-level-partial.mdx)";const c=[{value:"1st level partial",id:"1st-level-partial",level:2},{value:"2nd level partial",id:"2nd-level-partial",level:3}];function p(e){const t={h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"1st-level-partial",children:"1st level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 1 level deep."}),"\n",(0,s.jsx)(d,{})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}h.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_first-level-partial.mdx)";const u={},x="TOC partial test",j={id:"tests/toc-partials/index",title:"TOC partial test",description:"This page tests that MDX-imported content appears correctly in the table-of-contents",source:"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx",sourceDirName:"tests/toc-partials",slug:"/tests/toc-partials/",permalink:"/tests/docs/tests/toc-partials/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Test links",permalink:"/tests/docs/tests/links/test-markdown-links"},next:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"}},g={},b=[...i,...i,...c,...c];function m(e){const t={a:"a",h1:"h1",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"toc-partial-test",children:"TOC partial test"})}),"\n",(0,s.jsx)(t.p,{children:"This page tests that MDX-imported content appears correctly in the table-of-contents"}),"\n",(0,s.jsx)(t.p,{children:"See also:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3915",children:"https://github.com/facebook/docusaurus/issues/3915"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"https://github.com/facebook/docusaurus/pull/9684"})}),"\n"]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"The table of contents should include headings of this partial"}),":"]}),"\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import the same partial using a different name and it still works"}),":"]}),"\n","\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import a partial and not use it, the TOC remains unaffected"}),":"]}),"\n","\n",(0,s.jsx)(t.hr,{}),"\n","\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"It also works for partials importing other partials"})}),"\n",(0,s.jsx)(h,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"And we can even use the same partial twice!"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"(although it's useless and not particularly recommended because headings will have the same ids)"})}),"\n",(0,s.jsx)(h,{})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}f.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/index.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>r});var s=n(27378);const a={},i=s.createContext(a);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[17490],{18142:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>g,contentTitle:()=>x,default:()=>f,frontMatter:()=>u,metadata:()=>j,toc:()=>m});var s=n(24246),a=n(71670);const i=[{value:"Partial",id:"partial",level:2},{value:"Partial Sub Heading 1",id:"partial-sub-heading-1",level:3},{value:"Partial Sub Sub Heading 1",id:"partial-sub-sub-heading-1",level:4},{value:"Partial Sub Heading 2",id:"partial-sub-heading-2",level:3},{value:"Partial Sub Sub Heading 2",id:"partial-sub-sub-heading-2",level:4}];function r(e){const t={h2:"h2",h3:"h3",h4:"h4",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"partial",children:"Partial"}),"\n",(0,s.jsx)(t.p,{children:"Partial intro"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-1",children:"Partial Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-1",children:"Partial Sub Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-2",children:"Partial Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 2 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-2",children:"Partial Sub Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 2 content"})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}l.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_partial.mdx)";function o(e){const t={h3:"h3",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h3,{id:"2nd-level-partial",children:"2nd level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 2 levels deep."})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}d.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_second-level-partial.mdx)";const c=[{value:"1st level partial",id:"1st-level-partial",level:2},{value:"2nd level partial",id:"2nd-level-partial",level:3}];function p(e){const t={h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"1st-level-partial",children:"1st level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 1 level deep."}),"\n",(0,s.jsx)(d,{})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}h.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/_first-level-partial.mdx)";const u={},x="TOC partial test",j={id:"tests/toc-partials/index",title:"TOC partial test",description:"This page tests that MDX-imported content appears correctly in the table-of-contents",source:"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx",sourceDirName:"tests/toc-partials",slug:"/tests/toc-partials/",permalink:"/tests/docs/tests/toc-partials/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Test links",permalink:"/tests/docs/tests/links/test-markdown-links"},next:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"}},g={},m=[...i,...i,...c,...c];function b(e){const t={a:"a",h1:"h1",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"toc-partial-test",children:"TOC partial test"})}),"\n",(0,s.jsx)(t.p,{children:"This page tests that MDX-imported content appears correctly in the table-of-contents"}),"\n",(0,s.jsx)(t.p,{children:"See also:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3915",children:"https://github.com/facebook/docusaurus/issues/3915"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"https://github.com/facebook/docusaurus/pull/9684"})}),"\n"]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"The table of contents should include headings of this partial"}),":"]}),"\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import the same partial using a different name and it still works"}),":"]}),"\n","\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import a partial and not use it, the TOC remains unaffected"}),":"]}),"\n","\n",(0,s.jsx)(t.hr,{}),"\n","\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"It also works for partials importing other partials"})}),"\n",(0,s.jsx)(h,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"And we can even use the same partial twice!"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"(although it's useless and not particularly recommended because headings will have the same ids)"})}),"\n",(0,s.jsx)(h,{})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}f.displayName="MDXContent(_dogfooding/_docs tests/tests/toc-partials/index.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>r});var s=n(27378);const a={},i=s.createContext(a);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c640cab.ae4cad82.js b/assets/js/5c640cab.ae4cad82.js deleted file mode 100644 index f0b8080570b4..000000000000 --- a/assets/js/5c640cab.ae4cad82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97265],{21223:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var i=a(24246),n=a(71670);const o={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},r=void 0,s={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{inline:!1,label:"Endi",permalink:"/blog/tags/endi"},{inline:!1,label:"Tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function l(e){const t={a:"a",p:"p",...(0,n.a)(),...e.components};return(0,i.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,i.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,i.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var i=a(27378);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c640cab.ea2a1918.js b/assets/js/5c640cab.ea2a1918.js new file mode 100644 index 000000000000..324a9575a8ef --- /dev/null +++ b/assets/js/5c640cab.ea2a1918.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97265],{21223:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=a(24246),i=a(71670);const o={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},r=void 0,s={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{inline:!1,label:"Endi",permalink:"/blog/tags/endi"},{inline:!1,label:"Tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function l(e){const t={a:"a",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,n.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,n.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(27378);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c7aa639.8f25b359.js b/assets/js/5c7aa639.1c50ec7a.js similarity index 51% rename from assets/js/5c7aa639.8f25b359.js rename to assets/js/5c7aa639.1c50ec7a.js index a1ef7e664e6f..ba654b011558 100644 --- a/assets/js/5c7aa639.8f25b359.js +++ b/assets/js/5c7aa639.1c50ec7a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29289],{80089:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZGIiBkPSJNOTkgNTJoODR2MzRIOTl6Ii8+PHBhdGggZD0iTTIzIDE2M2MtNy4zOTggMC0xMy44NDMtNC4wMjctMTcuMzAzLTEwQTE5Ljg4NiAxOS44ODYgMCAwMDMgMTYzYzAgMTEuMDQ2IDguOTU0IDIwIDIwIDIwaDIwdi0yMEgyM3oiIGZpbGw9IiMzRUNDNUYiLz48cGF0aCBkPSJNMTEyLjk4IDU3LjM3NkwxODMgNTNWNDNjMC0xMS4wNDYtOC45NTQtMjAtMjAtMjBINzNsLTIuNS00LjMzYy0xLjExMi0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNjMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNTMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNDMgMjNjLS4wMjIgMC0uMDQyLjAwMy0uMDY1LjAwM2wtNC4xNDItNC4xNDFjLTEuNTctMS41NzEtNC4yNTItLjg1My00LjgyOCAxLjI5NGwtMS4zNjkgNS4xMDQtNS4xOTItMS4zOTJjLTIuMTQ4LS41NzUtNC4xMTEgMS4zODktMy41MzUgMy41MzZsMS4zOSA1LjE5My01LjEwMiAxLjM2N2MtMi4xNDguNTc2LTIuODY3IDMuMjU5LTEuMjk2IDQuODNsNC4xNDIgNC4xNDJjMCAuMDIxLS4wMDMuMDQyLS4wMDMuMDY0bC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDYzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDczbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDgzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDkzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEwM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxMTNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTIzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEzM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxNDNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDE2M2MwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMGgxMjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWODNsLTcwLjAyLTQuMzc2QTEwLjY0NSAxMC42NDUgMCAwMTEwMyA2OGMwLTUuNjIxIDQuMzctMTAuMjczIDkuOTgtMTAuNjI0IiBmaWxsPSIjM0VDQzVGIi8+PHBhdGggZmlsbD0iIzNFQ0M1RiIgZD0iTTE0MyAxODNoMzB2LTQwaC0zMHoiLz48cGF0aCBkPSJNMTkzIDE1OGMtLjIxOSAwLS40MjguMDM3LS42MzkuMDY0LS4wMzgtLjE1LS4wNzQtLjMwMS0uMTE2LS40NTFBNSA1IDAgMDAxOTAuMzIgMTQ4YTQuOTYgNC45NiAwIDAwLTMuMDE2IDEuMDM2IDI2LjUzMSAyNi41MzEgMCAwMC0uMzM1LS4zMzYgNC45NTUgNC45NTUgMCAwMDEuMDExLTIuOTg3IDUgNSAwIDAwLTkuNTk5LTEuOTU5Yy0uMTQ4LS4wNDItLjI5Ny0uMDc3LS40NDUtLjExNS4wMjctLjIxMS4wNjQtLjQyLjA2NC0uNjM5YTUgNSAwIDAwLTUtNSA1IDUgMCAwMC01IDVjMCAuMjE5LjAzNy40MjguMDY0LjYzOS0uMTQ4LjAzOC0uMjk3LjA3My0uNDQ1LjExNWE0Ljk5OCA0Ljk5OCAwIDAwLTkuNTk5IDEuOTU5YzAgMS4xMjUuMzg0IDIuMTUxIDEuMDExIDIuOTg3LTMuNzE3IDMuNjMyLTYuMDMxIDguNjkzLTYuMDMxIDE0LjMgMCAxMS4wNDYgOC45NTQgMjAgMjAgMjAgOS4zMzkgMCAxNy4xNi02LjQxIDE5LjM2MS0xNS4wNjQuMjExLjAyNy40Mi4wNjQuNjM5LjA2NGE1IDUgMCAwMDUtNSA1IDUgMCAwMC01LTUiIGZpbGw9IiM0NEQ4NjAiLz48cGF0aCBmaWxsPSIjM0VDQzVGIiBkPSJNMTUzIDEyM2gzMHYtMjBoLTMweiIvPjxwYXRoIGQ9Ik0xOTMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDE4MyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik02MyA1NS41YTIuNSAyLjUgMCAwMS0yLjUtMi41YzAtNC4xMzYtMy4zNjQtNy41LTcuNS03LjVzLTcuNSAzLjM2NC03LjUgNy41YTIuNSAyLjUgMCAxMS01IDBjMC02Ljg5MyA1LjYwNy0xMi41IDEyLjUtMTIuNVM2NS41IDQ2LjEwNyA2NS41IDUzYTIuNSAyLjUgMCAwMS0yLjUgMi41IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEwMyAxODNoNjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWOTNoLTYwYy0xMS4wNDYgMC0yMCA4Ljk1NC0yMCAyMHY3MHoiIGZpbGw9IiNGRkZGNTAiLz48cGF0aCBkPSJNMTY4LjAyIDEyNGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMC00OS44MTRoLTUwLjA0YTEgMSAwIDExMC0yaDUwLjA0YTEgMSAwIDExMCAybTAgMTkuODE0aC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMm0wIDIwaC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMk0xODMgNjEuNjExYy0uMDEyIDAtLjAyMi0uMDA2LS4wMzQtLjAwNS0zLjA5LjEwNS00LjU1MiAzLjE5Ni01Ljg0MiA1LjkyMy0xLjM0NiAyLjg1LTIuMzg3IDQuNzAzLTQuMDkzIDQuNjQ3LTEuODg5LS4wNjgtMi45NjktMi4yMDItNC4xMTMtNC40Ni0xLjMxNC0yLjU5NC0yLjgxNC01LjUzNi01Ljk2My01LjQyNi0zLjA0Ni4xMDQtNC41MTMgMi43OTQtNS44MDcgNS4xNjctMS4zNzcgMi41MjgtMi4zMTQgNC4wNjUtNC4xMjEgMy45OTQtMS45MjctLjA3LTIuOTUxLTEuODA1LTQuMTM2LTMuODEzLTEuMzIxLTIuMjM2LTIuODQ4LTQuNzUtNS45MzYtNC42NjQtMi45OTQuMTAzLTQuNDY1IDIuMzg1LTUuNzYzIDQuNC0xLjM3MyAyLjEzLTIuMzM1IDMuNDI4LTQuMTY1IDMuMzUxLTEuOTczLS4wNy0yLjk5Mi0xLjUxLTQuMTcxLTMuMTc3LTEuMzI0LTEuODczLTIuODE2LTMuOTkzLTUuODk1LTMuODktMi45MjguMS00LjM5OSAxLjk3LTUuNjk2IDMuNjE4LTEuMjMyIDEuNTY0LTIuMTk0IDIuODAyLTQuMjI5IDIuNzI0YTEgMSAwIDAwLS4wNzIgMmMzLjAxNy4xMDEgNC41NDUtMS44IDUuODcyLTMuNDg3IDEuMTc3LTEuNDk2IDIuMTkzLTIuNzg3IDQuMTkzLTIuODU1IDEuOTI2LS4wODIgMi44MjkgMS4xMTUgNC4xOTUgMy4wNDUgMS4yOTcgMS44MzQgMi43NjkgMy45MTQgNS43MzEgNC4wMjEgMy4xMDMuMTA0IDQuNTk2LTIuMjE1IDUuOTE4LTQuMjY3IDEuMTgyLTEuODM0IDIuMjAyLTMuNDE3IDQuMTUtMy40ODQgMS43OTMtLjA2NyAyLjc2OSAxLjM1IDQuMTQ1IDMuNjgxIDEuMjk3IDIuMTk3IDIuNzY2IDQuNjg2IDUuNzg3IDQuNzk2IDMuMTI1LjEwOCA0LjYzNC0yLjYyIDUuOTQ5LTUuMDM1IDEuMTM5LTIuMDg4IDIuMjE0LTQuMDYgNC4xMTktNC4xMjYgMS43OTMtLjA0MiAyLjcyOCAxLjU5NSA0LjExMSA0LjMzIDEuMjkyIDIuNTUzIDIuNzU3IDUuNDQ1IDUuODI1IDUuNTU2bC4xNjkuMDAzYzMuMDY0IDAgNC41MTgtMy4wNzUgNS44MDUtNS43OTQgMS4xMzktMi40MSAyLjIxNy00LjY4IDQuMDY3LTQuNzczdi0yeiIgZmlsbD0iIzAwMCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxODNoNDB2LTQwSDgzeiIvPjxwYXRoIGQ9Ik0xNDMgMTU4Yy0uMjE5IDAtLjQyOC4wMzctLjYzOS4wNjQtLjAzOC0uMTUtLjA3NC0uMzAxLS4xMTYtLjQ1MUE1IDUgMCAwMDE0MC4zMiAxNDhhNC45NiA0Ljk2IDAgMDAtMy4wMTYgMS4wMzYgMjYuNTMxIDI2LjUzMSAwIDAwLS4zMzUtLjMzNiA0Ljk1NSA0Ljk1NSAwIDAwMS4wMTEtMi45ODcgNSA1IDAgMDAtOS41OTktMS45NTljLS4xNDgtLjA0Mi0uMjk3LS4wNzctLjQ0NS0uMTE1LjAyNy0uMjExLjA2NC0uNDIuMDY0LS42MzlhNSA1IDAgMDAtNS01IDUgNSAwIDAwLTUgNWMwIC4yMTkuMDM3LjQyOC4wNjQuNjM5LS4xNDguMDM4LS4yOTcuMDczLS40NDUuMTE1YTQuOTk4IDQuOTk4IDAgMDAtOS41OTkgMS45NTljMCAxLjEyNS4zODQgMi4xNTEgMS4wMTEgMi45ODctMy43MTcgMy42MzItNi4wMzEgOC42OTMtNi4wMzEgMTQuMyAwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMCA5LjMzOSAwIDE3LjE2LTYuNDEgMTkuMzYxLTE1LjA2NC4yMTEuMDI3LjQyLjA2NC42MzkuMDY0YTUgNSAwIDAwNS01IDUgNSAwIDAwLTUtNSIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxMjNoNDB2LTIwSDgzeiIvPjxwYXRoIGQ9Ik0xMzMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDEyMyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik0xNDMgNDEuNzVjLS4xNiAwLS4zMy0uMDItLjQ5LS4wNWEyLjUyIDIuNTIgMCAwMS0uNDctLjE0Yy0uMTUtLjA2LS4yOS0uMTQtLjQzMS0uMjMtLjEzLS4wOS0uMjU5LS4yLS4zOC0uMzEtLjEwOS0uMTItLjIxOS0uMjQtLjMwOS0uMzhzLS4xNy0uMjgtLjIzMS0uNDNhMi42MTkgMi42MTkgMCAwMS0uMTg5LS45NmMwLS4xNi4wMi0uMzMuMDUtLjQ5LjAzLS4xNi4wOC0uMzEuMTM5LS40Ny4wNjEtLjE1LjE0MS0uMjkuMjMxLS40My4wOS0uMTMuMi0uMjYuMzA5LS4zOC4xMjEtLjExLjI1LS4yMi4zOC0uMzEuMTQxLS4wOS4yODEtLjE3LjQzMS0uMjMuMTQ5LS4wNi4zMS0uMTEuNDctLjE0LjMyLS4wNy42NS0uMDcuOTggMCAuMTU5LjAzLjMyLjA4LjQ3LjE0LjE0OS4wNi4yOS4xNC40My4yMy4xMy4wOS4yNTkuMi4zOC4zMS4xMS4xMi4yMi4yNS4zMS4zOC4wOS4xNC4xNy4yOC4yMy40My4wNi4xNi4xMS4zMS4xNC40Ny4wMjkuMTYuMDUuMzMuMDUuNDkgMCAuNjYtLjI3MSAxLjMxLS43MyAxLjc3LS4xMjEuMTEtLjI1LjIyLS4zOC4zMS0uMTQuMDktLjI4MS4xNy0uNDMuMjNhMi41NjUgMi41NjUgMCAwMS0uOTYuMTltMjAtMS4yNWMtLjY2IDAtMS4zLS4yNy0xLjc3MS0uNzNhMy44MDIgMy44MDIgMCAwMS0uMzA5LS4zOGMtLjA5LS4xNC0uMTctLjI4LS4yMzEtLjQzYTIuNjE5IDIuNjE5IDAgMDEtLjE4OS0uOTZjMC0uNjYuMjctMS4zLjcyOS0xLjc3LjEyMS0uMTEuMjUtLjIyLjM4LS4zMS4xNDEtLjA5LjI4MS0uMTcuNDMxLS4yMy4xNDktLjA2LjMxLS4xMS40Ny0uMTQuMzItLjA3LjY2LS4wNy45OCAwIC4xNTkuMDMuMzIuMDguNDcuMTQuMTQ5LjA2LjI5LjE0LjQzLjIzLjEzLjA5LjI1OS4yLjM4LjMxLjQ1OS40Ny43MyAxLjExLjczIDEuNzcgMCAuMTYtLjAyMS4zMy0uMDUuNDktLjAzLjE2LS4wOC4zMi0uMTQuNDctLjA3LjE1LS4xNC4yOS0uMjMuNDMtLjA5LjEzLS4yLjI2LS4zMS4zOC0uMTIxLjExLS4yNS4yMi0uMzguMzEtLjE0LjA5LS4yODEuMTctLjQzLjIzYTIuNTY1IDIuNTY1IDAgMDEtLjk2LjE5IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPgo="},17424:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},51374:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},65228:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},56799:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>n,default:()=>l,frontMatter:()=>u,metadata:()=>M,toc:()=>a});var o=s(24246),i=s(71670);const u={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},n=void 0,M={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Documentation",permalink:"/blog/tags/documentation"},{inline:!1,label:"Blog",permalink:"/blog/tags/blog"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},r={authorsImageUrls:[void 0]},a=[{value:"The Birth of docusaurus",id:"the-birth-of-docusaurus",level:2},{value:"Getting Up and Running",id:"getting-up-and-running",level:2},{value:"How does Docusaurus work?",id:"how-does-docusaurus-work",level:2},{value:"Community",id:"community",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2},{value:"Resources",id:"resources",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(51374).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["We are very happy to introduce ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,o.jsxs)(t.p,{children:["We created ",(0,o.jsx)(t.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,o.jsx)(t.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,o.jsx)(t.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,o.jsx)(t.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"install"})," it using ",(0,o.jsx)(t.code,{children:"npm"})," or ",(0,o.jsx)(t.code,{children:"yarn"})," via a simple initialization script that ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"creates a working example website out of the box"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus also provides core website and documentation features out-of-the-box including ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog support"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/translation.html",children:"internationalization"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/search.html",children:"search"}),", and ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/versioning.html",children:"versioning"}),". While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added."]}),"\n",(0,o.jsx)(t.h2,{id:"the-birth-of-docusaurus",children:"The Birth of docusaurus"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(17424).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsx)(t.p,{children:"When Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings."}),"\n",(0,o.jsx)(t.p,{children:"The open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well."}),"\n",(0,o.jsx)(t.p,{children:'The problem with the "copy the template to your repo" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to "copy" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.'}),"\n",(0,o.jsx)(t.p,{children:"So we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes."}),"\n",(0,o.jsx)(t.p,{children:"Docusaurus was born!"}),"\n",(0,o.jsx)(t.p,{children:"At Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don't have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation."}),"\n",(0,o.jsx)(t.h2,{id:"getting-up-and-running",children:"Getting Up and Running"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(65228).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["At its core, we wanted sites running Docusaurus to be simple to use. With one ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation"})," command and some simple ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"configuration"}),", you can actually have a default running website."]}),"\n",(0,o.jsxs)(t.p,{children:["When you run ",(0,o.jsx)(t.code,{children:"docusaurus-init"}),", you will see a structure similar to:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-repo\n\u251c\u2500\u2500 docs-examples-from-docusaurus\n\u2502 \u251c\u2500\u2500 doc1.md\n\u2502 \u251c\u2500\u2500 doc2.md\n\u2502 \u251c\u2500\u2500 doc3.md\n\u2502 \u251c\u2500\u2500 example-doc4.md\n\u2502 \u2514\u2500\u2500 example-doc5.md\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\n\u2502 \u251c\u2500\u2500 node_modules\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u251c\u2500\u2500 sidebars.json\n\u2502 \u251c\u2500\u2500 siteConfig.js\n\u2502 \u2514\u2500\u2500 static\n"})}),"\n",(0,o.jsxs)(t.p,{children:["With the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog posts"}),"; ",(0,o.jsx)(t.code,{children:"siteConfig.js"})," is where you make most of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-config.html",children:"customizations"})," for your site; ",(0,o.jsx)(t.code,{children:"sidebars.json"})," is where you maintain the layout and content of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/navigation.html",children:"sidebar"})," for your documentation; the ",(0,o.jsx)(t.code,{children:"pages"})," folder is where you add ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/custom-pages.html",children:"custom"})," pages for your site; the ",(0,o.jsx)(t.code,{children:"static"})," folder is where all of your static assets go (e.g., CSS stylesheets and images); and the ",(0,o.jsx)(t.code,{children:"core"})," folder is where you can customize core components of the site, in this case the footer."]}),"\n",(0,o.jsx)(t.h2,{id:"how-does-docusaurus-work",children:"How does Docusaurus work?"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is written primarily in JavaScript and ",(0,o.jsx)(t.a,{href:"https://facebook.github.io/react",children:"React"}),", replacing Jekyll which we used in the old template. We use ",(0,o.jsx)(t.a,{href:"https://github.com/jonschlinkert/remarkable",children:"Remarkable"})," for our Markdown rendering and ",(0,o.jsx)(t.a,{href:"https://highlightjs.org/",children:"highlight.js"})," for our code block syntax highlighting. The core of Docusaurus' functionality is in the ",(0,o.jsx)(t.a,{href:"https://github.com/facebookexperimental/Docusaurus/tree/master/lib",children:"lib directory"})," of the ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/",children:"Docusaurus repo"}),". The general structure looks like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-Docusaurus\n\u251c\u2500\u2500 lib\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u251c\u2500\u2500 server\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\n\u2502 \u2502 \u251c\u2500\u2500 server.js\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\n\u2502 \u251c\u2500\u2500 static\n\u2502 \u251c\u2500\u2500 build-files.js\n\u2502 \u251c\u2500\u2500 copy-examples.js\n\u2502 \u251c\u2500\u2500 generate-feed.js\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\n\u2502 \u251c\u2500\u2500 rename-version.js\n\u2502 \u251c\u2500\u2500 start-server.js\n\u2502 \u251c\u2500\u2500 versions.js\n\u2502 \u2514\u2500\u2500 write-translations.js\n"})}),"\n",(0,o.jsxs)(t.p,{children:["The key files here are build-files.js and start-server.js. There are many similarities between these two files: ",(0,o.jsx)(t.code,{children:"build-files.js"})," is used to build the physical artifacts for serving by an external web server. ",(0,o.jsx)(t.code,{children:"start-server.js"})," is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Process your website settings in ",(0,o.jsx)(t.code,{children:"siteConfig.js"})]}),"\n",(0,o.jsx)(t.li,{children:"Read the document metadata that exists in all the Markdown files in your docs directory."}),"\n",(0,o.jsx)(t.li,{children:"Create a table of contents for your documents based upon the IDs extracted from the metadata."}),"\n",(0,o.jsx)(t.li,{children:"Convert the Markdown to HTML, including doing link replacement."}),"\n",(0,o.jsx)(t.li,{children:"These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder."}),"\n",(0,o.jsx)(t.li,{children:"Repeat 1-3 for blog posts."}),"\n",(0,o.jsx)(t.li,{children:"The blog file will go in a build/blog directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Copy images into an build/img directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build."}),"\n",(0,o.jsx)(t.li,{children:"Create CNAME and sitemap.xml files and add those to build."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Note that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts."}),"\n",(0,o.jsx)(t.p,{children:"The final structure of your compiled site will look similar to:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"build\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 CNAME\n\u2502 \u251c\u2500\u2500 blog\n\u2502 \u251c\u2500\u2500 css\n\u2502 \u251c\u2500\u2500 docs\n\u2502 \u251c\u2500\u2500 en\n\u2502 \u251c\u2500\u2500 help.html # custom page\n\u2502 \u251c\u2500\u2500 img\n\u2502 \u251c\u2500\u2500 index.html # landing page\n\u2502 \u251c\u2500\u2500 sitemap.xml\n\u2502 \u2514\u2500\u2500 users.html # custom page\n"})}),"\n",(0,o.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(80089).Z+"",width:"200",height:"200"})}),"\n",(0,o.jsxs)(t.p,{children:["We welcome your ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contributions"})," to Docusaurus, whether you want to use it for your own site, you want to ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contribute"})," to the Docusaurus core or just have questions. Follow us on ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," and ",(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Twitter"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus wouldn't exist without the work of the rest of the core Docusaurus team: ",(0,o.jsx)(t.a,{href:"http://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/hectorramos",children:"Hector Ramos"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/EricVicenti",children:"Eric Vicenti"})," and ",(0,o.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})," \u2014 a former intern at Facebook who implemented the core technology and features."]}),"\n",(0,o.jsxs)(t.p,{children:["Special thanks also goes out to our earliest ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users.html",children:"adopters"})," of Docusaurus:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://bucklescript.github.io/",children:"BuckleScript"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://fasttext.cc",children:"FastText"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://jestjs.io",children:"Jest"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"http://makeitopen.com",children:"Make It Open"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://reasonml.github.io/reason-react/",children:"Reason-react"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/relay/",children:"Relay"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Without their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today."}),"\n",(0,o.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io",children:"Read our documentation"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Follow our Twitter feed"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Follow us on GitHub"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/about-slash.html",children:"About Slash, the Docusaurus mascot"})}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>M,a:()=>n});var o=s(27378);const i={},u=o.createContext(i);function n(e){const t=o.useContext(u);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function M(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),o.createElement(u.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29289],{80089:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZGIiBkPSJNOTkgNTJoODR2MzRIOTl6Ii8+PHBhdGggZD0iTTIzIDE2M2MtNy4zOTggMC0xMy44NDMtNC4wMjctMTcuMzAzLTEwQTE5Ljg4NiAxOS44ODYgMCAwMDMgMTYzYzAgMTEuMDQ2IDguOTU0IDIwIDIwIDIwaDIwdi0yMEgyM3oiIGZpbGw9IiMzRUNDNUYiLz48cGF0aCBkPSJNMTEyLjk4IDU3LjM3NkwxODMgNTNWNDNjMC0xMS4wNDYtOC45NTQtMjAtMjAtMjBINzNsLTIuNS00LjMzYy0xLjExMi0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNjMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNTMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNDMgMjNjLS4wMjIgMC0uMDQyLjAwMy0uMDY1LjAwM2wtNC4xNDItNC4xNDFjLTEuNTctMS41NzEtNC4yNTItLjg1My00LjgyOCAxLjI5NGwtMS4zNjkgNS4xMDQtNS4xOTItMS4zOTJjLTIuMTQ4LS41NzUtNC4xMTEgMS4zODktMy41MzUgMy41MzZsMS4zOSA1LjE5My01LjEwMiAxLjM2N2MtMi4xNDguNTc2LTIuODY3IDMuMjU5LTEuMjk2IDQuODNsNC4xNDIgNC4xNDJjMCAuMDIxLS4wMDMuMDQyLS4wMDMuMDY0bC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDYzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDczbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDgzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDkzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEwM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxMTNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTIzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEzM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxNDNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDE2M2MwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMGgxMjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWODNsLTcwLjAyLTQuMzc2QTEwLjY0NSAxMC42NDUgMCAwMTEwMyA2OGMwLTUuNjIxIDQuMzctMTAuMjczIDkuOTgtMTAuNjI0IiBmaWxsPSIjM0VDQzVGIi8+PHBhdGggZmlsbD0iIzNFQ0M1RiIgZD0iTTE0MyAxODNoMzB2LTQwaC0zMHoiLz48cGF0aCBkPSJNMTkzIDE1OGMtLjIxOSAwLS40MjguMDM3LS42MzkuMDY0LS4wMzgtLjE1LS4wNzQtLjMwMS0uMTE2LS40NTFBNSA1IDAgMDAxOTAuMzIgMTQ4YTQuOTYgNC45NiAwIDAwLTMuMDE2IDEuMDM2IDI2LjUzMSAyNi41MzEgMCAwMC0uMzM1LS4zMzYgNC45NTUgNC45NTUgMCAwMDEuMDExLTIuOTg3IDUgNSAwIDAwLTkuNTk5LTEuOTU5Yy0uMTQ4LS4wNDItLjI5Ny0uMDc3LS40NDUtLjExNS4wMjctLjIxMS4wNjQtLjQyLjA2NC0uNjM5YTUgNSAwIDAwLTUtNSA1IDUgMCAwMC01IDVjMCAuMjE5LjAzNy40MjguMDY0LjYzOS0uMTQ4LjAzOC0uMjk3LjA3My0uNDQ1LjExNWE0Ljk5OCA0Ljk5OCAwIDAwLTkuNTk5IDEuOTU5YzAgMS4xMjUuMzg0IDIuMTUxIDEuMDExIDIuOTg3LTMuNzE3IDMuNjMyLTYuMDMxIDguNjkzLTYuMDMxIDE0LjMgMCAxMS4wNDYgOC45NTQgMjAgMjAgMjAgOS4zMzkgMCAxNy4xNi02LjQxIDE5LjM2MS0xNS4wNjQuMjExLjAyNy40Mi4wNjQuNjM5LjA2NGE1IDUgMCAwMDUtNSA1IDUgMCAwMC01LTUiIGZpbGw9IiM0NEQ4NjAiLz48cGF0aCBmaWxsPSIjM0VDQzVGIiBkPSJNMTUzIDEyM2gzMHYtMjBoLTMweiIvPjxwYXRoIGQ9Ik0xOTMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDE4MyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik02MyA1NS41YTIuNSAyLjUgMCAwMS0yLjUtMi41YzAtNC4xMzYtMy4zNjQtNy41LTcuNS03LjVzLTcuNSAzLjM2NC03LjUgNy41YTIuNSAyLjUgMCAxMS01IDBjMC02Ljg5MyA1LjYwNy0xMi41IDEyLjUtMTIuNVM2NS41IDQ2LjEwNyA2NS41IDUzYTIuNSAyLjUgMCAwMS0yLjUgMi41IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEwMyAxODNoNjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWOTNoLTYwYy0xMS4wNDYgMC0yMCA4Ljk1NC0yMCAyMHY3MHoiIGZpbGw9IiNGRkZGNTAiLz48cGF0aCBkPSJNMTY4LjAyIDEyNGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMC00OS44MTRoLTUwLjA0YTEgMSAwIDExMC0yaDUwLjA0YTEgMSAwIDExMCAybTAgMTkuODE0aC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMm0wIDIwaC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMk0xODMgNjEuNjExYy0uMDEyIDAtLjAyMi0uMDA2LS4wMzQtLjAwNS0zLjA5LjEwNS00LjU1MiAzLjE5Ni01Ljg0MiA1LjkyMy0xLjM0NiAyLjg1LTIuMzg3IDQuNzAzLTQuMDkzIDQuNjQ3LTEuODg5LS4wNjgtMi45NjktMi4yMDItNC4xMTMtNC40Ni0xLjMxNC0yLjU5NC0yLjgxNC01LjUzNi01Ljk2My01LjQyNi0zLjA0Ni4xMDQtNC41MTMgMi43OTQtNS44MDcgNS4xNjctMS4zNzcgMi41MjgtMi4zMTQgNC4wNjUtNC4xMjEgMy45OTQtMS45MjctLjA3LTIuOTUxLTEuODA1LTQuMTM2LTMuODEzLTEuMzIxLTIuMjM2LTIuODQ4LTQuNzUtNS45MzYtNC42NjQtMi45OTQuMTAzLTQuNDY1IDIuMzg1LTUuNzYzIDQuNC0xLjM3MyAyLjEzLTIuMzM1IDMuNDI4LTQuMTY1IDMuMzUxLTEuOTczLS4wNy0yLjk5Mi0xLjUxLTQuMTcxLTMuMTc3LTEuMzI0LTEuODczLTIuODE2LTMuOTkzLTUuODk1LTMuODktMi45MjguMS00LjM5OSAxLjk3LTUuNjk2IDMuNjE4LTEuMjMyIDEuNTY0LTIuMTk0IDIuODAyLTQuMjI5IDIuNzI0YTEgMSAwIDAwLS4wNzIgMmMzLjAxNy4xMDEgNC41NDUtMS44IDUuODcyLTMuNDg3IDEuMTc3LTEuNDk2IDIuMTkzLTIuNzg3IDQuMTkzLTIuODU1IDEuOTI2LS4wODIgMi44MjkgMS4xMTUgNC4xOTUgMy4wNDUgMS4yOTcgMS44MzQgMi43NjkgMy45MTQgNS43MzEgNC4wMjEgMy4xMDMuMTA0IDQuNTk2LTIuMjE1IDUuOTE4LTQuMjY3IDEuMTgyLTEuODM0IDIuMjAyLTMuNDE3IDQuMTUtMy40ODQgMS43OTMtLjA2NyAyLjc2OSAxLjM1IDQuMTQ1IDMuNjgxIDEuMjk3IDIuMTk3IDIuNzY2IDQuNjg2IDUuNzg3IDQuNzk2IDMuMTI1LjEwOCA0LjYzNC0yLjYyIDUuOTQ5LTUuMDM1IDEuMTM5LTIuMDg4IDIuMjE0LTQuMDYgNC4xMTktNC4xMjYgMS43OTMtLjA0MiAyLjcyOCAxLjU5NSA0LjExMSA0LjMzIDEuMjkyIDIuNTUzIDIuNzU3IDUuNDQ1IDUuODI1IDUuNTU2bC4xNjkuMDAzYzMuMDY0IDAgNC41MTgtMy4wNzUgNS44MDUtNS43OTQgMS4xMzktMi40MSAyLjIxNy00LjY4IDQuMDY3LTQuNzczdi0yeiIgZmlsbD0iIzAwMCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxODNoNDB2LTQwSDgzeiIvPjxwYXRoIGQ9Ik0xNDMgMTU4Yy0uMjE5IDAtLjQyOC4wMzctLjYzOS4wNjQtLjAzOC0uMTUtLjA3NC0uMzAxLS4xMTYtLjQ1MUE1IDUgMCAwMDE0MC4zMiAxNDhhNC45NiA0Ljk2IDAgMDAtMy4wMTYgMS4wMzYgMjYuNTMxIDI2LjUzMSAwIDAwLS4zMzUtLjMzNiA0Ljk1NSA0Ljk1NSAwIDAwMS4wMTEtMi45ODcgNSA1IDAgMDAtOS41OTktMS45NTljLS4xNDgtLjA0Mi0uMjk3LS4wNzctLjQ0NS0uMTE1LjAyNy0uMjExLjA2NC0uNDIuMDY0LS42MzlhNSA1IDAgMDAtNS01IDUgNSAwIDAwLTUgNWMwIC4yMTkuMDM3LjQyOC4wNjQuNjM5LS4xNDguMDM4LS4yOTcuMDczLS40NDUuMTE1YTQuOTk4IDQuOTk4IDAgMDAtOS41OTkgMS45NTljMCAxLjEyNS4zODQgMi4xNTEgMS4wMTEgMi45ODctMy43MTcgMy42MzItNi4wMzEgOC42OTMtNi4wMzEgMTQuMyAwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMCA5LjMzOSAwIDE3LjE2LTYuNDEgMTkuMzYxLTE1LjA2NC4yMTEuMDI3LjQyLjA2NC42MzkuMDY0YTUgNSAwIDAwNS01IDUgNSAwIDAwLTUtNSIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxMjNoNDB2LTIwSDgzeiIvPjxwYXRoIGQ9Ik0xMzMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDEyMyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik0xNDMgNDEuNzVjLS4xNiAwLS4zMy0uMDItLjQ5LS4wNWEyLjUyIDIuNTIgMCAwMS0uNDctLjE0Yy0uMTUtLjA2LS4yOS0uMTQtLjQzMS0uMjMtLjEzLS4wOS0uMjU5LS4yLS4zOC0uMzEtLjEwOS0uMTItLjIxOS0uMjQtLjMwOS0uMzhzLS4xNy0uMjgtLjIzMS0uNDNhMi42MTkgMi42MTkgMCAwMS0uMTg5LS45NmMwLS4xNi4wMi0uMzMuMDUtLjQ5LjAzLS4xNi4wOC0uMzEuMTM5LS40Ny4wNjEtLjE1LjE0MS0uMjkuMjMxLS40My4wOS0uMTMuMi0uMjYuMzA5LS4zOC4xMjEtLjExLjI1LS4yMi4zOC0uMzEuMTQxLS4wOS4yODEtLjE3LjQzMS0uMjMuMTQ5LS4wNi4zMS0uMTEuNDctLjE0LjMyLS4wNy42NS0uMDcuOTggMCAuMTU5LjAzLjMyLjA4LjQ3LjE0LjE0OS4wNi4yOS4xNC40My4yMy4xMy4wOS4yNTkuMi4zOC4zMS4xMS4xMi4yMi4yNS4zMS4zOC4wOS4xNC4xNy4yOC4yMy40My4wNi4xNi4xMS4zMS4xNC40Ny4wMjkuMTYuMDUuMzMuMDUuNDkgMCAuNjYtLjI3MSAxLjMxLS43MyAxLjc3LS4xMjEuMTEtLjI1LjIyLS4zOC4zMS0uMTQuMDktLjI4MS4xNy0uNDMuMjNhMi41NjUgMi41NjUgMCAwMS0uOTYuMTltMjAtMS4yNWMtLjY2IDAtMS4zLS4yNy0xLjc3MS0uNzNhMy44MDIgMy44MDIgMCAwMS0uMzA5LS4zOGMtLjA5LS4xNC0uMTctLjI4LS4yMzEtLjQzYTIuNjE5IDIuNjE5IDAgMDEtLjE4OS0uOTZjMC0uNjYuMjctMS4zLjcyOS0xLjc3LjEyMS0uMTEuMjUtLjIyLjM4LS4zMS4xNDEtLjA5LjI4MS0uMTcuNDMxLS4yMy4xNDktLjA2LjMxLS4xMS40Ny0uMTQuMzItLjA3LjY2LS4wNy45OCAwIC4xNTkuMDMuMzIuMDguNDcuMTQuMTQ5LjA2LjI5LjE0LjQzLjIzLjEzLjA5LjI1OS4yLjM4LjMxLjQ1OS40Ny43MyAxLjExLjczIDEuNzcgMCAuMTYtLjAyMS4zMy0uMDUuNDktLjAzLjE2LS4wOC4zMi0uMTQuNDctLjA3LjE1LS4xNC4yOS0uMjMuNDMtLjA5LjEzLS4yLjI2LS4zMS4zOC0uMTIxLjExLS4yNS4yMi0uMzguMzEtLjE0LjA5LS4yODEuMTctLjQzLjIzYTIuNTY1IDIuNTY1IDAgMDEtLjk2LjE5IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPgo="},17424:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},51374:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},65228:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},56799:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>n,default:()=>l,frontMatter:()=>u,metadata:()=>M,toc:()=>a});var o=s(24246),i=s(71670);const u={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},n=void 0,M={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{inline:!1,label:"Documentation",permalink:"/blog/tags/documentation"},{inline:!1,label:"Blog",permalink:"/blog/tags/blog"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",page:{permalink:"/blog/authors/j-marcey"},socials:{x:"https://x.com/joelmarcey",github:"https://github.com/JoelMarcey"},imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},r={authorsImageUrls:[void 0]},a=[{value:"The Birth of docusaurus",id:"the-birth-of-docusaurus",level:2},{value:"Getting Up and Running",id:"getting-up-and-running",level:2},{value:"How does Docusaurus work?",id:"how-does-docusaurus-work",level:2},{value:"Community",id:"community",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2},{value:"Resources",id:"resources",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(51374).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["We are very happy to introduce ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,o.jsxs)(t.p,{children:["We created ",(0,o.jsx)(t.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,o.jsx)(t.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,o.jsx)(t.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,o.jsx)(t.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"install"})," it using ",(0,o.jsx)(t.code,{children:"npm"})," or ",(0,o.jsx)(t.code,{children:"yarn"})," via a simple initialization script that ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"creates a working example website out of the box"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus also provides core website and documentation features out-of-the-box including ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog support"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/translation.html",children:"internationalization"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/search.html",children:"search"}),", and ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/versioning.html",children:"versioning"}),". While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added."]}),"\n",(0,o.jsx)(t.h2,{id:"the-birth-of-docusaurus",children:"The Birth of docusaurus"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(17424).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsx)(t.p,{children:"When Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings."}),"\n",(0,o.jsx)(t.p,{children:"The open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well."}),"\n",(0,o.jsx)(t.p,{children:'The problem with the "copy the template to your repo" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to "copy" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.'}),"\n",(0,o.jsx)(t.p,{children:"So we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes."}),"\n",(0,o.jsx)(t.p,{children:"Docusaurus was born!"}),"\n",(0,o.jsx)(t.p,{children:"At Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don't have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation."}),"\n",(0,o.jsx)(t.h2,{id:"getting-up-and-running",children:"Getting Up and Running"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(65228).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["At its core, we wanted sites running Docusaurus to be simple to use. With one ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation"})," command and some simple ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"configuration"}),", you can actually have a default running website."]}),"\n",(0,o.jsxs)(t.p,{children:["When you run ",(0,o.jsx)(t.code,{children:"docusaurus-init"}),", you will see a structure similar to:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-repo\n\u251c\u2500\u2500 docs-examples-from-docusaurus\n\u2502 \u251c\u2500\u2500 doc1.md\n\u2502 \u251c\u2500\u2500 doc2.md\n\u2502 \u251c\u2500\u2500 doc3.md\n\u2502 \u251c\u2500\u2500 example-doc4.md\n\u2502 \u2514\u2500\u2500 example-doc5.md\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\n\u2502 \u251c\u2500\u2500 node_modules\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u251c\u2500\u2500 sidebars.json\n\u2502 \u251c\u2500\u2500 siteConfig.js\n\u2502 \u2514\u2500\u2500 static\n"})}),"\n",(0,o.jsxs)(t.p,{children:["With the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog posts"}),"; ",(0,o.jsx)(t.code,{children:"siteConfig.js"})," is where you make most of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-config.html",children:"customizations"})," for your site; ",(0,o.jsx)(t.code,{children:"sidebars.json"})," is where you maintain the layout and content of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/navigation.html",children:"sidebar"})," for your documentation; the ",(0,o.jsx)(t.code,{children:"pages"})," folder is where you add ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/custom-pages.html",children:"custom"})," pages for your site; the ",(0,o.jsx)(t.code,{children:"static"})," folder is where all of your static assets go (e.g., CSS stylesheets and images); and the ",(0,o.jsx)(t.code,{children:"core"})," folder is where you can customize core components of the site, in this case the footer."]}),"\n",(0,o.jsx)(t.h2,{id:"how-does-docusaurus-work",children:"How does Docusaurus work?"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is written primarily in JavaScript and ",(0,o.jsx)(t.a,{href:"https://facebook.github.io/react",children:"React"}),", replacing Jekyll which we used in the old template. We use ",(0,o.jsx)(t.a,{href:"https://github.com/jonschlinkert/remarkable",children:"Remarkable"})," for our Markdown rendering and ",(0,o.jsx)(t.a,{href:"https://highlightjs.org/",children:"highlight.js"})," for our code block syntax highlighting. The core of Docusaurus' functionality is in the ",(0,o.jsx)(t.a,{href:"https://github.com/facebookexperimental/Docusaurus/tree/master/lib",children:"lib directory"})," of the ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/",children:"Docusaurus repo"}),". The general structure looks like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-Docusaurus\n\u251c\u2500\u2500 lib\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u251c\u2500\u2500 server\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\n\u2502 \u2502 \u251c\u2500\u2500 server.js\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\n\u2502 \u251c\u2500\u2500 static\n\u2502 \u251c\u2500\u2500 build-files.js\n\u2502 \u251c\u2500\u2500 copy-examples.js\n\u2502 \u251c\u2500\u2500 generate-feed.js\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\n\u2502 \u251c\u2500\u2500 rename-version.js\n\u2502 \u251c\u2500\u2500 start-server.js\n\u2502 \u251c\u2500\u2500 versions.js\n\u2502 \u2514\u2500\u2500 write-translations.js\n"})}),"\n",(0,o.jsxs)(t.p,{children:["The key files here are build-files.js and start-server.js. There are many similarities between these two files: ",(0,o.jsx)(t.code,{children:"build-files.js"})," is used to build the physical artifacts for serving by an external web server. ",(0,o.jsx)(t.code,{children:"start-server.js"})," is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Process your website settings in ",(0,o.jsx)(t.code,{children:"siteConfig.js"})]}),"\n",(0,o.jsx)(t.li,{children:"Read the document metadata that exists in all the Markdown files in your docs directory."}),"\n",(0,o.jsx)(t.li,{children:"Create a table of contents for your documents based upon the IDs extracted from the metadata."}),"\n",(0,o.jsx)(t.li,{children:"Convert the Markdown to HTML, including doing link replacement."}),"\n",(0,o.jsx)(t.li,{children:"These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder."}),"\n",(0,o.jsx)(t.li,{children:"Repeat 1-3 for blog posts."}),"\n",(0,o.jsx)(t.li,{children:"The blog file will go in a build/blog directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Copy images into an build/img directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build."}),"\n",(0,o.jsx)(t.li,{children:"Create CNAME and sitemap.xml files and add those to build."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Note that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts."}),"\n",(0,o.jsx)(t.p,{children:"The final structure of your compiled site will look similar to:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"build\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 CNAME\n\u2502 \u251c\u2500\u2500 blog\n\u2502 \u251c\u2500\u2500 css\n\u2502 \u251c\u2500\u2500 docs\n\u2502 \u251c\u2500\u2500 en\n\u2502 \u251c\u2500\u2500 help.html # custom page\n\u2502 \u251c\u2500\u2500 img\n\u2502 \u251c\u2500\u2500 index.html # landing page\n\u2502 \u251c\u2500\u2500 sitemap.xml\n\u2502 \u2514\u2500\u2500 users.html # custom page\n"})}),"\n",(0,o.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(80089).Z+"",width:"200",height:"200"})}),"\n",(0,o.jsxs)(t.p,{children:["We welcome your ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contributions"})," to Docusaurus, whether you want to use it for your own site, you want to ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contribute"})," to the Docusaurus core or just have questions. Follow us on ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," and ",(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Twitter"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus wouldn't exist without the work of the rest of the core Docusaurus team: ",(0,o.jsx)(t.a,{href:"http://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/hectorramos",children:"Hector Ramos"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/EricVicenti",children:"Eric Vicenti"})," and ",(0,o.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})," \u2014 a former intern at Facebook who implemented the core technology and features."]}),"\n",(0,o.jsxs)(t.p,{children:["Special thanks also goes out to our earliest ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users.html",children:"adopters"})," of Docusaurus:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://bucklescript.github.io/",children:"BuckleScript"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://fasttext.cc",children:"FastText"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://jestjs.io",children:"Jest"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"http://makeitopen.com",children:"Make It Open"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://reasonml.github.io/reason-react/",children:"Reason-react"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/relay/",children:"Relay"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Without their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today."}),"\n",(0,o.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io",children:"Read our documentation"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Follow our Twitter feed"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Follow us on GitHub"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/about-slash.html",children:"About Slash, the Docusaurus mascot"})}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>M,a:()=>n});var o=s(27378);const i={},u=o.createContext(i);function n(e){const t=o.useContext(u);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function M(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),o.createElement(u.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e335fc2.1634c4ae.js b/assets/js/5e335fc2.1634c4ae.js deleted file mode 100644 index 1781f66e5fb6..000000000000 --- a/assets/js/5e335fc2.1634c4ae.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30981],{14542:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>n,metadata:()=>u,toc:()=>c});var s=a(24246),r=a(71670);const n={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,u={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},i={authorsImageUrls:[void 0]},c=[];function p(t){const e={a:"a",p:"p",...(0,r.a)(),...t.components};return(0,s.jsxs)(e.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]})}function h(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(p,{...t})}):p(t)}},71670:(t,e,a)=>{a.d(e,{Z:()=>u,a:()=>o});var s=a(27378);const r={},n=s.createContext(r);function o(t){const e=s.useContext(n);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),s.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e335fc2.5f5d04c2.js b/assets/js/5e335fc2.5f5d04c2.js new file mode 100644 index 000000000000..2706018cebeb --- /dev/null +++ b/assets/js/5e335fc2.5f5d04c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30981],{14542:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>n,metadata:()=>u,toc:()=>c});var s=a(24246),r=a(71670);const n={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,u={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},i={authorsImageUrls:[void 0]},c=[];function h(t){const e={a:"a",p:"p",...(0,r.a)(),...t.components};return(0,s.jsxs)(e.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]})}function p(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(h,{...t})}):h(t)}},71670:(t,e,a)=>{a.d(e,{Z:()=>u,a:()=>o});var s=a(27378);const r={},n=s.createContext(r);function o(t){const e=s.useContext(n);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),s.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f61b80e.193ffb82.js b/assets/js/5f61b80e.193ffb82.js deleted file mode 100644 index 3379322444b3..000000000000 --- a/assets/js/5f61b80e.193ffb82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94588],{42600:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=s(24246),o=s(71670);const r={slug:"target-doc-slug"},a="Target doc",i={id:"tests/links/target",title:"Target doc",description:"This is just a doc meant to be linked to by other docs.",source:"@site/_dogfooding/_docs tests/tests/links/target.mdx",sourceDirName:"tests/links",slug:"/tests/links/target-doc-slug",permalink:"/tests/docs/tests/links/target-doc-slug",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"target-doc-slug"},sidebar:"sidebar",previous:{title:"Broken Anchors tests",permalink:"/tests/docs/tests/links/broken-anchors-tests"},next:{title:"Test links",permalink:"/tests/docs/tests/links/test-markdown-links"}},d={},c=[{value:"Target heading",id:"target-heading",level:2}];function l(t){const e={h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"target-doc",children:"Target doc"})}),"\n",(0,n.jsx)(e.p,{children:"This is just a doc meant to be linked to by other docs."}),"\n",(0,n.jsx)(e.h2,{id:"target-heading",children:"Target heading"})]})}function u(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(l,{...t})}):l(t)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/links/target.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>i,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f61b80e.1d5f44a7.js b/assets/js/5f61b80e.1d5f44a7.js new file mode 100644 index 000000000000..1f040eeacbc6 --- /dev/null +++ b/assets/js/5f61b80e.1d5f44a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94588],{42600:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=s(24246),o=s(71670);const r={slug:"target-doc-slug"},a="Target doc",i={id:"tests/links/target",title:"Target doc",description:"This is just a doc meant to be linked to by other docs.",source:"@site/_dogfooding/_docs tests/tests/links/target.mdx",sourceDirName:"tests/links",slug:"/tests/links/target-doc-slug",permalink:"/tests/docs/tests/links/target-doc-slug",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"target-doc-slug"},sidebar:"sidebar",previous:{title:"Broken Anchors tests",permalink:"/tests/docs/tests/links/broken-anchors-tests"},next:{title:"Test links",permalink:"/tests/docs/tests/links/test-markdown-links"}},d={},c=[{value:"Target heading",id:"target-heading",level:2}];function l(t){const e={h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"target-doc",children:"Target doc"})}),"\n",(0,n.jsx)(e.p,{children:"This is just a doc meant to be linked to by other docs."}),"\n",(0,n.jsx)(e.h2,{id:"target-heading",children:"Target heading"})]})}function u(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(l,{...t})}):l(t)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/links/target.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>i,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/6199064d.42c1523f.js b/assets/js/6199064d.42c1523f.js deleted file mode 100644 index 68968113db04..000000000000 --- a/assets/js/6199064d.42c1523f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86143],{52322:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var n=t(24246),a=t(71670);const r={title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},i=void 0,o={permalink:"/blog/2021/03/09/releasing-docusaurus-i18n",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx",source:"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx",title:"Releasing Docusaurus i18n",description:"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.",date:"2021-03-09T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"},{inline:!1,label:"I18n",permalink:"/blog/tags/i-18-n"}],readingTime:3.445,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"},nextItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"}},l={authorsImageUrls:[void 0]},u=[];function c(e){const s={a:"a",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Today, we officially release ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"https://docusaurus.io/docs/i18n/introduction",children:"Docusaurus 2 i18n"})})," (",(0,n.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"internationalization"}),"), as part of ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71",children:"2.0.0-alpha.71"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus 2 has now reached ",(0,n.jsx)(s.strong,{children:"full feature parity with Docusaurus 1"}),". \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the ",(0,n.jsx)(s.strong,{children:"first Docusaurus 2 beta"})," will be released."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"We went the extra mile"}),", and the new i18n support is ",(0,n.jsx)(s.strong,{children:"even better than in Docusaurus 1"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["In this post, we will present you the ",(0,n.jsx)(s.strong,{children:"translation workflow"}),", explain some ",(0,n.jsx)(s.strong,{children:"design decisions"})," and ",(0,n.jsx)(s.strong,{children:"showcase early adopter sites"})," that just went live: ",(0,n.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,n.jsx)(s.a,{href:"https://learn.redwoodjs.com/",children:"Redwood"}),", and ",(0,n.jsx)(s.a,{href:"https://datagit.ir/",children:"Datagit"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["We also ",(0,n.jsx)(s.strong,{children:"dogfood"})," the i18n support on the ",(0,n.jsx)(s.strong,{children:"Docusaurus 2 site itself"}),", and this post is already available in ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n",children:"English"})," and ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n",children:"French"}),"!"]})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6199064d.e76ca0ce.js b/assets/js/6199064d.e76ca0ce.js new file mode 100644 index 000000000000..2152ec5a01d9 --- /dev/null +++ b/assets/js/6199064d.e76ca0ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86143],{52322:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var n=t(24246),a=t(71670);const r={title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},i=void 0,o={permalink:"/blog/2021/03/09/releasing-docusaurus-i18n",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx",source:"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx",title:"Releasing Docusaurus i18n",description:"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.",date:"2021-03-09T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"},{inline:!1,label:"I18n",permalink:"/blog/tags/i-18-n"}],readingTime:3.445,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"},nextItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"}},l={authorsImageUrls:[void 0]},u=[];function c(e){const s={a:"a",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Today, we officially release ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"https://docusaurus.io/docs/i18n/introduction",children:"Docusaurus 2 i18n"})})," (",(0,n.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"internationalization"}),"), as part of ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71",children:"2.0.0-alpha.71"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus 2 has now reached ",(0,n.jsx)(s.strong,{children:"full feature parity with Docusaurus 1"}),". \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the ",(0,n.jsx)(s.strong,{children:"first Docusaurus 2 beta"})," will be released."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"We went the extra mile"}),", and the new i18n support is ",(0,n.jsx)(s.strong,{children:"even better than in Docusaurus 1"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["In this post, we will present you the ",(0,n.jsx)(s.strong,{children:"translation workflow"}),", explain some ",(0,n.jsx)(s.strong,{children:"design decisions"})," and ",(0,n.jsx)(s.strong,{children:"showcase early adopter sites"})," that just went live: ",(0,n.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,n.jsx)(s.a,{href:"https://learn.redwoodjs.com/",children:"Redwood"}),", and ",(0,n.jsx)(s.a,{href:"https://datagit.ir/",children:"Datagit"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["We also ",(0,n.jsx)(s.strong,{children:"dogfood"})," the i18n support on the ",(0,n.jsx)(s.strong,{children:"Docusaurus 2 site itself"}),", and this post is already available in ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n",children:"English"})," and ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n",children:"French"}),"!"]})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/62b37705.383d9f23.js b/assets/js/62b37705.89086592.js similarity index 83% rename from assets/js/62b37705.383d9f23.js rename to assets/js/62b37705.89086592.js index e85eedea2ffd..a04cad18139e 100644 --- a/assets/js/62b37705.383d9f23.js +++ b/assets/js/62b37705.89086592.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8901],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),a=r(3620),i=r(44479),l=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function y(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const r=(0,a.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function j(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=y(e),[s,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[l,u]=h({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:c})?e:null})();(0,i.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var g=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),c=a[n].value;c!==r&&(l(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=j(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},t,e)),(0,n.jsx)(k,w({},t,e))]})}function E(e){const t=(0,g.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},87048:(e,t,r)=>{r.d(t,{CW:()=>y,FS:()=>v,Fr:()=>m,Hc:()=>w,I1:()=>b,SR:()=>f,UM:()=>O,Zl:()=>j,mC:()=>d,mq:()=>g,rv:()=>x});var n=r(24246),o=r(27378),c=r(56953),s=r(92053),a=r(36712),i=r(41428),l=r(38112);const u=o.createContext(null);function d({children:e}){const[t,r]=(0,o.useState)(null),c=(0,o.useRef)(!0);return(0,o.useEffect)((()=>(c.current=!0,()=>{c.current=!1})),[]),(0,o.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!c.current)return;const t=Object.keys(e.versions).at(-1),n=e.time[t];r({name:t,time:n})}))}),[]),(0,n.jsx)(u.Provider,{value:t,children:e})}function p(){var e;const t=null===(e=(0,c.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,s.gB)("default");var n;const o=(null!==(n=r.find((e=>"current"!==e.name)))&&void 0!==n?n:r[0]).name;return t&&"current"!==t?t:o}function b(){const e=(0,o.useContext)(u);return e?(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,n.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function f(){const e=p();return(0,n.jsx)("span",{children:e})}function y(){return(0,n.jsx)("span",{children:3})}function m(){return(0,n.jsx)("span",{children:2})}function h({branch:e}){return(0,n.jsx)(i.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,n.jsx)("code",{children:e})})}function j(){return(0,n.jsx)(h,{branch:"docusaurus-v2"})}function g(){return(0,n.jsx)(h,{branch:"main"})}function O({children:e}){return(0,o.useContext)(u)?null:e}function v({children:e}){return(0,o.useContext)(u)?e:null}function w(){var e,t;const r=null!==(t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==t?t:"0.0.0-4922",c=p();return(0,n.jsx)(l.Z,{language:"diff",children:`- "@docusaurus/core": "^${c}",\n- "@docusaurus/preset-classic": "^${c}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function x(){var e;const t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.time;return t?(0,n.jsx)(a.Z,{values:{time:(0,n.jsx)("b",{children:new Date(t).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>L});var o=r(24246),c=r(27378),s=r(40624),a=r(29088),i=r(32711),l=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function y(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const h={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(h.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,g({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:h.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,a.Z)();return(0,o.jsx)(i.uz,{className:h.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const C=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:a}}=s,l=y();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:h.playgroundContainer,children:(0,o.jsx)(i.nu,O(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:C,theme:l},c),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function D(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){D(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function L(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({React:c},c,n);var _,V,A=r(89583),$=r(6324),q=r.n($);function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),M=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(U=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({},H),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(H);function G(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Q(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&M.test(c)){const e=c.match(M).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(n,o),a=r.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<a.length;){const e=a[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),a.splice(b,1)}r=a.join("\n");const p={};return Object.entries(i).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var r;null!==(r=(_=p)[V=t])&&void 0!==r||(_[V]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(y());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,X.codeBlockContainer,A.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=r(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){le(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,s.Z)(t,r&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},a),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ye(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",ye(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function he(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){he(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),a=(0,c.useRef)(void 0),i=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),a.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ge,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:a,language:i}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=y(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),a=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,a),(0,c.useEffect)((()=>{a()}),[e,a]),(0,c.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),h=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(F))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:j,code:g}=Q(e,{metastring:r,language:p,magicComments:u}),O=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[h&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:h}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:b,code:g,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:g})]})]})]})}function Ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function De(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Le=(Te=function(e){var{children:t}=e,r=De(e,["children"]);const n=(0,a.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof s?Ee:ne;return(0,o.jsx)(i,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ce(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:Z},e)):(0,o.jsx)(Te,Ie({},e))});var Te;function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Le,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ze(e,t,r[t])}))}return e}({},e))}},95272:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),a=r(87048);const i={},l="Canary releases",u={id:"canary",title:"Canary releases",description:"Docusaurus has a canary releases system.",source:"@site/community/4-canary.mdx",sourceDirName:".",slug:"/canary",permalink:"/community/canary",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:4,frontMatter:{},sidebar:"community",previous:{title:"Contributing",permalink:"/community/contributing"},next:{title:"Release process",permalink:"/community/release-process"}},d={},p=[{value:"Canary npm dist tag",id:"canary-npm-dist-tag",level:2},{value:"Using a canary release",id:"using-a-canary-release",level:2}];function b(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"canary-releases",children:"Canary releases"})}),"\n","\n",(0,n.jsxs)(a.mC,{children:[(0,n.jsx)(t.p,{children:"Docusaurus has a canary releases system."}),(0,n.jsxs)(t.p,{children:["It permits you to ",(0,n.jsx)(t.strong,{children:"test new unreleased features"})," as soon as the pull requests are merged on the ",(0,n.jsx)(t.a,{href:"/community/release-process#next-version",children:"next version"})," of Docusaurus."]}),(0,n.jsxs)(t.p,{children:["It is a good way to ",(0,n.jsx)(t.strong,{children:"give feedback to maintainers"}),", ensuring the newly implemented feature works as intended."]}),(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsx)(t.p,{children:"Using a canary release in production might seem risky, but in practice, it's not."}),(0,n.jsx)(t.p,{children:"A canary release passes all automated tests and is used in production by the Docusaurus site itself."})]}),(0,n.jsx)(a.UM,{children:(0,n.jsx)(t.admonition,{type:"warning",children:(0,n.jsxs)(t.p,{children:["The canary version shown below ",(0,n.jsx)(t.strong,{children:"may not be up-to-date"}),". Please go to the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm page"})," to find the actual version name."]})})}),(0,n.jsx)(a.FS,{children:(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["The canary version shown below is directly fetched from npm and ",(0,n.jsx)(t.strong,{children:"is up-to-date"}),". You can directly use these numbers in your package.json."]})})}),(0,n.jsx)(t.h2,{id:"canary-npm-dist-tag",children:"Canary npm dist tag"}),(0,n.jsxs)(t.p,{children:["For any code-related commit on ",(0,n.jsx)(t.code,{children:"main"}),", the continuous integration will publish a canary release under the ",(0,n.jsx)(t.code,{children:"@canary"})," npm dist tag. It generally takes up to 10 minutes."]}),(0,n.jsxs)(t.p,{children:["You can see on ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm"})," the current dist tags:"]}),(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"latest"}),": stable releases (Current: ",(0,n.jsx)(a.SR,{}),")"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"canary"}),": canary releases (",(0,n.jsx)(a.I1,{}),")"]}),"\n"]}),(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["Make sure to use the latest canary release and check the publication date (sometimes the publish process fails). ",(0,n.jsx)(a.rv,{})]})}),(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Canary versions follow the naming convention ",(0,n.jsx)(t.code,{children:"0.0.0-commitNumber"}),"."]})}),(0,n.jsx)(t.h2,{id:"using-a-canary-release",children:"Using a canary release"}),(0,n.jsxs)(t.p,{children:["Take the latest version published under the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"canary npm dist tag"})," (",(0,n.jsx)(a.I1,{}),")."]}),(0,n.jsxs)(t.p,{children:["Use it for all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," dependencies in your ",(0,n.jsx)(t.code,{children:"package.json"}),":"]}),(0,n.jsx)(a.Hc,{}),(0,n.jsx)(t.p,{children:"Then, install the dependencies again and start your site:"}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install\nnpm start\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn install\nyarn start\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm install\npnpm start\n"})})})]}),(0,n.jsxs)(t.p,{children:["You can also upgrade the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages with command line:"]}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add --exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})})]}),(0,n.jsxs)(t.admonition,{type:"warning",children:[(0,n.jsxs)(t.p,{children:["Make sure to include all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages."]}),(0,n.jsxs)(t.p,{children:["For canary releases, prefer using an exact version instead of a semver range (avoid the ",(0,n.jsx)(t.code,{children:"^"})," prefix)."]})]})]})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8901],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),a=r(3620),i=r(44479),l=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function y(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const r=(0,a.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function j(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=y(e),[s,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[l,u]=h({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:c})?e:null})();(0,i.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var g=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),c=a[n].value;c!==r&&(l(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=j(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},t,e)),(0,n.jsx)(k,w({},t,e))]})}function E(e){const t=(0,g.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},87048:(e,t,r)=>{r.d(t,{CW:()=>y,FS:()=>v,Fr:()=>m,Hc:()=>w,I1:()=>b,SR:()=>f,UM:()=>O,Zl:()=>j,mC:()=>d,mq:()=>g,rv:()=>x});var n=r(24246),o=r(27378),c=r(56953),s=r(92053),a=r(36712),i=r(41428),l=r(38112);const u=o.createContext(null);function d({children:e}){const[t,r]=(0,o.useState)(null),c=(0,o.useRef)(!0);return(0,o.useEffect)((()=>(c.current=!0,()=>{c.current=!1})),[]),(0,o.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!c.current)return;const t=Object.keys(e.versions).at(-1),n=e.time[t];r({name:t,time:n})}))}),[]),(0,n.jsx)(u.Provider,{value:t,children:e})}function p(){var e;const t=null===(e=(0,c.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,s.gB)("default");var n;const o=(null!==(n=r.find((e=>"current"!==e.name)))&&void 0!==n?n:r[0]).name;return t&&"current"!==t?t:o}function b(){const e=(0,o.useContext)(u);return e?(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,n.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function f(){const e=p();return(0,n.jsx)("span",{children:e})}function y(){return(0,n.jsx)("span",{children:3})}function m(){return(0,n.jsx)("span",{children:2})}function h({branch:e}){return(0,n.jsx)(i.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,n.jsx)("code",{children:e})})}function j(){return(0,n.jsx)(h,{branch:"docusaurus-v2"})}function g(){return(0,n.jsx)(h,{branch:"main"})}function O({children:e}){return(0,o.useContext)(u)?null:e}function v({children:e}){return(0,o.useContext)(u)?e:null}function w(){var e,t;const r=null!==(t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==t?t:"0.0.0-4922",c=p();return(0,n.jsx)(l.Z,{language:"diff",children:`- "@docusaurus/core": "^${c}",\n- "@docusaurus/preset-classic": "^${c}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function x(){var e;const t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.time;return t?(0,n.jsx)(a.Z,{values:{time:(0,n.jsx)("b",{children:new Date(t).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>L});var o=r(24246),c=r(27378),s=r(40624),a=r(29088),i=r(32711),l=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function y(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const h={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(h.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,g({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:h.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,a.Z)();return(0,o.jsx)(i.uz,{className:h.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const C=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:a}}=s,l=y();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:h.playgroundContainer,children:(0,o.jsx)(i.nu,O(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:C,theme:l},c),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function D(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){D(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function L(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({React:c},c,n);var _,V,A=r(89583),$=r(6324),R=r.n($);function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(U=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},H),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(H);function G(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Q(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&F.test(c)){const e=c.match(F).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(n,o),a=r.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<a.length;){const e=a[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),a.splice(b,1)}r=a.join("\n");const p={};return Object.entries(i).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(_=p)[V=t])&&void 0!==r||(_[V]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(y());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,X.codeBlockContainer,A.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=r(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){le(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,s.Z)(t,r&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},a),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ye(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",ye(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function he(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){he(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),a=(0,c.useRef)(void 0),i=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),a.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ge,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:a,language:i}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=y(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),a=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,a),(0,c.useEffect)((()=>{a()}),[e,a]),(0,c.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),h=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:j,code:g}=Q(e,{metastring:r,language:p,magicComments:u}),O=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[h&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:h}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:b,code:g,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:g})]})]})]})}function Ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function De(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Le=(Te=function(e){var{children:t}=e,r=De(e,["children"]);const n=(0,a.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof s?Ee:ne;return(0,o.jsx)(i,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ce(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:Z},e)):(0,o.jsx)(Te,Ie({},e))});var Te;function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Le,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ze(e,t,r[t])}))}return e}({},e))}},95272:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),a=r(87048);const i={},l="Canary releases",u={id:"canary",title:"Canary releases",description:"Docusaurus has a canary releases system.",source:"@site/community/4-canary.mdx",sourceDirName:".",slug:"/canary",permalink:"/community/canary",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:4,frontMatter:{},sidebar:"community",previous:{title:"Contributing",permalink:"/community/contributing"},next:{title:"Release process",permalink:"/community/release-process"}},d={},p=[{value:"Canary npm dist tag",id:"canary-npm-dist-tag",level:2},{value:"Using a canary release",id:"using-a-canary-release",level:2}];function b(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"canary-releases",children:"Canary releases"})}),"\n","\n",(0,n.jsxs)(a.mC,{children:[(0,n.jsx)(t.p,{children:"Docusaurus has a canary releases system."}),(0,n.jsxs)(t.p,{children:["It permits you to ",(0,n.jsx)(t.strong,{children:"test new unreleased features"})," as soon as the pull requests are merged on the ",(0,n.jsx)(t.a,{href:"/community/release-process#next-version",children:"next version"})," of Docusaurus."]}),(0,n.jsxs)(t.p,{children:["It is a good way to ",(0,n.jsx)(t.strong,{children:"give feedback to maintainers"}),", ensuring the newly implemented feature works as intended."]}),(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsx)(t.p,{children:"Using a canary release in production might seem risky, but in practice, it's not."}),(0,n.jsx)(t.p,{children:"A canary release passes all automated tests and is used in production by the Docusaurus site itself."})]}),(0,n.jsx)(a.UM,{children:(0,n.jsx)(t.admonition,{type:"warning",children:(0,n.jsxs)(t.p,{children:["The canary version shown below ",(0,n.jsx)(t.strong,{children:"may not be up-to-date"}),". Please go to the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm page"})," to find the actual version name."]})})}),(0,n.jsx)(a.FS,{children:(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["The canary version shown below is directly fetched from npm and ",(0,n.jsx)(t.strong,{children:"is up-to-date"}),". You can directly use these numbers in your package.json."]})})}),(0,n.jsx)(t.h2,{id:"canary-npm-dist-tag",children:"Canary npm dist tag"}),(0,n.jsxs)(t.p,{children:["For any code-related commit on ",(0,n.jsx)(t.code,{children:"main"}),", the continuous integration will publish a canary release under the ",(0,n.jsx)(t.code,{children:"@canary"})," npm dist tag. It generally takes up to 10 minutes."]}),(0,n.jsxs)(t.p,{children:["You can see on ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm"})," the current dist tags:"]}),(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"latest"}),": stable releases (Current: ",(0,n.jsx)(a.SR,{}),")"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"canary"}),": canary releases (",(0,n.jsx)(a.I1,{}),")"]}),"\n"]}),(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["Make sure to use the latest canary release and check the publication date (sometimes the publish process fails). ",(0,n.jsx)(a.rv,{})]})}),(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Canary versions follow the naming convention ",(0,n.jsx)(t.code,{children:"0.0.0-commitNumber"}),"."]})}),(0,n.jsx)(t.h2,{id:"using-a-canary-release",children:"Using a canary release"}),(0,n.jsxs)(t.p,{children:["Take the latest version published under the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"canary npm dist tag"})," (",(0,n.jsx)(a.I1,{}),")."]}),(0,n.jsxs)(t.p,{children:["Use it for all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," dependencies in your ",(0,n.jsx)(t.code,{children:"package.json"}),":"]}),(0,n.jsx)(a.Hc,{}),(0,n.jsx)(t.p,{children:"Then, install the dependencies again and start your site:"}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install\nnpm start\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn install\nyarn start\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm install\npnpm start\n"})})})]}),(0,n.jsxs)(t.p,{children:["You can also upgrade the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages with command line:"]}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add --exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})})]}),(0,n.jsxs)(t.admonition,{type:"warning",children:[(0,n.jsxs)(t.p,{children:["Make sure to include all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages."]}),(0,n.jsxs)(t.p,{children:["For canary releases, prefer using an exact version instead of a semver range (avoid the ",(0,n.jsx)(t.code,{children:"^"})," prefix)."]})]})]})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}}}]); \ No newline at end of file diff --git a/assets/js/641734b9.8fa44043.js b/assets/js/641734b9.5796a7cf.js similarity index 77% rename from assets/js/641734b9.8fa44043.js rename to assets/js/641734b9.5796a7cf.js index f3b20599eb21..37837b254dd2 100644 --- a/assets/js/641734b9.8fa44043.js +++ b/assets/js/641734b9.5796a7cf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5856],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",s(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,n)=>{n.d(t,{Z:()=>ie});var r=n(24246),o=n(27378);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function i(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),s=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:s.length>0?(0,r.jsx)(r.Fragment,{children:s}):null}}(e.children);var i;const a=null!==(i=e.title)&&void 0!==i?i:t;return c(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){s(e,t,n[t])}))}return e}({},e,a&&{title:a}),{children:n})}var a=n(40624),l=n(36712),u=n(89583);const d={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function p({type:e,className:t,children:n}){return(0,r.jsx)("div",{className:(0,a.Z)(u.k.common.admonition,u.k.common.admonitionType(e),d.admonition,t),children:n})}function b({icon:e,title:t}){return(0,r.jsxs)("div",{className:d.admonitionHeading,children:[(0,r.jsx)("span",{className:d.admonitionIcon,children:e}),t]})}function f({children:e}){return e?(0,r.jsx)("div",{className:d.admonitionContent,children:e}):null}function h(e){const{type:t,icon:n,title:o,children:s,className:c}=e;return(0,r.jsxs)(p,{type:t,className:c,children:[o||n?(0,r.jsx)(b,{title:o,icon:n}):null,(0,r.jsx)(f,{children:s})]})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){return(0,r.jsx)("svg",y(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const w={icon:(0,r.jsx)(g,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,r.jsx)(h,O(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}({},w,e),{className:(0,a.Z)("alert alert--secondary",e.className),children:e.children}))}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function S(e){return(0,r.jsx)("svg",P(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const N={icon:(0,r.jsx)(S,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(e){return(0,r.jsx)(h,D(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){k(e,t,n[t])}))}return e}({},N,e),{className:(0,a.Z)("alert alert--success",e.className),children:e.children}))}var E=n(35434);function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const B={icon:(0,r.jsx)(E.Z,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function Z(e){return(0,r.jsx)(h,I(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){T(e,t,n[t])}))}return e}({},B,e),{className:(0,a.Z)("alert alert--info",e.className),children:e.children}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,r.jsx)("svg",A(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const R={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function H(e){return(0,r.jsx)("svg",V(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function F(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const q={icon:(0,r.jsx)(H,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function G(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function U(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const Y={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}const X={note:v,tip:C,info:Z,warning:function(e){return(0,r.jsx)(h,z(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},R,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(h,F(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){$(e,t,n[t])}))}return e}({},q,e),{className:(0,a.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,r.jsx)(v,Q({title:"secondary"},e)),important:e=>(0,r.jsx)(Z,Q({title:"important"},e)),success:e=>(0,r.jsx)(C,Q({title:"success"},e)),caution:function(e){return(0,r.jsx)(h,U(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){G(e,t,n[t])}))}return e}({},Y,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))}},ee=Q({},X,K);var te=n(52615);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re,oe;const se=(re=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ne(e,t,n[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,r.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,r.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,r.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(re,Object.getOwnPropertyDescriptors(oe)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(oe)).forEach((function(e){Object.defineProperty(re,e,Object.getOwnPropertyDescriptor(oe,e))})),re);function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ie(e){const t=i(e),n=(o=t.type,se[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),se.info));var o;return(0,r.jsx)(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ce(e,t,n[t])}))}return e}({},t))}},61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,l._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=h(e),[c,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[l,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){w(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),s=i[r].value;s!==n&&(l(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function S({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function k(e){const t=g(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},t,e)),(0,r.jsx)(S,v({},t,e))]})}function D(e){const t=(0,j.Z)();return(0,r.jsx)(k,x(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},13381:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(6698));function s({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(o.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:l}){return(0,r.jsxs)("div",{className:s.browserWindow,style:a(i({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:l,children:e})]})}},89995:(e,t,n)=>{n.d(t,{Z:()=>j});var r=n(24246),o=n(27378),s=n(40624),c=n(27124),i=n.n(c),a=n(41428),l=n(36712),u=n(78844),d=n(38112),p=n(77773),b=n(31688);const f={color:"color_mVUL",input:"input_HUC3",colorInput:"colorInput_C1YB",colorTable:"colorTable_Js7s"};function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e,t){const n=i()(e).contrast(i()(t));return n>7?"AAA \ud83c\udfc5":n>4.5?"AA \ud83d\udc4d":"Fail \ud83d\udd34"}function j(){const{colorMode:e,setColorMode:t}=(0,u.I)(),n="dark"===e,c=n?b.r$:b.Yj,h=n?b.iR:b.Nu,[j,O]=(0,o.useState)(c),[w,v]=(0,o.useState)(c),[x,P]=(0,o.useState)(h),[S,k]=(0,o.useState)(b.NT),[D,N]=(0,o.useState)(n?b.Ax:b.lP);function C(e){const t=e.target.value.replace(/^(?=[^#])/,"#");O(t);try{v(i()(t).hex())}catch(n){}}return(0,o.useEffect)((()=>{N(n?b.Ax:b.lP)}),[n]),(0,o.useEffect)((()=>{var e;const t=JSON.parse(null!==(e=D.get())&&void 0!==e?e:"{}");var n,r,o,s;O(null!==(n=t.baseColor)&&void 0!==n?n:c),v(null!==(r=t.baseColor)&&void 0!==r?r:c),P(null!==(o=t.background)&&void 0!==o?o:h),k(null!==(s=t.shades)&&void 0!==s?s:b.NT)}),[D,h,c]),(0,o.useEffect)((()=>{(0,b.i3)({baseColor:w,background:x,shades:S},n),D.set(JSON.stringify({baseColor:w,background:x,shades:S}))}),[w,x,S,D,n]),(0,r.jsxs)("div",{children:[(0,r.jsx)(p.Z,{type:"tip",children:(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body",values:{wcagLink:(0,r.jsx)(a.Z,{href:"https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast",children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body.wcagLink.label",children:"WCAG-AA contrast ratio"})})},children:"Aim for at least {wcagLink} for the primary color to ensure readability. Use the Docusaurus website itself to preview how your color palette would look like. You can use alternative palettes in dark mode because one color doesn't usually work in both light and dark mode."})})}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"primary_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.primary.label",children:"Primary Color:"})})})," ",(0,r.jsx)("input",{id:"primary_color",type:"text",className:(0,s.Z)(f.input,"margin-right--sm"),value:j,onChange:C}),(0,r.jsx)("input",{type:"color",className:f.colorInput,value:w,onChange:C}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--primary margin-left--md",onClick:()=>t(n?"light":"dark"),children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label",values:{colorMode:n?(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.light",children:"light"}):(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.dark",children:"dark"})},children:"Edit {colorMode} mode"})}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--secondary margin-left--md",onClick:()=>{O(c),v(c),P(h),k(b.NT)},children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.resetButton.label",children:"Reset"})})]}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"background_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.background.label",children:"Background:"})})}),(0,r.jsx)("input",{id:"background_color",type:"color",className:(0,s.Z)(f.colorInput,"margin-right--sm"),value:x,onChange:e=>{P(e.target.value)}})]}),(0,r.jsx)("div",{children:(0,r.jsxs)("table",{className:f.colorTable,children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading1",children:"CSS Variable Name"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading2",description:"This column is the color's representation in hex",children:"Hex"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading3",description:"This column is the adjusted shades' adjustment values relative to the primary color",children:"Adjustment"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading4",description:"This column is WCAG contrast rating: AAA, AA, Fail",children:"Contrast Rating"})})]})}),(0,r.jsx)("tbody",{children:(0,b.t8)(S,w).sort(((e,t)=>e.displayOrder-t.displayOrder)).map((e=>{const{variableName:t,adjustment:n,adjustmentInput:o,hex:s}=e;return(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{children:(0,r.jsx)("code",{children:t})}),(0,r.jsxs)("td",{children:[(0,r.jsx)("span",{className:f.color,style:{backgroundColor:s}}),(0,r.jsx)("code",{className:"margin-left--sm",children:s.toLowerCase()})]}),(0,r.jsx)("td",{children:"--ifm-color-primary"===t?0:(0,r.jsx)("input",{"aria-label":`${t} CSS variable name`,className:f.input,type:"number",value:o,onChange:e=>{const r=parseFloat(e.target.value);k(y(m({},S),{[t]:y(m({},S[t]),{adjustmentInput:e.target.value,adjustment:Number.isNaN(r)?n:r/100})}))}})}),(0,r.jsx)("td",{style:{fontSize:"medium",backgroundColor:x,color:s},children:(0,r.jsx)("b",{children:g(s,x)})})]},t)}))})]})}),(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.text",values:{cssPath:(0,r.jsx)("code",{children:"src/css/custom.css"})},children:"Replace the variables in {cssPath} with these new variables."})}),(0,r.jsx)(d.Z,{className:"language-css",title:"/src/css/custom.css",children:`${n?"[data-theme='dark']":":root"} {\n${(0,b.t8)(S,w).sort(((e,t)=>e.codeOrder-t.codeOrder)).map((e=>` ${e.variableName}: ${e.hex.toLowerCase()};`)).join("\n")}${x!==h?`\n --ifm-background-color: ${x};`:""}\n}`})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>B});var o=n(24246),s=n(27378),c=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function w(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function k(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(k,{})]})}const N=e=>`${e};`;function C(e){var t,{children:n,transformCode:r}=e,s=w(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=c,l=h();var d;const p=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:N,theme:l},s),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(S,{})]})}))})}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){E(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function B(e){return(0,o.jsx)("button",I(T({type:"button"},e),{style:T({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:s},s,r);var A,_,M=n(89583),z=n(6324),R=n.n(z);function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const V=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),$={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(q=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({},$),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(G)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(G)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(G,e))})),q);var q,G;const U=Object.keys($);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&H.test(s)){const e=s.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(U,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:d[t]&&(a[d[t]].range+=`${a[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(a).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){X(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Q.codeBlockContainer,M.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,c.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function we({code:e,className:t}){const[n,r]=(0,s.useState)(!1),i=(0,s.useRef)(void 0),a=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Se={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function ke({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Se.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:Se.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=h(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(V))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:g,code:j}=J(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(ke,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(we,{className:ne.codeButton,code:j})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Te(e,t,n[t])}))}return e}const Be=(Ze=function(e){var{children:t}=e,n=Ee(e,["children"]);const r=(0,i.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof c?De:re;return(0,o.jsx)(a,Ce(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(C,Ie({scope:L},e)):(0,o.jsx)(Ze,Ie({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},33300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>p,default:()=>y,frontMatter:()=>d,metadata:()=>b,toc:()=>h});var r=n(24246),o=n(71670),s=n(97555),c=n(61132),i=n(89995),a=n(13381);const l="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Please do not modify the classnames! This is a breaking change, and annoying\n// for users!\n\n/**\n * These class names are used to style page layouts in Docusaurus, meant to be\n * targeted by user-provided custom CSS selectors.\n */\nexport const ThemeClassNames = {\n page: {\n blogListPage: 'blog-list-page',\n blogPostPage: 'blog-post-page',\n blogTagsListPage: 'blog-tags-list-page',\n blogTagPostListPage: 'blog-tags-post-list-page',\n blogAuthorsListPage: 'blog-authors-list-page',\n blogAuthorsPostsPage: 'blog-authors-posts-page',\n\n docsDocPage: 'docs-doc-page',\n docsTagsListPage: 'docs-tags-list-page',\n docsTagDocListPage: 'docs-tags-doc-list-page',\n\n mdxPage: 'mdx-page',\n },\n wrapper: {\n main: 'main-wrapper',\n // TODO these wrapper class names are now quite useless\n // TODO do breaking change later in 3.0\n // we already add plugin name/id class on <html>: that's enough\n blogPages: 'blog-wrapper',\n docsPages: 'docs-wrapper',\n mdxPages: 'mdx-wrapper',\n },\n common: {\n editThisPage: 'theme-edit-this-page',\n lastUpdated: 'theme-last-updated',\n backToTopButton: 'theme-back-to-top-button',\n codeBlock: 'theme-code-block',\n admonition: 'theme-admonition',\n unlistedBanner: 'theme-unlisted-banner',\n\n admonitionType: (type: string) => `theme-admonition-${type}`,\n },\n layout: {\n // TODO add other stable classNames here\n },\n\n /**\n * Follows the naming convention \"theme-{blog,doc,version,page}?-<suffix>\"\n */\n docs: {\n docVersionBanner: 'theme-doc-version-banner',\n docVersionBadge: 'theme-doc-version-badge',\n docBreadcrumbs: 'theme-doc-breadcrumbs',\n docMarkdown: 'theme-doc-markdown',\n docTocMobile: 'theme-doc-toc-mobile',\n docTocDesktop: 'theme-doc-toc-desktop',\n docFooter: 'theme-doc-footer',\n docFooterTagsRow: 'theme-doc-footer-tags-row',\n docFooterEditMetaRow: 'theme-doc-footer-edit-meta-row',\n docSidebarContainer: 'theme-doc-sidebar-container',\n docSidebarMenu: 'theme-doc-sidebar-menu',\n docSidebarItemCategory: 'theme-doc-sidebar-item-category',\n docSidebarItemLink: 'theme-doc-sidebar-item-link',\n docSidebarItemCategoryLevel: (level: number) =>\n `theme-doc-sidebar-item-category-level-${level}` as const,\n docSidebarItemLinkLevel: (level: number) =>\n `theme-doc-sidebar-item-link-level-${level}` as const,\n // TODO add other stable classNames here\n },\n blog: {\n // TODO add other stable classNames here\n blogFooterTagsRow: 'theme-blog-footer-tags-row',\n blogFooterEditMetaRow: 'theme-blog-footer-edit-meta-row',\n },\n pages: {\n pageFooterEditMetaRow: 'theme-pages-footer-edit-meta-row',\n },\n} as const;\n";var u=n(38112);const d={description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},p="Styling and Layout",b={id:"styling-layout",title:"Styling and Layout",description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.",source:"@site/docs/styling-layout.mdx",sourceDirName:".",slug:"/styling-layout",permalink:"/docs/styling-layout",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},sidebar:"docs",previous:{title:"Head metadata",permalink:"/docs/markdown-features/head-metadata"},next:{title:"Swizzling",permalink:"/docs/swizzling"}},f={},h=[{value:"Global styles",id:"global-styles",level:2},{value:"Theme Class Names",id:"theme-class-names",level:3},{value:"Styling your site with Infima",id:"styling-your-site-with-infima",level:3},{value:"Dark Mode",id:"dark-mode",level:3},{value:"Data Attributes",id:"data-attributes",level:3},{value:"Mobile View",id:"mobile-view",level:3},{value:"CSS modules",id:"css-modules",level:2},{value:"CSS-in-JS",id:"css-in-js",level:2},{value:"Sass/SCSS",id:"sassscss",level:2},{value:"Global styles using Sass/SCSS",id:"global-styles-using-sassscss",level:3},{value:"Modules using Sass/SCSS",id:"modules-using-sassscss",level:3},{value:"TypeScript support",id:"typescript-support",level:4}];function m(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:n}=t;return n||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"styling-and-layout",children:"Styling and Layout"})}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["This section is focused on styling through stylesheets. For more advanced customizations (DOM structure, React code...), refer to the ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling guide"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"A Docusaurus site is a single-page React application. You can style it the way you style React apps."}),"\n",(0,r.jsx)(t.p,{children:"There are a few approaches/frameworks which will work, depending on your preferences and the type of website you are trying to build. Websites that are highly interactive and behave more like web apps will benefit from more modern styling approaches that co-locate styles with the components. Component styling can also be particularly useful when you wish to customize or swizzle a component."}),"\n",(0,r.jsx)(t.h2,{id:"global-styles",children:"Global styles"}),"\n",(0,r.jsx)(t.p,{children:"This is the most traditional way of styling that most developers (including non-front-end developers) would be familiar with. It works fine for small websites that do not have much customization."}),"\n",(0,r.jsxs)(t.p,{children:["If you're using ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you can create your own CSS files (e.g. ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),") and import them globally by passing them as an option of the classic theme."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n theme: {\n customCss: ['./src/css/custom.css'],\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.p,{children:"Any CSS you write within that file will be available globally and can be referenced directly using string literals."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:".purple-text {\n color: rebeccapurple;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function MyComponent() {\n return (\n <main>\n <h1 className="purple-text">Purple Heading!</h1>\n </main>\n );\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"If you want to add CSS to any element, you can open the DevTools in your browser to inspect its class names. Class names come in several kinds:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Theme class names"}),". These class names are listed exhaustively in ",(0,r.jsx)(t.a,{href:"#theme-class-names",children:"the next subsection"}),". They don't have any default properties. You should always prioritize targeting those stable class names in your custom CSS."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Infima class names"}),". These class names are found in the classic theme and usually follow the ",(0,r.jsx)(t.a,{href:"http://getbem.com/naming/",children:"BEM convention"})," of ",(0,r.jsx)(t.code,{children:"block__element--modifier"}),". They are usually stable but are still considered implementation details, so you should generally avoid targeting them. However, you can ",(0,r.jsx)(t.a,{href:"#styling-your-site-with-infima",children:"modify Infima CSS variables"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"CSS module class names"}),". These class names have a hash in production (",(0,r.jsx)(t.code,{children:"codeBlockContainer_RIuc"}),") and are appended with a long file path in development. They are considered implementation details and you should almost always avoid targeting them in your custom CSS. If you must, you can use an ",(0,r.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors",children:"attribute selector"})," (",(0,r.jsx)(t.code,{children:"[class*='codeBlockContainer']"}),") that ignores the hash."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"theme-class-names",children:"Theme Class Names"}),"\n",(0,r.jsx)(t.p,{children:"We provide some stable CSS class names for robust and maintainable global layout styling. These names are theme-agnostic and meant to be targeted by custom CSS."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["If you can't find a way to create a robust CSS selector, please ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use-case"})," and we will consider adding new class names."]})}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Exhaustive list of stable class names"}),(0,r.jsx)(u.Z,{className:"language-ts",children:l.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"").replace(/^ *\n/gm,"").trim()})]}),"\n",(0,r.jsx)(t.h3,{id:"styling-your-site-with-infima",children:"Styling your site with Infima"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," uses ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima"})," as the underlying styling framework. Infima provides a flexible layout and common UI components styling suitable for content-centric websites (blogs, documentation, landing pages). For more details, check out the ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima website"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["When you scaffold your Docusaurus project with ",(0,r.jsx)(t.code,{children:"create-docusaurus"}),", the website will be generated with basic Infima stylesheets and default styling. You can override Infima CSS variables globally."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --ifm-color-primary: #25c2a0;\n --ifm-code-font-size: 95%;\n}\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Infima uses 7 shades of each color. We recommend using ",(0,r.jsx)(t.a,{href:"https://www.colorbox.io/",children:"ColorBox"})," to find the different shades of colors for your chosen primary color."]}),"\n",(0,r.jsxs)(t.p,{children:["Alternatively, use the following tool to generate the different shades for your website and copy the variables into ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),"."]}),"\n",(0,r.jsx)(i.Z,{}),"\n",(0,r.jsx)(t.h3,{id:"dark-mode",children:"Dark Mode"}),"\n",(0,r.jsxs)(t.p,{children:["In light mode, the ",(0,r.jsx)(t.code,{children:"<html>"})," element has a ",(0,r.jsx)(t.code,{children:'data-theme="light"'})," attribute; in dark mode, it's ",(0,r.jsx)(t.code,{children:'data-theme="dark"'}),". Therefore, you can scope your CSS to dark-mode-only by targeting ",(0,r.jsx)(t.code,{children:"html"})," with a specific attribute."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:"/* Overriding root Infima variables */\n[data-theme='dark'] {\n --ifm-color-primary: #4e89e8;\n}\n/* Styling one class specially in dark mode */\n[data-theme='dark'] .purple-text {\n color: plum;\n}\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["It is possible to initialize the Docusaurus theme directly from a ",(0,r.jsx)(t.code,{children:"docusaurus-theme"})," query string parameter."]}),(0,r.jsx)(t.p,{children:"Examples:"}),(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-theme=dark"}),(0,r.jsx)(a.Z,{url:"/docs/configuration?docusaurus-theme=light"})]}),"\n",(0,r.jsx)(t.h3,{id:"data-attributes",children:"Data Attributes"}),"\n",(0,r.jsxs)(t.p,{children:["It is possible to inject ",(0,r.jsx)(t.code,{children:"<html>"})," data attributes with query string parameters following the ",(0,r.jsx)(t.code,{children:"docusaurus-data-<key>"})," pattern. This gives you the flexibility to style a page differently based on the query string."]}),"\n",(0,r.jsx)(t.p,{children:"For example, let's render one of our pages with a red border and no navbar:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(t.admonition,{title:"Iframe Mode",type:"tip",children:(0,r.jsxs)(t.p,{children:["If you plan to embed some Docusaurus pages on another site though an iframe, it can be useful to create an alternative display mode and use iframe urls such as ",(0,r.jsx)(t.code,{children:"https://mysite.com/docs/myDoc?docusaurus-data-mode=iframe"}),". It is your responsibility to provide the additional styles and decide which UI elements you want to keep or hide."]})}),"\n",(0,r.jsx)(t.h3,{id:"mobile-view",children:"Mobile View"}),"\n",(0,r.jsxs)(t.p,{children:["Docusaurus uses ",(0,r.jsx)(t.code,{children:"996px"})," as the cutoff between mobile screen width and desktop. If you want your layout to be different in the mobile view, you can use media queries."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:".banner {\n padding: 4rem;\n}\n/** In mobile view, reduce the padding */\n@media screen and (max-width: 996px) {\n .heroBanner {\n padding: 2rem;\n }\n}\n"})}),"\n",(0,r.jsx)(t.admonition,{title:"Customizing the breakpoint",type:"tip",children:(0,r.jsxs)(t.p,{children:["Some React components, such as the header and the sidebar, implement different JavaScript logic when in mobile view. If you change the breakpoint value in your custom CSS, you probably also want to update the invocations of the ",(0,r.jsx)(t.code,{children:"useWindowSize"})," hook by ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling"})," the components it's used in and passing an explicit option argument."]})}),"\n",(0,r.jsx)(t.h2,{id:"css-modules",children:"CSS modules"}),"\n",(0,r.jsxs)(t.p,{children:["To style your components using ",(0,r.jsx)(t.a,{href:"https://github.com/css-modules/css-modules",children:"CSS Modules"}),", name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.css"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.css"}),"). Webpack will load such CSS files as CSS modules and you have to reference the class names as properties of the imported CSS module (as opposed to using plain strings). This is similar to the convention used in ",(0,r.jsx)(t.a,{href:"https://facebook.github.io/create-react-app/docs/adding-a-css-modules-stylesheet",children:"Create React App"}),"."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="styles.module.css"',children:".main {\n padding: 12px;\n}\n\n.heading {\n font-weight: bold;\n}\n\n.contents {\n color: #ccc;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.css';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <h1 className={styles.heading}>Hello!</h1>\n <article className={styles.contents}>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.p,{children:"The class names will be processed by webpack into a globally unique class name during build."}),"\n",(0,r.jsx)(t.h2,{id:"css-in-js",children:"CSS-in-JS"}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["CSS-in-JS support is a work in progress, so libs like MUI may have display quirks. ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/1640",children:"Welcoming PRs"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"sassscss",children:"Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["To use Sass/SCSS as your CSS preprocessor, install the unofficial Docusaurus plugin ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),". This plugin works for both global styles and the CSS modules approach:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Install ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),":"]}),"\n"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add docusaurus-plugin-sass sass\n"})})})]}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["Include the plugin in your ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"})," file:"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n // highlight-next-line\n plugins: ['docusaurus-plugin-sass'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"Write and import your stylesheets in Sass/SCSS as normal."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"global-styles-using-sassscss",children:"Global styles using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["You can now set the ",(0,r.jsx)(t.code,{children:"customCss"})," property of ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," to point to your Sass/SCSS file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // ...\n theme: {\n // highlight-next-line\n customCss: ['./src/css/custom.scss'],\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.h3,{id:"modules-using-sassscss",children:"Modules using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["Name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.scss"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.scss"}),") instead of ",(0,r.jsx)(t.code,{children:".css"}),". Webpack will use ",(0,r.jsx)(t.code,{children:"sass-loader"})," to preprocess your stylesheets and load them as CSS modules."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-scss",metastring:'title="styles.module.scss"',children:".main {\n padding: 12px;\n\n article {\n color: #ccc;\n }\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.scss';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <article>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h4,{id:"typescript-support",children:"TypeScript support"}),"\n",(0,r.jsxs)(t.p,{children:["To enable TypeScript support for Sass/SCSS modules, the TypeScript configuration should be updated to add the ",(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})," type definitions. This can be done in the ",(0,r.jsx)(t.code,{children:"tsconfig.json"})," file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-diff",children:'{\n "extends": "@tsconfig/docusaurus/tsconfig.json",\n "compilerOptions": {\n ...\n+ "types": ["docusaurus-plugin-sass"]\n }\n}\n'})})]})}function y(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5856],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",s(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,n)=>{n.d(t,{Z:()=>ie});var r=n(24246),o=n(27378);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function i(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),s=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:s.length>0?(0,r.jsx)(r.Fragment,{children:s}):null}}(e.children);var i;const a=null!==(i=e.title)&&void 0!==i?i:t;return c(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){s(e,t,n[t])}))}return e}({},e,a&&{title:a}),{children:n})}var a=n(40624),l=n(36712),u=n(89583);const d={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function p({type:e,className:t,children:n}){return(0,r.jsx)("div",{className:(0,a.Z)(u.k.common.admonition,u.k.common.admonitionType(e),d.admonition,t),children:n})}function b({icon:e,title:t}){return(0,r.jsxs)("div",{className:d.admonitionHeading,children:[(0,r.jsx)("span",{className:d.admonitionIcon,children:e}),t]})}function f({children:e}){return e?(0,r.jsx)("div",{className:d.admonitionContent,children:e}):null}function h(e){const{type:t,icon:n,title:o,children:s,className:c}=e;return(0,r.jsxs)(p,{type:t,className:c,children:[o||n?(0,r.jsx)(b,{title:o,icon:n}):null,(0,r.jsx)(f,{children:s})]})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){return(0,r.jsx)("svg",y(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const w={icon:(0,r.jsx)(g,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,r.jsx)(h,O(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}({},w,e),{className:(0,a.Z)("alert alert--secondary",e.className),children:e.children}))}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function S(e){return(0,r.jsx)("svg",P(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const N={icon:(0,r.jsx)(S,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(e){return(0,r.jsx)(h,D(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){k(e,t,n[t])}))}return e}({},N,e),{className:(0,a.Z)("alert alert--success",e.className),children:e.children}))}var E=n(35434);function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const B={icon:(0,r.jsx)(E.Z,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function Z(e){return(0,r.jsx)(h,I(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){T(e,t,n[t])}))}return e}({},B,e),{className:(0,a.Z)("alert alert--info",e.className),children:e.children}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,r.jsx)("svg",A(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const R={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function H(e){return(0,r.jsx)("svg",V(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function F(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const G={icon:(0,r.jsx)(H,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function U(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const Y={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}const X={note:v,tip:C,info:Z,warning:function(e){return(0,r.jsx)(h,z(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},R,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(h,F(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){$(e,t,n[t])}))}return e}({},G,e),{className:(0,a.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,r.jsx)(v,Q({title:"secondary"},e)),important:e=>(0,r.jsx)(Z,Q({title:"important"},e)),success:e=>(0,r.jsx)(C,Q({title:"success"},e)),caution:function(e){return(0,r.jsx)(h,U(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){q(e,t,n[t])}))}return e}({},Y,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))}},ee=Q({},X,K);var te=n(52615);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re,oe;const se=(re=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ne(e,t,n[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,r.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,r.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,r.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(re,Object.getOwnPropertyDescriptors(oe)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(oe)).forEach((function(e){Object.defineProperty(re,e,Object.getOwnPropertyDescriptor(oe,e))})),re);function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ie(e){const t=i(e),n=(o=t.type,se[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),se.info));var o;return(0,r.jsx)(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ce(e,t,n[t])}))}return e}({},t))}},61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,l._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=h(e),[c,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[l,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){w(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),s=i[r].value;s!==n&&(l(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function S({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function k(e){const t=g(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},t,e)),(0,r.jsx)(S,v({},t,e))]})}function D(e){const t=(0,j.Z)();return(0,r.jsx)(k,x(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},13381:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(6698));function s({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(o.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:l}){return(0,r.jsxs)("div",{className:s.browserWindow,style:a(i({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:l,children:e})]})}},89995:(e,t,n)=>{n.d(t,{Z:()=>j});var r=n(24246),o=n(27378),s=n(40624),c=n(27124),i=n.n(c),a=n(41428),l=n(36712),u=n(78844),d=n(38112),p=n(77773),b=n(31688);const f={color:"color_mVUL",input:"input_HUC3",colorInput:"colorInput_C1YB",colorTable:"colorTable_Js7s"};function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e,t){const n=i()(e).contrast(i()(t));return n>7?"AAA \ud83c\udfc5":n>4.5?"AA \ud83d\udc4d":"Fail \ud83d\udd34"}function j(){const{colorMode:e,setColorMode:t}=(0,u.I)(),n="dark"===e,c=n?b.r$:b.Yj,h=n?b.iR:b.Nu,[j,O]=(0,o.useState)(c),[w,v]=(0,o.useState)(c),[x,P]=(0,o.useState)(h),[S,k]=(0,o.useState)(b.NT),[D,N]=(0,o.useState)(n?b.Ax:b.lP);function C(e){const t=e.target.value.replace(/^(?=[^#])/,"#");O(t);try{v(i()(t).hex())}catch(n){}}return(0,o.useEffect)((()=>{N(n?b.Ax:b.lP)}),[n]),(0,o.useEffect)((()=>{var e;const t=JSON.parse(null!==(e=D.get())&&void 0!==e?e:"{}");var n,r,o,s;O(null!==(n=t.baseColor)&&void 0!==n?n:c),v(null!==(r=t.baseColor)&&void 0!==r?r:c),P(null!==(o=t.background)&&void 0!==o?o:h),k(null!==(s=t.shades)&&void 0!==s?s:b.NT)}),[D,h,c]),(0,o.useEffect)((()=>{(0,b.i3)({baseColor:w,background:x,shades:S},n),D.set(JSON.stringify({baseColor:w,background:x,shades:S}))}),[w,x,S,D,n]),(0,r.jsxs)("div",{children:[(0,r.jsx)(p.Z,{type:"tip",children:(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body",values:{wcagLink:(0,r.jsx)(a.Z,{href:"https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast",children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body.wcagLink.label",children:"WCAG-AA contrast ratio"})})},children:"Aim for at least {wcagLink} for the primary color to ensure readability. Use the Docusaurus website itself to preview how your color palette would look like. You can use alternative palettes in dark mode because one color doesn't usually work in both light and dark mode."})})}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"primary_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.primary.label",children:"Primary Color:"})})})," ",(0,r.jsx)("input",{id:"primary_color",type:"text",className:(0,s.Z)(f.input,"margin-right--sm"),value:j,onChange:C}),(0,r.jsx)("input",{type:"color",className:f.colorInput,value:w,onChange:C}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--primary margin-left--md",onClick:()=>t(n?"light":"dark"),children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label",values:{colorMode:n?(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.light",children:"light"}):(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.dark",children:"dark"})},children:"Edit {colorMode} mode"})}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--secondary margin-left--md",onClick:()=>{O(c),v(c),P(h),k(b.NT)},children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.resetButton.label",children:"Reset"})})]}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"background_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.background.label",children:"Background:"})})}),(0,r.jsx)("input",{id:"background_color",type:"color",className:(0,s.Z)(f.colorInput,"margin-right--sm"),value:x,onChange:e=>{P(e.target.value)}})]}),(0,r.jsx)("div",{children:(0,r.jsxs)("table",{className:f.colorTable,children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading1",children:"CSS Variable Name"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading2",description:"This column is the color's representation in hex",children:"Hex"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading3",description:"This column is the adjusted shades' adjustment values relative to the primary color",children:"Adjustment"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading4",description:"This column is WCAG contrast rating: AAA, AA, Fail",children:"Contrast Rating"})})]})}),(0,r.jsx)("tbody",{children:(0,b.t8)(S,w).sort(((e,t)=>e.displayOrder-t.displayOrder)).map((e=>{const{variableName:t,adjustment:n,adjustmentInput:o,hex:s}=e;return(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{children:(0,r.jsx)("code",{children:t})}),(0,r.jsxs)("td",{children:[(0,r.jsx)("span",{className:f.color,style:{backgroundColor:s}}),(0,r.jsx)("code",{className:"margin-left--sm",children:s.toLowerCase()})]}),(0,r.jsx)("td",{children:"--ifm-color-primary"===t?0:(0,r.jsx)("input",{"aria-label":`${t} CSS variable name`,className:f.input,type:"number",value:o,onChange:e=>{const r=parseFloat(e.target.value);k(y(m({},S),{[t]:y(m({},S[t]),{adjustmentInput:e.target.value,adjustment:Number.isNaN(r)?n:r/100})}))}})}),(0,r.jsx)("td",{style:{fontSize:"medium",backgroundColor:x,color:s},children:(0,r.jsx)("b",{children:g(s,x)})})]},t)}))})]})}),(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.text",values:{cssPath:(0,r.jsx)("code",{children:"src/css/custom.css"})},children:"Replace the variables in {cssPath} with these new variables."})}),(0,r.jsx)(d.Z,{className:"language-css",title:"/src/css/custom.css",children:`${n?"[data-theme='dark']":":root"} {\n${(0,b.t8)(S,w).sort(((e,t)=>e.codeOrder-t.codeOrder)).map((e=>` ${e.variableName}: ${e.hex.toLowerCase()};`)).join("\n")}${x!==h?`\n --ifm-background-color: ${x};`:""}\n}`})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>B});var o=n(24246),s=n(27378),c=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function w(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function k(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(k,{})]})}const N=e=>`${e};`;function C(e){var t,{children:n,transformCode:r}=e,s=w(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=c,l=h();var d;const p=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:N,theme:l},s),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(S,{})]})}))})}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){E(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function B(e){return(0,o.jsx)("button",I(T({type:"button"},e),{style:T({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:s},s,r);var A,_,M=n(89583),z=n(6324),R=n.n(z);function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const V=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),$={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(G=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({},$),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(G,Object.getOwnPropertyDescriptors(q)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(q)).forEach((function(e){Object.defineProperty(G,e,Object.getOwnPropertyDescriptor(q,e))})),G);var G,q;const U=Object.keys($);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&H.test(s)){const e=s.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(U,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:d[t]&&(a[d[t]].range+=`${a[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(a).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){X(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Q.codeBlockContainer,M.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,c.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function we({code:e,className:t}){const[n,r]=(0,s.useState)(!1),i=(0,s.useRef)(void 0),a=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Se={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function ke({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Se.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:Se.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=h(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(V))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:g,code:j}=J(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(ke,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(we,{className:ne.codeButton,code:j})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Te(e,t,n[t])}))}return e}const Be=(Ze=function(e){var{children:t}=e,n=Ee(e,["children"]);const r=(0,i.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof c?De:re;return(0,o.jsx)(a,Ce(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(C,Ie({scope:L},e)):(0,o.jsx)(Ze,Ie({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},33300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>p,default:()=>y,frontMatter:()=>d,metadata:()=>b,toc:()=>h});var r=n(24246),o=n(71670),s=n(97555),c=n(61132),i=n(89995),a=n(13381);const l="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Please do not modify the classnames! This is a breaking change, and annoying\n// for users!\n\n/**\n * These class names are used to style page layouts in Docusaurus, meant to be\n * targeted by user-provided custom CSS selectors.\n */\nexport const ThemeClassNames = {\n page: {\n blogListPage: 'blog-list-page',\n blogPostPage: 'blog-post-page',\n blogTagsListPage: 'blog-tags-list-page',\n blogTagPostListPage: 'blog-tags-post-list-page',\n blogAuthorsListPage: 'blog-authors-list-page',\n blogAuthorsPostsPage: 'blog-authors-posts-page',\n\n docsDocPage: 'docs-doc-page',\n docsTagsListPage: 'docs-tags-list-page',\n docsTagDocListPage: 'docs-tags-doc-list-page',\n\n mdxPage: 'mdx-page',\n },\n wrapper: {\n main: 'main-wrapper',\n // TODO these wrapper class names are now quite useless\n // TODO do breaking change later in 3.0\n // we already add plugin name/id class on <html>: that's enough\n blogPages: 'blog-wrapper',\n docsPages: 'docs-wrapper',\n mdxPages: 'mdx-wrapper',\n },\n common: {\n editThisPage: 'theme-edit-this-page',\n lastUpdated: 'theme-last-updated',\n backToTopButton: 'theme-back-to-top-button',\n codeBlock: 'theme-code-block',\n admonition: 'theme-admonition',\n unlistedBanner: 'theme-unlisted-banner',\n\n admonitionType: (type: string) => `theme-admonition-${type}`,\n },\n layout: {\n // TODO add other stable classNames here\n },\n\n /**\n * Follows the naming convention \"theme-{blog,doc,version,page}?-<suffix>\"\n */\n docs: {\n docVersionBanner: 'theme-doc-version-banner',\n docVersionBadge: 'theme-doc-version-badge',\n docBreadcrumbs: 'theme-doc-breadcrumbs',\n docMarkdown: 'theme-doc-markdown',\n docTocMobile: 'theme-doc-toc-mobile',\n docTocDesktop: 'theme-doc-toc-desktop',\n docFooter: 'theme-doc-footer',\n docFooterTagsRow: 'theme-doc-footer-tags-row',\n docFooterEditMetaRow: 'theme-doc-footer-edit-meta-row',\n docSidebarContainer: 'theme-doc-sidebar-container',\n docSidebarMenu: 'theme-doc-sidebar-menu',\n docSidebarItemCategory: 'theme-doc-sidebar-item-category',\n docSidebarItemLink: 'theme-doc-sidebar-item-link',\n docSidebarItemCategoryLevel: (level: number) =>\n `theme-doc-sidebar-item-category-level-${level}` as const,\n docSidebarItemLinkLevel: (level: number) =>\n `theme-doc-sidebar-item-link-level-${level}` as const,\n // TODO add other stable classNames here\n },\n blog: {\n // TODO add other stable classNames here\n blogFooterTagsRow: 'theme-blog-footer-tags-row',\n blogFooterEditMetaRow: 'theme-blog-footer-edit-meta-row',\n },\n pages: {\n pageFooterEditMetaRow: 'theme-pages-footer-edit-meta-row',\n },\n} as const;\n";var u=n(38112);const d={description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},p="Styling and Layout",b={id:"styling-layout",title:"Styling and Layout",description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.",source:"@site/docs/styling-layout.mdx",sourceDirName:".",slug:"/styling-layout",permalink:"/docs/styling-layout",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},sidebar:"docs",previous:{title:"Head metadata",permalink:"/docs/markdown-features/head-metadata"},next:{title:"Swizzling",permalink:"/docs/swizzling"}},f={},h=[{value:"Global styles",id:"global-styles",level:2},{value:"Theme Class Names",id:"theme-class-names",level:3},{value:"Styling your site with Infima",id:"styling-your-site-with-infima",level:3},{value:"Dark Mode",id:"dark-mode",level:3},{value:"Data Attributes",id:"data-attributes",level:3},{value:"Mobile View",id:"mobile-view",level:3},{value:"CSS modules",id:"css-modules",level:2},{value:"CSS-in-JS",id:"css-in-js",level:2},{value:"Sass/SCSS",id:"sassscss",level:2},{value:"Global styles using Sass/SCSS",id:"global-styles-using-sassscss",level:3},{value:"Modules using Sass/SCSS",id:"modules-using-sassscss",level:3},{value:"TypeScript support",id:"typescript-support",level:4}];function m(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:n}=t;return n||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"styling-and-layout",children:"Styling and Layout"})}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["This section is focused on styling through stylesheets. For more advanced customizations (DOM structure, React code...), refer to the ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling guide"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"A Docusaurus site is a single-page React application. You can style it the way you style React apps."}),"\n",(0,r.jsx)(t.p,{children:"There are a few approaches/frameworks which will work, depending on your preferences and the type of website you are trying to build. Websites that are highly interactive and behave more like web apps will benefit from more modern styling approaches that co-locate styles with the components. Component styling can also be particularly useful when you wish to customize or swizzle a component."}),"\n",(0,r.jsx)(t.h2,{id:"global-styles",children:"Global styles"}),"\n",(0,r.jsx)(t.p,{children:"This is the most traditional way of styling that most developers (including non-front-end developers) would be familiar with. It works fine for small websites that do not have much customization."}),"\n",(0,r.jsxs)(t.p,{children:["If you're using ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you can create your own CSS files (e.g. ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),") and import them globally by passing them as an option of the classic theme."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n theme: {\n customCss: ['./src/css/custom.css'],\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.p,{children:"Any CSS you write within that file will be available globally and can be referenced directly using string literals."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:".purple-text {\n color: rebeccapurple;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function MyComponent() {\n return (\n <main>\n <h1 className="purple-text">Purple Heading!</h1>\n </main>\n );\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"If you want to add CSS to any element, you can open the DevTools in your browser to inspect its class names. Class names come in several kinds:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Theme class names"}),". These class names are listed exhaustively in ",(0,r.jsx)(t.a,{href:"#theme-class-names",children:"the next subsection"}),". They don't have any default properties. You should always prioritize targeting those stable class names in your custom CSS."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Infima class names"}),". These class names are found in the classic theme and usually follow the ",(0,r.jsx)(t.a,{href:"http://getbem.com/naming/",children:"BEM convention"})," of ",(0,r.jsx)(t.code,{children:"block__element--modifier"}),". They are usually stable but are still considered implementation details, so you should generally avoid targeting them. However, you can ",(0,r.jsx)(t.a,{href:"#styling-your-site-with-infima",children:"modify Infima CSS variables"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"CSS module class names"}),". These class names have a hash in production (",(0,r.jsx)(t.code,{children:"codeBlockContainer_RIuc"}),") and are appended with a long file path in development. They are considered implementation details and you should almost always avoid targeting them in your custom CSS. If you must, you can use an ",(0,r.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors",children:"attribute selector"})," (",(0,r.jsx)(t.code,{children:"[class*='codeBlockContainer']"}),") that ignores the hash."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"theme-class-names",children:"Theme Class Names"}),"\n",(0,r.jsx)(t.p,{children:"We provide some stable CSS class names for robust and maintainable global layout styling. These names are theme-agnostic and meant to be targeted by custom CSS."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["If you can't find a way to create a robust CSS selector, please ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use-case"})," and we will consider adding new class names."]})}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Exhaustive list of stable class names"}),(0,r.jsx)(u.Z,{className:"language-ts",children:l.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"").replace(/^ *\n/gm,"").trim()})]}),"\n",(0,r.jsx)(t.h3,{id:"styling-your-site-with-infima",children:"Styling your site with Infima"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," uses ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima"})," as the underlying styling framework. Infima provides a flexible layout and common UI components styling suitable for content-centric websites (blogs, documentation, landing pages). For more details, check out the ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima website"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["When you scaffold your Docusaurus project with ",(0,r.jsx)(t.code,{children:"create-docusaurus"}),", the website will be generated with basic Infima stylesheets and default styling. You can override Infima CSS variables globally."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --ifm-color-primary: #25c2a0;\n --ifm-code-font-size: 95%;\n}\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Infima uses 7 shades of each color. We recommend using ",(0,r.jsx)(t.a,{href:"https://www.colorbox.io/",children:"ColorBox"})," to find the different shades of colors for your chosen primary color."]}),"\n",(0,r.jsxs)(t.p,{children:["Alternatively, use the following tool to generate the different shades for your website and copy the variables into ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),"."]}),"\n",(0,r.jsx)(i.Z,{}),"\n",(0,r.jsx)(t.h3,{id:"dark-mode",children:"Dark Mode"}),"\n",(0,r.jsxs)(t.p,{children:["In light mode, the ",(0,r.jsx)(t.code,{children:"<html>"})," element has a ",(0,r.jsx)(t.code,{children:'data-theme="light"'})," attribute; in dark mode, it's ",(0,r.jsx)(t.code,{children:'data-theme="dark"'}),". Therefore, you can scope your CSS to dark-mode-only by targeting ",(0,r.jsx)(t.code,{children:"html"})," with a specific attribute."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:"/* Overriding root Infima variables */\n[data-theme='dark'] {\n --ifm-color-primary: #4e89e8;\n}\n/* Styling one class specially in dark mode */\n[data-theme='dark'] .purple-text {\n color: plum;\n}\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["It is possible to initialize the Docusaurus theme directly from a ",(0,r.jsx)(t.code,{children:"docusaurus-theme"})," query string parameter."]}),(0,r.jsx)(t.p,{children:"Examples:"}),(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-theme=dark"}),(0,r.jsx)(a.Z,{url:"/docs/configuration?docusaurus-theme=light"})]}),"\n",(0,r.jsx)(t.h3,{id:"data-attributes",children:"Data Attributes"}),"\n",(0,r.jsxs)(t.p,{children:["It is possible to inject ",(0,r.jsx)(t.code,{children:"<html>"})," data attributes with query string parameters following the ",(0,r.jsx)(t.code,{children:"docusaurus-data-<key>"})," pattern. This gives you the flexibility to style a page differently based on the query string."]}),"\n",(0,r.jsx)(t.p,{children:"For example, let's render one of our pages with a red border and no navbar:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(t.admonition,{title:"Iframe Mode",type:"tip",children:(0,r.jsxs)(t.p,{children:["If you plan to embed some Docusaurus pages on another site though an iframe, it can be useful to create an alternative display mode and use iframe urls such as ",(0,r.jsx)(t.code,{children:"https://mysite.com/docs/myDoc?docusaurus-data-mode=iframe"}),". It is your responsibility to provide the additional styles and decide which UI elements you want to keep or hide."]})}),"\n",(0,r.jsx)(t.h3,{id:"mobile-view",children:"Mobile View"}),"\n",(0,r.jsxs)(t.p,{children:["Docusaurus uses ",(0,r.jsx)(t.code,{children:"996px"})," as the cutoff between mobile screen width and desktop. If you want your layout to be different in the mobile view, you can use media queries."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:".banner {\n padding: 4rem;\n}\n/** In mobile view, reduce the padding */\n@media screen and (max-width: 996px) {\n .heroBanner {\n padding: 2rem;\n }\n}\n"})}),"\n",(0,r.jsx)(t.admonition,{title:"Customizing the breakpoint",type:"tip",children:(0,r.jsxs)(t.p,{children:["Some React components, such as the header and the sidebar, implement different JavaScript logic when in mobile view. If you change the breakpoint value in your custom CSS, you probably also want to update the invocations of the ",(0,r.jsx)(t.code,{children:"useWindowSize"})," hook by ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling"})," the components it's used in and passing an explicit option argument."]})}),"\n",(0,r.jsx)(t.h2,{id:"css-modules",children:"CSS modules"}),"\n",(0,r.jsxs)(t.p,{children:["To style your components using ",(0,r.jsx)(t.a,{href:"https://github.com/css-modules/css-modules",children:"CSS Modules"}),", name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.css"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.css"}),"). Webpack will load such CSS files as CSS modules and you have to reference the class names as properties of the imported CSS module (as opposed to using plain strings). This is similar to the convention used in ",(0,r.jsx)(t.a,{href:"https://facebook.github.io/create-react-app/docs/adding-a-css-modules-stylesheet",children:"Create React App"}),"."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="styles.module.css"',children:".main {\n padding: 12px;\n}\n\n.heading {\n font-weight: bold;\n}\n\n.contents {\n color: #ccc;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.css';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <h1 className={styles.heading}>Hello!</h1>\n <article className={styles.contents}>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.p,{children:"The class names will be processed by webpack into a globally unique class name during build."}),"\n",(0,r.jsx)(t.h2,{id:"css-in-js",children:"CSS-in-JS"}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["CSS-in-JS support is a work in progress, so libs like MUI may have display quirks. ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/1640",children:"Welcoming PRs"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"sassscss",children:"Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["To use Sass/SCSS as your CSS preprocessor, install the unofficial Docusaurus plugin ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),". This plugin works for both global styles and the CSS modules approach:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Install ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),":"]}),"\n"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add docusaurus-plugin-sass sass\n"})})})]}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["Include the plugin in your ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"})," file:"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n // highlight-next-line\n plugins: ['docusaurus-plugin-sass'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"Write and import your stylesheets in Sass/SCSS as normal."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"global-styles-using-sassscss",children:"Global styles using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["You can now set the ",(0,r.jsx)(t.code,{children:"customCss"})," property of ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," to point to your Sass/SCSS file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // ...\n theme: {\n // highlight-next-line\n customCss: ['./src/css/custom.scss'],\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.h3,{id:"modules-using-sassscss",children:"Modules using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["Name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.scss"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.scss"}),") instead of ",(0,r.jsx)(t.code,{children:".css"}),". Webpack will use ",(0,r.jsx)(t.code,{children:"sass-loader"})," to preprocess your stylesheets and load them as CSS modules."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-scss",metastring:'title="styles.module.scss"',children:".main {\n padding: 12px;\n\n article {\n color: #ccc;\n }\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.scss';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <article>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h4,{id:"typescript-support",children:"TypeScript support"}),"\n",(0,r.jsxs)(t.p,{children:["To enable TypeScript support for Sass/SCSS modules, the TypeScript configuration should be updated to add the ",(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})," type definitions. This can be done in the ",(0,r.jsx)(t.code,{children:"tsconfig.json"})," file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-diff",children:'{\n "extends": "@tsconfig/docusaurus/tsconfig.json",\n "compilerOptions": {\n ...\n+ "types": ["docusaurus-plugin-sass"]\n }\n}\n'})})]})}function y(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}}}]); \ No newline at end of file diff --git a/assets/js/64dfb3e9.28333cc1.js b/assets/js/64dfb3e9.7fc52958.js similarity index 66% rename from assets/js/64dfb3e9.28333cc1.js rename to assets/js/64dfb3e9.7fc52958.js index 5bfe67321f0d..0aa9b15d353c 100644 --- a/assets/js/64dfb3e9.28333cc1.js +++ b/assets/js/64dfb3e9.7fc52958.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44027],{97408:(e,n,t)=>{t.d(n,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},41124:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(4646));const s={tableOfContentsInline:"tableOfContentsInline_2sru"};function i({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,r.jsx)("div",{className:s.tableOfContentsInline,children:(0,r.jsx)(o.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:t,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,t)=>{t.d(n,{Z:()=>O});var r=t(24246),o=t(27378),s=t(73919);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function u(e){const n=e.map((e=>a(c({},e),{parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const r=t.slice(2,e.level);e.parentIndex=Math.max(...r),t[e.level]=n}));const r=[];return n.forEach((e=>{const{parentIndex:t}=e,o=l(e,["parentIndex"]);t>=0?n[t].children.push(o):r.push(o)})),r}function d({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return e.flatMap((e=>{const r=d({toc:e.children,minHeadingLevel:n,maxHeadingLevel:t});return function(e){return e.level>=n&&e.level<=t}(e)?[a(c({},e),{children:r})]:r}))}function p(e){const n=e.getBoundingClientRect();return n.top===n.bottom?p(e.parentNode):n}function h(e,{anchorTopOffset:n}){const t=e.find((e=>p(e).top>=n));if(t){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(p(t))?t:null!==(r=e[e.indexOf(t)-1])&&void 0!==r?r:null;var r}var o;return null!==(o=e[e.length-1])&&void 0!==o?o:null}function m(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:n}}=(0,s.L)();return(0,o.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function f(e){const n=(0,o.useRef)(void 0),t=m();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:o,minHeadingLevel:s,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:n}){const t=[];for(let r=e;r<=n;r+=1)t.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(t.join()))}({minHeadingLevel:s,maxHeadingLevel:i}),a=h(c,{anchorTopOffset:t.current}),l=e.find((e=>a&&a.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(o),e.classList.add(o),n.current=e):e.classList.remove(o)}(e,e===l)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,t])}var b=t(41428);function g({toc:e,className:n,linkClassName:t,isChild:o}){return e.length?(0,r.jsx)("ul",{className:o?void 0:n,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(b.Z,{to:`#${e.id}`,className:null!=t?t:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:t})]},e.id)))}):null}const j=o.memo(g);function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function O(e){var{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:a,maxHeadingLevel:l}=e,p=x(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const h=(0,s.L)(),m=null!=a?a:h.tableOfContents.minHeadingLevel,b=null!=l?l:h.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,o.useMemo)((()=>d({toc:u(e),minHeadingLevel:n,maxHeadingLevel:t})),[e,n,t])}({toc:n,minHeadingLevel:m,maxHeadingLevel:b});return f((0,o.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:m,maxHeadingLevel:b}}),[i,c,m,b])),(0,r.jsx)(j,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}({toc:g,className:t,linkClassName:i},p))}},61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),c=t(3620),a=t(44479),l=t(62821),u=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,l._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=f(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,u]=g({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),m=(()=>{const e=null!=l?l:p;return b({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),h(e)}),[u,h,s]),tabValues:s}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function v(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),s=c[r].value;s!==t&&(l(n),o(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",v(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(P,w({},n,e))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(D,v(w({},e),{children:m(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>l});var r=t(24246),o=(t(27378),t(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:l}){return(0,r.jsxs)("div",{className:s.browserWindow,style:a(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:l,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Te});var r={};t.r(r),t.d(r,{ButtonExample:()=>B});var o=t(24246),s=t(27378),i=t(40624),c=t(29088),a=t(32711),l=t(36712),u=t(4423),d=t(94544),p=t(30691),h=t(78844),m=t(73919);function f(){const{prism:e}=(0,m.L)(),{colorMode:n}=(0,h.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(g.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function D(){const e=(0,c.Z)();return(0,o.jsx)(a.uz,{className:g.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,s=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,l=f();var d;const p=null!==(d=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(a.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:l},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function M(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){M(e,n,t[n])}))}return e}function I(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function B(e){return(0,o.jsx)("button",I(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const H=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var T,X,_=t(89583),Z=t(6324),R=t.n(Z);function A(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const W=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=($=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){A(e,n,t[n])}))}return e}({},F),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties($,Object.getOwnPropertyDescriptors(q)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(q)).forEach((function(e){Object.defineProperty($,e,Object.getOwnPropertyDescriptor(q,e))})),$);var $,q;const U=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=z[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Q(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(U,n)}}(r,o),c=t.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let h=0;h<c.length;){const e=c[h].match(i);if(!e){h+=1;continue}const n=e.slice(1).find((e=>void 0!==e));l[n]?a[l[n]].range+=`${h},`:u[n]?a[u[n]].start=h:d[n]&&(a[d[n]].range+=`${a[d[n]].start}-${h-1},`),c.splice(h,1)}t=c.join("\n");const p={};return Object.entries(a).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(T=p)[X=n])&&void 0!==t||(T[X]=[]),p[n].push(e)}))})),{lineClassNames:p,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function G(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){G(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ue(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){le(e,n,t[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function pe({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&ae.codeLine)}),a=e.map(((e,n)=>(0,o.jsx)("span",ue({},s({token:e})),n)));return(0,o.jsxs)("span",de(ue({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var he=t(34370);function me(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){me(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),a=(0,s.useCallback)((()=>{(0,he.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ve(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",ve(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,m.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:l),h=f(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),g=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(W))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:j,code:y}=Q(e,{metastring:t,language:p,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,p&&!n.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:h,code:y,language:null!=p?p:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:j[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(De,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(Oe,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Me(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Be=(Le=function(e){var{children:n}=e,t=Me(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),a="string"==typeof i?Se:re;return(0,o.jsx)(a,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:H},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function He(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){return(0,o.jsx)(Be,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){He(e,n,t[n])}))}return e}({},e))}},77132:(e,n,t)=>{t.r(n),t.d(n,{Highlight:()=>b,assets:()=>f,contentTitle:()=>h,default:()=>y,frontMatter:()=>p,metadata:()=>m,toc:()=>g});var r=t(24246),o=t(71670),s=t(6698),i=t(97555),c=t(61132);var a=t(38112),l=t(97408);function u(e){const n={code:"code",p:"p",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("span",{children:["Hello ",e.name]}),"\n",(0,r.jsxs)(n.p,{children:["This is text some content from ",(0,r.jsx)(n.code,{children:"_markdown-partial-example.md"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}t(41124);const p={id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},h="MDX and React",m={id:"guides/markdown-features/react",title:"MDX and React",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",source:"@site/docs/guides/markdown-features/markdown-features-react.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/react",permalink:"/docs/markdown-features/react",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},sidebar:"docs",previous:{title:"Markdown Features",permalink:"/docs/markdown-features"},next:{title:"Tabs",permalink:"/docs/markdown-features/tabs"}},f={},b=({children:e,color:n})=>{const t={span:"span",...(0,o.a)()};return(0,r.jsx)(t.span,{style:{backgroundColor:n,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},g=[{value:"Exporting components",id:"exporting-components",level:3},{value:"Importing components",id:"importing-components",level:3},{value:"MDX component scope",id:"mdx-component-scope",level:3},{value:"Markdown and JSX interoperability",id:"markdown-and-jsx-interoperability",level:3},{value:"Importing code snippets",id:"importing-code-snippets",level:2},{value:"Importing Markdown",id:"importing-markdown",level:2},{value:"Available exports",id:"available-exports",level:2}];function j(e){const n={a:"a",admonition:"admonition",b:"b",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"mdx-and-react",children:"MDX and React"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus has built-in support for ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"}),", which allows you to write JSX within your Markdown files and render them as React components."]}),"\n",(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX docs"})," to see what fancy stuff you can do with MDX."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Debugging MDX",type:"tip",children:[(0,r.jsx)(n.p,{children:"The MDX format is quite strict, and you may get compilation errors."}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," to debug them and make sure your syntax is valid."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Prettier, the most popular formatter, ",(0,r.jsx)(n.a,{href:"https://github.com/prettier/prettier/issues/12209",children:"supports only the legacy MDX v1"}),". If you get an unintentional formatting result, you may want to add ",(0,r.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the problematic area, or add ",(0,r.jsx)(n.code,{children:"*.mdx"})," to your ",(0,r.jsx)(n.code,{children:".prettierignore"}),", until Prettier has proper support for MDX v3. ",(0,r.jsxs)(n.a,{href:"https://github.com/orgs/mdx-js/discussions/2067",children:["One of the main authors of MDX recommends ",(0,r.jsx)(n.code,{children:"remark-cli"})," with ",(0,r.jsx)(n.code,{children:"remark-mdx"})]}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"exporting-components",children:"Exporting components"}),"\n",(0,r.jsxs)(n.p,{children:["To define any custom component within an MDX file, you have to export it: only paragraphs that start with ",(0,r.jsx)(n.code,{children:"export"})," will be parsed as components instead of prose."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const Highlight = ({children, color}) => (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n);\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight> and <Highlight color=\"#1877F2\">Facebook blue</Highlight> are my favorite colors.\n\nI can write **Markdown** alongside my _JSX_!\n"})}),"\n",(0,r.jsx)(n.p,{children:"Notice how it renders both the markup from your React component and the Markdown syntax:"}),"\n","\n",(0,r.jsxs)(s.Z,{minHeight:240,children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"}),"\n"," ","and ",(0,r.jsx)(b,{color:"#1877F2",children:"Facebook blue"})," are my favorite colors."]}),(0,r.jsxs)(n.p,{children:["I can write ",(0,r.jsx)(n.strong,{children:"Markdown"})," alongside my ",(0,r.jsx)(n.em,{children:"JSX"}),"!"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX is JSX",type:"warning",children:[(0,r.jsx)(n.p,{children:"Since all doc files are parsed using MDX, anything that looks like HTML is actually JSX. Therefore, if you need to inline-style a component, follow JSX flavor and provide style objects."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"/* Instead of this: */\n<span style=\"background-color: red\">Foo</span>\n/* Use this: */\n<span style={{backgroundColor: 'red'}}>Foo</span>\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"importing-components",children:"Importing components"}),"\n",(0,r.jsx)(n.p,{children:"You can also import your own components defined in other files or third-party components installed via npm."}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\x3c!-- Docusaurus theme component --\x3e\nimport TOCInline from '@theme/TOCInline';\n\x3c!-- External component --\x3e\nimport Button from '@mui/material/Button';\n\x3c!-- Custom component --\x3e\nimport BrowserWindow from '@site/src/components/BrowserWindow';\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"@site"})," alias points to your website's directory, usually where the ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"})," file is. Using an alias instead of relative paths (",(0,r.jsx)(n.code,{children:"'../../src/components/BrowserWindow'"}),") saves you from updating import paths when moving files around, or when ",(0,r.jsx)(n.a,{href:"/docs/versioning",children:"versioning docs"})," and ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"translating"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["While declaring components within Markdown is very convenient for simple cases, it becomes hard to maintain because of limited editor support, risks of parsing errors, and low reusability. Use a separate ",(0,r.jsx)(n.code,{children:".js"})," file when your component involves complex JS logic:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/components/Highlight.js"',children:"import React from 'react';\n\nexport default function Highlight({children, color}) {\n return (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n );\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="markdown-file.mdx"',children:"import Highlight from '@site/src/components/Highlight';\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight>\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["If you use the same component across a lot of files, you don't need to import it everywhere\u2014consider adding it to the global scope. ",(0,r.jsx)(n.a,{href:"#mdx-component-scope",children:"See below"})]})}),"\n",(0,r.jsx)(n.h3,{id:"mdx-component-scope",children:"MDX component scope"}),"\n",(0,r.jsxs)(n.p,{children:["Apart from ",(0,r.jsx)(n.a,{href:"#importing-components",children:"importing a component"})," and ",(0,r.jsx)(n.a,{href:"#exporting-components",children:"exporting a component"}),", a third way to use a component in MDX is to ",(0,r.jsx)(n.strong,{children:"register it to the global scope"}),", which will make it automatically available in every MDX file, without any import statements."]}),"\n",(0,r.jsx)(n.p,{children:"For example, given this MDX file:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"- a\n- list!\n\nAnd some <Highlight>custom markup</Highlight>...\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It will be compiled to a React component containing ",(0,r.jsx)(n.code,{children:"ul"}),", ",(0,r.jsx)(n.code,{children:"li"}),", ",(0,r.jsx)(n.code,{children:"p"}),", and ",(0,r.jsx)(n.code,{children:"Highlight"})," elements. ",(0,r.jsx)(n.code,{children:"Highlight"})," is not a native html element: you need to provide your own React component implementation for it."]}),"\n",(0,r.jsxs)(n.p,{children:["In Docusaurus, the MDX component scope is provided by the ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})," file. It's not a React component, ",(0,r.jsx)(n.em,{children:"per se"}),", unlike most other exports under the ",(0,r.jsx)(n.code,{children:"@theme/"})," alias: it is a record from tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," to their React component implementations."]}),"\n",(0,r.jsxs)(n.p,{children:["If you ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," this component, you will find all tags that have been implemented, and you can further customize our implementation by swizzling the respective sub-component, like ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents/Code"})," (which is used to render ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks",children:"Markdown code blocks"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to register extra tag names (like the ",(0,r.jsx)(n.code,{children:"<Highlight>"})," tag above), you should consider ",(0,r.jsxs)(n.a,{href:"/docs/swizzling#wrapping",children:["wrapping ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})]}),", so you don't have to maintain all the existing mappings. Since the swizzle CLI doesn't allow wrapping non-component files yet, you should manually create the wrapper:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/MDXComponents.js"',children:"import React from 'react';\n// Import the original mapper\nimport MDXComponents from '@theme-original/MDXComponents';\n// highlight-next-line\nimport Highlight from '@site/src/components/Highlight';\n\nexport default {\n // Re-use the default mapping\n ...MDXComponents,\n // Map the \"<Highlight>\" tag to our Highlight component\n // `Highlight` will receive all props that were passed to `<Highlight>` in MDX\n // highlight-next-line\n Highlight,\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And now, you can freely use ",(0,r.jsx)(n.code,{children:"<Highlight>"})," in every page, without writing the import statement:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'I can conveniently use <Highlight color="#25c2a0">Docusaurus green</Highlight> everywhere!\n'})}),"\n",(0,r.jsx)(s.Z,{children:(0,r.jsxs)(n.p,{children:["I can conveniently use ",(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"})," everywhere!"]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["We use ",(0,r.jsx)(n.strong,{children:"upper-case"})," tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," on purpose."]}),(0,r.jsx)(n.p,{children:"From MDX v3+ onward (Docusaurus v3+), lower-case tag names are always rendered as native html elements, and will not use any component mapping you provide."})]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This feature is powered by ",(0,r.jsxs)(n.a,{href:"https://mdxjs.com/docs/using-mdx/#mdx-provider",children:["an ",(0,r.jsx)(n.code,{children:"MDXProvider"})]}),". If you are importing Markdown in a React page, you have to supply this provider yourself through the ",(0,r.jsx)(n.code,{children:"MDXContent"})," theme component."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport FeatureDisplay from './_featureDisplay.mdx';\n// highlight-next-line\nimport MDXContent from '@theme/MDXContent';\n\nexport default function LandingPage() {\n return (\n <div>\n {/* highlight-start */}\n <MDXContent>\n <FeatureDisplay />\n </MDXContent>\n {/* highlight-end */}\n </div>\n );\n}\n"})}),(0,r.jsxs)(n.p,{children:["If you don't wrap your imported MDX with ",(0,r.jsx)(n.code,{children:"MDXContent"}),", the global scope will not be available."]})]}),"\n",(0,r.jsx)(n.h3,{id:"markdown-and-jsx-interoperability",children:"Markdown and JSX interoperability"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is using ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#mdx-syntax",children:"MDX syntax"})," is mostly compatible with ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", but is much stricter because your ",(0,r.jsx)(n.code,{children:".mdx"})," files can use JSX and are compiled into real React components (check the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"playground"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Some valid CommonMark features won't work with MDX (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#markdown",children:"more info"}),"), notably:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Indented code blocks: use triple backticks instead"}),"\n",(0,r.jsxs)(n.li,{children:["Autolinks (",(0,r.jsx)(n.code,{children:"<http://localhost:3000>"}),"): use regular link syntax instead (",(0,r.jsx)(n.code,{children:"[http://localhost:3000](http://localhost:3000)"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["HTML syntax (",(0,r.jsx)(n.code,{children:'<p style="color: red;">'}),"): use JSX instead (",(0,r.jsx)(n.code,{children:"<p style={{color: 'red'}}>"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unescaped ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"}),": escape them with ",(0,r.jsx)(n.code,{children:"\\"})," instead (",(0,r.jsx)(n.code,{children:"\\{"})," and ",(0,r.jsx)(n.code,{children:"\\<"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental CommonMark support",type:"danger",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 makes it possible to opt-in for a less strict, standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"})," support with the following options:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:"format: md"})," front matter"]}),"\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:".md"})," file extension combined with the ",(0,r.jsx)(n.code,{children:'siteConfig.markdown.format: "detect"'})," configuration"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["This feature is ",(0,r.jsx)(n.strong,{children:"experimental"})," and currently has a few ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"importing-code-snippets",children:"Importing code snippets"}),"\n",(0,r.jsxs)(n.p,{children:["You can not only import a file containing a component definition, but also import any code file as raw text, and then insert it in a code block, thanks to ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"}),". In order to use ",(0,r.jsx)(n.code,{children:"raw-loader"}),", you first need to install it in your project:"]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add raw-loader\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Now you can import code snippets from another file as it is:"}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock language=\"jsx\">{MyComponentSource}</CodeBlock>\n"})}),"\n","\n",(0,r.jsx)(s.Z,{children:(0,r.jsx)(a.Z,{language:"jsx",children:l.Z})}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#usage-in-jsx",children:"using code blocks in JSX"})," for more details of the ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You have to use ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," rather than the Markdown triple-backtick ",(0,r.jsx)(n.code,{children:"```"}),", because the latter will ship out any of its content as-is, but you want to interpolate the imported text here."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"This feature is experimental and might be subject to breaking API changes in the future."})}),"\n",(0,r.jsx)(n.h2,{id:"importing-markdown",children:"Importing Markdown"}),"\n",(0,r.jsx)(n.p,{children:"You can use Markdown files as components and import them elsewhere, either in Markdown files or in React pages."}),"\n",(0,r.jsxs)(n.p,{children:["By convention, using the ",(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"_"})," filename prefix"]})," will not create any doc page and means the Markdown file is a ",(0,r.jsx)(n.strong,{children:'"partial"'}),", to be imported by other files."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="_markdown-partial-example.mdx"',children:"<span>Hello {props.name}</span>\n\nThis is text some content from `_markdown-partial-example.mdx`.\n"})}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="someOtherDoc.mdx"',children:"import PartialExample from './_markdown-partial-example.mdx';\n\n<PartialExample name=\"Sebastien\" />\n"})}),"\n","\n",(0,r.jsx)(s.Z,{children:(0,r.jsx)(d,{name:"Sebastien"})}),"\n",(0,r.jsx)(n.p,{children:"This way, you can reuse content among multiple pages and avoid duplicating materials."}),"\n",(0,r.jsx)(n.h2,{id:"available-exports",children:"Available exports"}),"\n",(0,r.jsx)(n.p,{children:"Within the MDX page, the following variables are available as globals:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"frontMatter"}),": the front matter as a record of string keys and values;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"toc"}),": the table of contents, as a tree of headings. See also ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/toc#inline-table-of-contents",children:"Inline TOC"})," for a more concrete use-case."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contentTitle"}),": the Markdown title, which is the first ",(0,r.jsx)(n.code,{children:"h1"})," heading in the Markdown text. It's ",(0,r.jsx)(n.code,{children:"undefined"})," if there isn't one (e.g. title specified in the front matter)."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\nimport CodeBlock from '@theme/CodeBlock';\n\nThe table of contents for this page, serialized:\n\n<CodeBlock className=\"language-json\">{JSON.stringify(toc, null, 2)}</CodeBlock>\n\nThe front matter of this page:\n\n<ul>\n {Object.entries(frontMatter).map(([key, value]) => <li key={key}><b>{key}</b>: {value}</li>)}\n</ul>\n\n<p>The title of this page is: <b>{contentTitle}</b></p>\n"})}),"\n","\n",(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(n.p,{children:"The table of contents for this page, serialized:"}),(0,r.jsx)(a.Z,{className:"language-json",children:JSON.stringify(g,null,2)}),(0,r.jsx)(n.p,{children:"The front matter of this page:"}),(0,r.jsx)("ul",{children:Object.entries(p).map((([e,t])=>(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.b,{children:e}),": ",t]},e)))}),(0,r.jsxs)("p",{children:["The title of this page is: ",(0,r.jsx)("b",{children:h})]})]})]})}function y(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44027],{97408:(e,n,t)=>{t.d(n,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},41124:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(4646));const s={tableOfContentsInline:"tableOfContentsInline_2sru"};function i({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,r.jsx)("div",{className:s.tableOfContentsInline,children:(0,r.jsx)(o.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:t,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,t)=>{t.d(n,{Z:()=>O});var r=t(24246),o=t(27378),s=t(73919);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function u(e){const n=e.map((e=>a(c({},e),{parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const r=t.slice(2,e.level);e.parentIndex=Math.max(...r),t[e.level]=n}));const r=[];return n.forEach((e=>{const{parentIndex:t}=e,o=l(e,["parentIndex"]);t>=0?n[t].children.push(o):r.push(o)})),r}function d({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return e.flatMap((e=>{const r=d({toc:e.children,minHeadingLevel:n,maxHeadingLevel:t});return function(e){return e.level>=n&&e.level<=t}(e)?[a(c({},e),{children:r})]:r}))}function p(e){const n=e.getBoundingClientRect();return n.top===n.bottom?p(e.parentNode):n}function h(e,{anchorTopOffset:n}){const t=e.find((e=>p(e).top>=n));if(t){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(p(t))?t:null!==(r=e[e.indexOf(t)-1])&&void 0!==r?r:null;var r}var o;return null!==(o=e[e.length-1])&&void 0!==o?o:null}function m(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:n}}=(0,s.L)();return(0,o.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function f(e){const n=(0,o.useRef)(void 0),t=m();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:o,minHeadingLevel:s,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:n}){const t=[];for(let r=e;r<=n;r+=1)t.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(t.join()))}({minHeadingLevel:s,maxHeadingLevel:i}),a=h(c,{anchorTopOffset:t.current}),l=e.find((e=>a&&a.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(o),e.classList.add(o),n.current=e):e.classList.remove(o)}(e,e===l)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,t])}var b=t(41428);function g({toc:e,className:n,linkClassName:t,isChild:o}){return e.length?(0,r.jsx)("ul",{className:o?void 0:n,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(b.Z,{to:`#${e.id}`,className:null!=t?t:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:t})]},e.id)))}):null}const j=o.memo(g);function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function O(e){var{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:a,maxHeadingLevel:l}=e,p=x(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const h=(0,s.L)(),m=null!=a?a:h.tableOfContents.minHeadingLevel,b=null!=l?l:h.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,o.useMemo)((()=>d({toc:u(e),minHeadingLevel:n,maxHeadingLevel:t})),[e,n,t])}({toc:n,minHeadingLevel:m,maxHeadingLevel:b});return f((0,o.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:m,maxHeadingLevel:b}}),[i,c,m,b])),(0,r.jsx)(j,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}({toc:g,className:t,linkClassName:i},p))}},61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),c=t(3620),a=t(44479),l=t(62821),u=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,l._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=f(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,u]=g({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),m=(()=>{const e=null!=l?l:p;return b({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),h(e)}),[u,h,s]),tabValues:s}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function v(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),s=c[r].value;s!==t&&(l(n),o(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",v(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},n,e)),(0,r.jsx)(P,w({},n,e))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(D,v(w({},e),{children:m(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>l});var r=t(24246),o=(t(27378),t(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:l}){return(0,r.jsxs)("div",{className:s.browserWindow,style:a(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:l,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Te});var r={};t.r(r),t.d(r,{ButtonExample:()=>B});var o=t(24246),s=t(27378),i=t(40624),c=t(29088),a=t(32711),l=t(36712),u=t(4423),d=t(94544),p=t(30691),h=t(78844),m=t(73919);function f(){const{prism:e}=(0,m.L)(),{colorMode:n}=(0,h.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(g.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function D(){const e=(0,c.Z)();return(0,o.jsx)(a.uz,{className:g.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,s=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,l=f();var d;const p=null!==(d=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(a.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:l},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function M(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){M(e,n,t[n])}))}return e}function I(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function B(e){return(0,o.jsx)("button",I(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const H=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var T,X,_=t(89583),Z=t(6324),R=t.n(Z);function A(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const W=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=($=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){A(e,n,t[n])}))}return e}({},F),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties($,Object.getOwnPropertyDescriptors(q)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(q)).forEach((function(e){Object.defineProperty($,e,Object.getOwnPropertyDescriptor(q,e))})),$);var $,q;const U=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=z[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Q(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(U,n)}}(r,o),c=t.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let h=0;h<c.length;){const e=c[h].match(i);if(!e){h+=1;continue}const n=e.slice(1).find((e=>void 0!==e));l[n]?a[l[n]].range+=`${h},`:u[n]?a[u[n]].start=h:d[n]&&(a[d[n]].range+=`${a[d[n]].start}-${h-1},`),c.splice(h,1)}t=c.join("\n");const p={};return Object.entries(a).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(T=p)[X=n])&&void 0!==t||(T[X]=[]),p[n].push(e)}))})),{lineClassNames:p,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function G(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){G(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ue(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){le(e,n,t[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function pe({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&ae.codeLine)}),a=e.map(((e,n)=>(0,o.jsx)("span",ue({},s({token:e})),n)));return(0,o.jsxs)("span",de(ue({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var he=t(34370);function me(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){me(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),a=(0,s.useCallback)((()=>{(0,he.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ve(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",ve(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,m.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:l),h=f(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),g=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(W))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:j,code:y}=Q(e,{metastring:t,language:p,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,p&&!n.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:h,code:y,language:null!=p?p:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:j[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(De,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(Oe,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Me(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Be=(Le=function(e){var{children:n}=e,t=Me(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),a="string"==typeof i?Se:re;return(0,o.jsx)(a,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:H},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function He(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){return(0,o.jsx)(Be,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){He(e,n,t[n])}))}return e}({},e))}},77132:(e,n,t)=>{t.r(n),t.d(n,{Highlight:()=>b,assets:()=>f,contentTitle:()=>h,default:()=>y,frontMatter:()=>p,metadata:()=>m,toc:()=>g});var r=t(24246),o=t(71670),s=t(6698),i=t(97555),c=t(61132);var a=t(38112),l=t(97408);function u(e){const n={code:"code",p:"p",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("span",{children:["Hello ",e.name]}),"\n",(0,r.jsxs)(n.p,{children:["This is text some content from ",(0,r.jsx)(n.code,{children:"_markdown-partial-example.md"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}t(41124);const p={id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},h="MDX and React",m={id:"guides/markdown-features/react",title:"MDX and React",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",source:"@site/docs/guides/markdown-features/markdown-features-react.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/react",permalink:"/docs/markdown-features/react",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},sidebar:"docs",previous:{title:"Markdown Features",permalink:"/docs/markdown-features"},next:{title:"Tabs",permalink:"/docs/markdown-features/tabs"}},f={},b=({children:e,color:n})=>{const t={span:"span",...(0,o.a)()};return(0,r.jsx)(t.span,{style:{backgroundColor:n,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},g=[{value:"Exporting components",id:"exporting-components",level:3},{value:"Importing components",id:"importing-components",level:3},{value:"MDX component scope",id:"mdx-component-scope",level:3},{value:"Markdown and JSX interoperability",id:"markdown-and-jsx-interoperability",level:3},{value:"Importing code snippets",id:"importing-code-snippets",level:2},{value:"Importing Markdown",id:"importing-markdown",level:2},{value:"Available exports",id:"available-exports",level:2}];function j(e){const n={a:"a",admonition:"admonition",b:"b",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"mdx-and-react",children:"MDX and React"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus has built-in support for ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"}),", which allows you to write JSX within your Markdown files and render them as React components."]}),"\n",(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX docs"})," to see what fancy stuff you can do with MDX."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Debugging MDX",type:"tip",children:[(0,r.jsx)(n.p,{children:"The MDX format is quite strict, and you may get compilation errors."}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," to debug them and make sure your syntax is valid."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Prettier, the most popular formatter, ",(0,r.jsx)(n.a,{href:"https://github.com/prettier/prettier/issues/12209",children:"supports only the legacy MDX v1"}),". If you get an unintentional formatting result, you may want to add ",(0,r.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the problematic area, or add ",(0,r.jsx)(n.code,{children:"*.mdx"})," to your ",(0,r.jsx)(n.code,{children:".prettierignore"}),", until Prettier has proper support for MDX v3. ",(0,r.jsxs)(n.a,{href:"https://github.com/orgs/mdx-js/discussions/2067",children:["One of the main authors of MDX recommends ",(0,r.jsx)(n.code,{children:"remark-cli"})," with ",(0,r.jsx)(n.code,{children:"remark-mdx"})]}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"exporting-components",children:"Exporting components"}),"\n",(0,r.jsxs)(n.p,{children:["To define any custom component within an MDX file, you have to export it: only paragraphs that start with ",(0,r.jsx)(n.code,{children:"export"})," will be parsed as components instead of prose."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const Highlight = ({children, color}) => (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n);\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight> and <Highlight color=\"#1877F2\">Facebook blue</Highlight> are my favorite colors.\n\nI can write **Markdown** alongside my _JSX_!\n"})}),"\n",(0,r.jsx)(n.p,{children:"Notice how it renders both the markup from your React component and the Markdown syntax:"}),"\n","\n",(0,r.jsxs)(s.Z,{minHeight:240,children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"}),"\n"," ","and ",(0,r.jsx)(b,{color:"#1877F2",children:"Facebook blue"})," are my favorite colors."]}),(0,r.jsxs)(n.p,{children:["I can write ",(0,r.jsx)(n.strong,{children:"Markdown"})," alongside my ",(0,r.jsx)(n.em,{children:"JSX"}),"!"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX is JSX",type:"warning",children:[(0,r.jsx)(n.p,{children:"Since all doc files are parsed using MDX, anything that looks like HTML is actually JSX. Therefore, if you need to inline-style a component, follow JSX flavor and provide style objects."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"/* Instead of this: */\n<span style=\"background-color: red\">Foo</span>\n/* Use this: */\n<span style={{backgroundColor: 'red'}}>Foo</span>\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"importing-components",children:"Importing components"}),"\n",(0,r.jsx)(n.p,{children:"You can also import your own components defined in other files or third-party components installed via npm."}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\x3c!-- Docusaurus theme component --\x3e\nimport TOCInline from '@theme/TOCInline';\n\x3c!-- External component --\x3e\nimport Button from '@mui/material/Button';\n\x3c!-- Custom component --\x3e\nimport BrowserWindow from '@site/src/components/BrowserWindow';\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"@site"})," alias points to your website's directory, usually where the ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"})," file is. Using an alias instead of relative paths (",(0,r.jsx)(n.code,{children:"'../../src/components/BrowserWindow'"}),") saves you from updating import paths when moving files around, or when ",(0,r.jsx)(n.a,{href:"/docs/versioning",children:"versioning docs"})," and ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"translating"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["While declaring components within Markdown is very convenient for simple cases, it becomes hard to maintain because of limited editor support, risks of parsing errors, and low reusability. Use a separate ",(0,r.jsx)(n.code,{children:".js"})," file when your component involves complex JS logic:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/components/Highlight.js"',children:"import React from 'react';\n\nexport default function Highlight({children, color}) {\n return (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n );\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="markdown-file.mdx"',children:"import Highlight from '@site/src/components/Highlight';\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight>\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["If you use the same component across a lot of files, you don't need to import it everywhere\u2014consider adding it to the global scope. ",(0,r.jsx)(n.a,{href:"#mdx-component-scope",children:"See below"})]})}),"\n",(0,r.jsx)(n.h3,{id:"mdx-component-scope",children:"MDX component scope"}),"\n",(0,r.jsxs)(n.p,{children:["Apart from ",(0,r.jsx)(n.a,{href:"#importing-components",children:"importing a component"})," and ",(0,r.jsx)(n.a,{href:"#exporting-components",children:"exporting a component"}),", a third way to use a component in MDX is to ",(0,r.jsx)(n.strong,{children:"register it to the global scope"}),", which will make it automatically available in every MDX file, without any import statements."]}),"\n",(0,r.jsx)(n.p,{children:"For example, given this MDX file:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"- a\n- list!\n\nAnd some <Highlight>custom markup</Highlight>...\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It will be compiled to a React component containing ",(0,r.jsx)(n.code,{children:"ul"}),", ",(0,r.jsx)(n.code,{children:"li"}),", ",(0,r.jsx)(n.code,{children:"p"}),", and ",(0,r.jsx)(n.code,{children:"Highlight"})," elements. ",(0,r.jsx)(n.code,{children:"Highlight"})," is not a native html element: you need to provide your own React component implementation for it."]}),"\n",(0,r.jsxs)(n.p,{children:["In Docusaurus, the MDX component scope is provided by the ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})," file. It's not a React component, ",(0,r.jsx)(n.em,{children:"per se"}),", unlike most other exports under the ",(0,r.jsx)(n.code,{children:"@theme/"})," alias: it is a record from tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," to their React component implementations."]}),"\n",(0,r.jsxs)(n.p,{children:["If you ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," this component, you will find all tags that have been implemented, and you can further customize our implementation by swizzling the respective sub-component, like ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents/Code"})," (which is used to render ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks",children:"Markdown code blocks"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to register extra tag names (like the ",(0,r.jsx)(n.code,{children:"<Highlight>"})," tag above), you should consider ",(0,r.jsxs)(n.a,{href:"/docs/swizzling#wrapping",children:["wrapping ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})]}),", so you don't have to maintain all the existing mappings. Since the swizzle CLI doesn't allow wrapping non-component files yet, you should manually create the wrapper:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/MDXComponents.js"',children:"import React from 'react';\n// Import the original mapper\nimport MDXComponents from '@theme-original/MDXComponents';\n// highlight-next-line\nimport Highlight from '@site/src/components/Highlight';\n\nexport default {\n // Re-use the default mapping\n ...MDXComponents,\n // Map the \"<Highlight>\" tag to our Highlight component\n // `Highlight` will receive all props that were passed to `<Highlight>` in MDX\n // highlight-next-line\n Highlight,\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And now, you can freely use ",(0,r.jsx)(n.code,{children:"<Highlight>"})," in every page, without writing the import statement:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'I can conveniently use <Highlight color="#25c2a0">Docusaurus green</Highlight> everywhere!\n'})}),"\n",(0,r.jsx)(s.Z,{children:(0,r.jsxs)(n.p,{children:["I can conveniently use ",(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"})," everywhere!"]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["We use ",(0,r.jsx)(n.strong,{children:"upper-case"})," tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," on purpose."]}),(0,r.jsx)(n.p,{children:"From MDX v3+ onward (Docusaurus v3+), lower-case tag names are always rendered as native html elements, and will not use any component mapping you provide."})]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This feature is powered by ",(0,r.jsxs)(n.a,{href:"https://mdxjs.com/docs/using-mdx/#mdx-provider",children:["an ",(0,r.jsx)(n.code,{children:"MDXProvider"})]}),". If you are importing Markdown in a React page, you have to supply this provider yourself through the ",(0,r.jsx)(n.code,{children:"MDXContent"})," theme component."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport FeatureDisplay from './_featureDisplay.mdx';\n// highlight-next-line\nimport MDXContent from '@theme/MDXContent';\n\nexport default function LandingPage() {\n return (\n <div>\n {/* highlight-start */}\n <MDXContent>\n <FeatureDisplay />\n </MDXContent>\n {/* highlight-end */}\n </div>\n );\n}\n"})}),(0,r.jsxs)(n.p,{children:["If you don't wrap your imported MDX with ",(0,r.jsx)(n.code,{children:"MDXContent"}),", the global scope will not be available."]})]}),"\n",(0,r.jsx)(n.h3,{id:"markdown-and-jsx-interoperability",children:"Markdown and JSX interoperability"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is using ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#mdx-syntax",children:"MDX syntax"})," is mostly compatible with ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", but is much stricter because your ",(0,r.jsx)(n.code,{children:".mdx"})," files can use JSX and are compiled into real React components (check the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"playground"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Some valid CommonMark features won't work with MDX (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#markdown",children:"more info"}),"), notably:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Indented code blocks: use triple backticks instead"}),"\n",(0,r.jsxs)(n.li,{children:["Autolinks (",(0,r.jsx)(n.code,{children:"<http://localhost:3000>"}),"): use regular link syntax instead (",(0,r.jsx)(n.code,{children:"[http://localhost:3000](http://localhost:3000)"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["HTML syntax (",(0,r.jsx)(n.code,{children:'<p style="color: red;">'}),"): use JSX instead (",(0,r.jsx)(n.code,{children:"<p style={{color: 'red'}}>"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unescaped ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"}),": escape them with ",(0,r.jsx)(n.code,{children:"\\"})," instead (",(0,r.jsx)(n.code,{children:"\\{"})," and ",(0,r.jsx)(n.code,{children:"\\<"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental CommonMark support",type:"danger",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 makes it possible to opt-in for a less strict, standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"})," support with the following options:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:"format: md"})," front matter"]}),"\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:".md"})," file extension combined with the ",(0,r.jsx)(n.code,{children:'siteConfig.markdown.format: "detect"'})," configuration"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["This feature is ",(0,r.jsx)(n.strong,{children:"experimental"})," and currently has a few ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"importing-code-snippets",children:"Importing code snippets"}),"\n",(0,r.jsxs)(n.p,{children:["You can not only import a file containing a component definition, but also import any code file as raw text, and then insert it in a code block, thanks to ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"}),". In order to use ",(0,r.jsx)(n.code,{children:"raw-loader"}),", you first need to install it in your project:"]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add raw-loader\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Now you can import code snippets from another file as it is:"}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock language=\"jsx\">{MyComponentSource}</CodeBlock>\n"})}),"\n","\n",(0,r.jsx)(s.Z,{children:(0,r.jsx)(a.Z,{language:"jsx",children:l.Z})}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#usage-in-jsx",children:"using code blocks in JSX"})," for more details of the ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You have to use ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," rather than the Markdown triple-backtick ",(0,r.jsx)(n.code,{children:"```"}),", because the latter will ship out any of its content as-is, but you want to interpolate the imported text here."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"This feature is experimental and might be subject to breaking API changes in the future."})}),"\n",(0,r.jsx)(n.h2,{id:"importing-markdown",children:"Importing Markdown"}),"\n",(0,r.jsx)(n.p,{children:"You can use Markdown files as components and import them elsewhere, either in Markdown files or in React pages."}),"\n",(0,r.jsxs)(n.p,{children:["By convention, using the ",(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"_"})," filename prefix"]})," will not create any doc page and means the Markdown file is a ",(0,r.jsx)(n.strong,{children:'"partial"'}),", to be imported by other files."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="_markdown-partial-example.mdx"',children:"<span>Hello {props.name}</span>\n\nThis is text some content from `_markdown-partial-example.mdx`.\n"})}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="someOtherDoc.mdx"',children:"import PartialExample from './_markdown-partial-example.mdx';\n\n<PartialExample name=\"Sebastien\" />\n"})}),"\n","\n",(0,r.jsx)(s.Z,{children:(0,r.jsx)(d,{name:"Sebastien"})}),"\n",(0,r.jsx)(n.p,{children:"This way, you can reuse content among multiple pages and avoid duplicating materials."}),"\n",(0,r.jsx)(n.h2,{id:"available-exports",children:"Available exports"}),"\n",(0,r.jsx)(n.p,{children:"Within the MDX page, the following variables are available as globals:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"frontMatter"}),": the front matter as a record of string keys and values;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"toc"}),": the table of contents, as a tree of headings. See also ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/toc#inline-table-of-contents",children:"Inline TOC"})," for a more concrete use-case."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contentTitle"}),": the Markdown title, which is the first ",(0,r.jsx)(n.code,{children:"h1"})," heading in the Markdown text. It's ",(0,r.jsx)(n.code,{children:"undefined"})," if there isn't one (e.g. title specified in the front matter)."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\nimport CodeBlock from '@theme/CodeBlock';\n\nThe table of contents for this page, serialized:\n\n<CodeBlock className=\"language-json\">{JSON.stringify(toc, null, 2)}</CodeBlock>\n\nThe front matter of this page:\n\n<ul>\n {Object.entries(frontMatter).map(([key, value]) => <li key={key}><b>{key}</b>: {value}</li>)}\n</ul>\n\n<p>The title of this page is: <b>{contentTitle}</b></p>\n"})}),"\n","\n",(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(n.p,{children:"The table of contents for this page, serialized:"}),(0,r.jsx)(a.Z,{className:"language-json",children:JSON.stringify(g,null,2)}),(0,r.jsx)(n.p,{children:"The front matter of this page:"}),(0,r.jsx)("ul",{children:Object.entries(p).map((([e,t])=>(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.b,{children:e}),": ",t]},e)))}),(0,r.jsxs)("p",{children:["The title of this page is: ",(0,r.jsx)("b",{children:h})]})]})]})}function y(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}}}]); \ No newline at end of file diff --git a/assets/js/67cff4f8.7037dea6.js b/assets/js/67cff4f8.7037dea6.js deleted file mode 100644 index e1fa60c179e8..000000000000 --- a/assets/js/67cff4f8.7037dea6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76219],{25917:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=n(24246),o=n(71670);const a={tags:["b","d"]},d="Standalone doc",i={id:"standalone",title:"Standalone doc",description:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar",source:"@site/_dogfooding/_docs tests/standalone.mdx",sourceDirName:".",slug:"/standalone",permalink:"/tests/docs/standalone",draft:!1,unlisted:!1,tags:[{inline:!1,label:"Label for tag b",permalink:"/tests/docs/tags/b"},{inline:!1,label:"D",permalink:"/tests/docs/tags/d"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{tags:["b","d"]}},r={},c=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"standalone-doc",children:"Standalone doc"})}),"\n",(0,s.jsx)(t.p,{children:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar"})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/standalone.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>d});var s=n(27378);const o={},a=s.createContext(o);function d(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67cff4f8.812f0eab.js b/assets/js/67cff4f8.812f0eab.js new file mode 100644 index 000000000000..a80d2980dfc0 --- /dev/null +++ b/assets/js/67cff4f8.812f0eab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76219],{25917:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var s=n(24246),o=n(71670);const a={tags:["b","d"]},d="Standalone doc",r={id:"standalone",title:"Standalone doc",description:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar",source:"@site/_dogfooding/_docs tests/standalone.mdx",sourceDirName:".",slug:"/standalone",permalink:"/tests/docs/standalone",draft:!1,unlisted:!1,tags:[{inline:!1,label:"Label for tag b",permalink:"/tests/docs/tags/b"},{inline:!1,label:"D",permalink:"/tests/docs/tags/d"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{tags:["b","d"]}},i={},c=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"standalone-doc",children:"Standalone doc"})}),"\n",(0,s.jsx)(t.p,{children:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar"})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/standalone.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>d});var s=n(27378);const o={},a=s.createContext(o);function d(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6967621f.6eede3c5.js b/assets/js/6967621f.6eede3c5.js new file mode 100644 index 000000000000..4578edef8901 --- /dev/null +++ b/assets/js/6967621f.6eede3c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82370],{25837:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:4,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-4-5",title:"toc-4-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx",sourceDirName:"toc",slug:"/toc/toc-4-5",permalink:"/tests/docs/toc/toc-4-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:4,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-3-_",permalink:"/tests/docs/toc/toc-3-_"},next:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function a(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}a.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-4-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6967621f.d3c70748.js b/assets/js/6967621f.d3c70748.js deleted file mode 100644 index 473f11713375..000000000000 --- a/assets/js/6967621f.d3c70748.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82370],{25837:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:4,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-4-5",title:"toc-4-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx",sourceDirName:"toc",slug:"/toc/toc-4-5",permalink:"/tests/docs/toc/toc-4-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:4,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-3-_",permalink:"/tests/docs/toc/toc-3-_"},next:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-4-5.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6a2ff064.11a025c9.js b/assets/js/6a2ff064.11a025c9.js new file mode 100644 index 000000000000..625d22a7357b --- /dev/null +++ b/assets/js/6a2ff064.11a025c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29413],{72390:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>a,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),o=t(58464);const c={toc_min_heading_level:2,toc_max_heading_level:2},l=void 0,d={id:"toc/toc-2-2",title:"toc-2-2",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx",sourceDirName:"toc",slug:"/toc/toc-2-2",permalink:"/tests/docs/toc/toc-2-2",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:2},sidebar:"sidebar",previous:{title:"Another test page",permalink:"/tests/docs/more-test"},next:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"}},u={},r=[...o.d$];function h(e){return(0,n.jsx)(o.ZP,{})}function a(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}a.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-2-2.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>o});var n=t(24246),i=t(71670);const o=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function c(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>c});var n=t(27378);const i={},o=n.createContext(i);function c(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6a2ff064.52828ebc.js b/assets/js/6a2ff064.52828ebc.js deleted file mode 100644 index 7e67ef4abfd1..000000000000 --- a/assets/js/6a2ff064.52828ebc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29413],{72390:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),o=t(58464);const c={toc_min_heading_level:2,toc_max_heading_level:2},l=void 0,d={id:"toc/toc-2-2",title:"toc-2-2",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx",sourceDirName:"toc",slug:"/toc/toc-2-2",permalink:"/tests/docs/toc/toc-2-2",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:2},sidebar:"sidebar",previous:{title:"Another test page",permalink:"/tests/docs/more-test"},next:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"}},u={},r=[...o.d$];function h(e){return(0,n.jsx)(o.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-2-2.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>o});var n=t(24246),i=t(71670);const o=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function c(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>c});var n=t(27378);const i={},o=n.createContext(i);function c(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c065aab.6c1584b5.js b/assets/js/6c065aab.12abde69.js similarity index 78% rename from assets/js/6c065aab.6c1584b5.js rename to assets/js/6c065aab.12abde69.js index fffe39c56fab..2cb5ff758dea 100644 --- a/assets/js/6c065aab.6c1584b5.js +++ b/assets/js/6c065aab.12abde69.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22888],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),i=r(3620),l=r(44479),a=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function h(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const r=(0,i.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=h(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=a?a:p;return m({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),c=i[n].value;c!==r&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[l.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},t,e)),(0,n.jsx)(k,w({},t,e))]})}function E(e){const t=(0,j.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,r)=>{r.d(t,{Z:()=>u});var n=r(24246),o=r(27378),c=r(80474),s=r(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},r){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,n.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,n.jsx)(a,{name:t,ref:s,children:e})));return(0,n.jsxs)("table",{className:i.apiTable,children:[r,(0,n.jsx)("tbody",{children:l})]})}},82064:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(24246),o=(r(27378),r(41428)),c=r(92053),s=r(36712),i=r(97555),l=r(61132),a=r(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:r}){const d=(0,c.zu)(u).path;return(0,n.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,n.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,n.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,n.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,n.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${r}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,n.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,n.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>Z});var o=r(24246),c=r(27378),s=r(40624),i=r(29088),l=r(32711),a=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=h();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(j({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Z(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const T=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){L(e,t,r[t])}))}return e}({React:c},c,n);var _,A,V=r(89583),$=r(6324),R=r.n($);function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},W),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(W);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=F[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),i=r.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}r=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(_=p)[A=t])&&void 0!==r||(_[A]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,Y.codeBlockContainer,V.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=r(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=n({line:e,className:(0,s.Z)(t,r&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ye(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),i.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=h(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),y=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:g,code:j}=X(e,{metastring:r,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:j})]})]})]})}function De(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Ze=(Le=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:ne;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){De(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:T},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function Te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Ze,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Te(e,t,r[t])}))}return e}({},e))}},81172:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),i=r(52605),l=r(82064);const a={sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},u="\ud83d\udce6 theme-classic",d={id:"api/themes/theme-classic",title:"\ud83d\udce6 theme-classic",description:"The classic theme for Docusaurus.",source:"@site/docs/api/themes/theme-classic.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},sidebar:"api",previous:{title:"Configuration",permalink:"/docs/api/themes/configuration"},next:{title:"\ud83d\udce6 theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock"}},p={},b=[{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-theme-classic",children:"\ud83d\udce6 theme-classic"})}),"\n","\n",(0,n.jsx)(t.p,{children:"The classic theme for Docusaurus."}),"\n",(0,n.jsxs)(t.p,{children:["You can refer to the ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration page"})," for more details on the configuration."]}),"\n",(0,n.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-classic\n"})})})]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you have installed ",(0,n.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install it as a dependency."]})}),"\n",(0,n.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Option"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Default"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"customCss"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)("code",{children:"string[] | string"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"[]"})}),(0,n.jsxs)(t.td,{children:["Stylesheets to be imported globally as ",(0,n.jsx)(t.a,{href:"/docs/advanced/client#client-modules",children:"client modules"}),". Relative paths are resolved against the site directory."]})]})})]})}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Most configuration for the theme is done in ",(0,n.jsx)(t.code,{children:"themeConfig"}),", which can be found in ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration"}),"."]})}),"\n",(0,n.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,n.jsx)(t.p,{children:"You can configure this theme through preset options or plugin options."}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,n.jsx)(l.Z,{pluginName:"@docusaurus/theme-classic",presetOptionName:"theme",code:"{\n customCss: './src/css/custom.css',\n}"})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22888],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),i=r(3620),a=r(44479),l=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function h(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const r=(0,i.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=h(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[l,u]=y({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:c})?e:null})();(0,a.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=a.indexOf(t),c=i[n].value;c!==r&&(l(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=a.indexOf(e.currentTarget)+1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[a.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},t,e)),(0,n.jsx)(k,w({},t,e))]})}function E(e){const t=(0,j.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,r)=>{r.d(t,{Z:()=>u});var n=r(24246),o=r(27378),c=r(80474),s=r(3620);const i={apiTable:"apiTable_e8hp"};function a({name:e,children:t},r){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),a=e?`${e}-${i}`:i,l=`#${a}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(a),(0,n.jsx)("tr",{id:a,tabIndex:0,ref:u.location.hash===l?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(l)},onKeyDown:e=>{"Enter"===e.key&&u.push(l)},children:t.props.children})}const l=o.forwardRef(a);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const a=o.Children.map(c.props.children,(e=>(0,n.jsx)(l,{name:t,ref:s,children:e})));return(0,n.jsxs)("table",{className:i.apiTable,children:[r,(0,n.jsx)("tbody",{children:a})]})}},82064:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(24246),o=(r(27378),r(41428)),c=r(92053),s=r(36712),i=r(97555),a=r(61132),l=r(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:r}){const d=(0,c.zu)(u).path;return(0,n.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,n.jsxs)(a.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,n.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,n.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,n.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${r}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,n.jsxs)(a.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,n.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>Z});var o=r(24246),c=r(27378),s=r(40624),i=r(29088),a=r(32711),l=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,l=h();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:D,theme:l},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Z(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const T=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){L(e,t,r[t])}))}return e}({React:c},c,n);var _,A,V=r(89583),$=r(6324),M=r.n($);function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({},W),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(W);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=F[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=M()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),i=r.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:d[t]&&(a[d[t]].range+=`${a[d[t]].start}-${b-1},`),i.splice(b,1)}r=i.join("\n");const p={};return Object.entries(a).forEach((([e,{range:t}])=>{M()(t).forEach((t=>{var r;null!==(r=(_=p)[A=t])&&void 0!==r||(_[A]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,Y.codeBlockContainer,V.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=r(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){le(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=n({line:e,className:(0,s.Z)(t,r&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ye(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),a=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),i.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=h(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),y=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(q))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:g,code:j}=X(e,{metastring:r,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:j})]})]})]})}function De(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Ze=(Le=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof s?Ee:ne;return(0,o.jsx)(a,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){De(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:T},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function Te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Ze,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Te(e,t,r[t])}))}return e}({},e))}},81172:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>b});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),i=r(52605),a=r(82064);const l={sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},u="\ud83d\udce6 theme-classic",d={id:"api/themes/theme-classic",title:"\ud83d\udce6 theme-classic",description:"The classic theme for Docusaurus.",source:"@site/docs/api/themes/theme-classic.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},sidebar:"api",previous:{title:"Configuration",permalink:"/docs/api/themes/configuration"},next:{title:"\ud83d\udce6 theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock"}},p={},b=[{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-theme-classic",children:"\ud83d\udce6 theme-classic"})}),"\n","\n",(0,n.jsx)(t.p,{children:"The classic theme for Docusaurus."}),"\n",(0,n.jsxs)(t.p,{children:["You can refer to the ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration page"})," for more details on the configuration."]}),"\n",(0,n.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-classic\n"})})})]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you have installed ",(0,n.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install it as a dependency."]})}),"\n",(0,n.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Option"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Default"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"customCss"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)("code",{children:"string[] | string"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"[]"})}),(0,n.jsxs)(t.td,{children:["Stylesheets to be imported globally as ",(0,n.jsx)(t.a,{href:"/docs/advanced/client#client-modules",children:"client modules"}),". Relative paths are resolved against the site directory."]})]})})]})}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Most configuration for the theme is done in ",(0,n.jsx)(t.code,{children:"themeConfig"}),", which can be found in ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration"}),"."]})}),"\n",(0,n.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,n.jsx)(t.p,{children:"You can configure this theme through preset options or plugin options."}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,n.jsx)(a.Z,{pluginName:"@docusaurus/theme-classic",presetOptionName:"theme",code:"{\n customCss: './src/css/custom.css',\n}"})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/6c1df059.6404561b.js b/assets/js/6c1df059.6404561b.js new file mode 100644 index 000000000000..846a119d12b4 --- /dev/null +++ b/assets/js/6c1df059.6404561b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76532],{605:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var n=t(24246),a=t(71670);const r={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},i=void 0,s={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{inline:!1,label:"Profilo",permalink:"/blog/tags/profilo"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://x.com/abernathyca",socials:{x:"https://x.com/abernathyca"},imageURL:"https://github.com/caabernathy.png",key:"abernathyca",page:null}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},u={authorsImageUrls:[void 0]},d=[];function l(o){const e={a:"a",blockquote:"blockquote",em:"em",p:"p",...(0,a.a)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["This is the story of the rather short journey it took to create the ",(0,n.jsx)(e.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,n.jsxs)(e.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,n.jsx)(e.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,n.jsx)(e.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,n.jsx)(e.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]})]})}function c(o={}){const{wrapper:e}={...(0,a.a)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(l,{...o})}):l(o)}},71670:(o,e,t)=>{t.d(e,{Z:()=>s,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(o){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function s(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(a):o.components||a:i(o.components),n.createElement(r.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c1df059.c1d4e217.js b/assets/js/6c1df059.c1d4e217.js deleted file mode 100644 index 7ea866962616..000000000000 --- a/assets/js/6c1df059.c1d4e217.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76532],{605:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var n=t(24246),a=t(71670);const r={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},i=void 0,s={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{inline:!1,label:"Profilo",permalink:"/blog/tags/profilo"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://x.com/abernathyca",socials:{x:"https://x.com/abernathyca"},imageURL:"https://github.com/caabernathy.png",key:"abernathyca",page:null}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},u={authorsImageUrls:[void 0]},d=[];function l(o){const e={a:"a",blockquote:"blockquote",em:"em",p:"p",...(0,a.a)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["This is the story of the rather short journey it took to create the ",(0,n.jsx)(e.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,n.jsxs)(e.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,n.jsx)(e.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,n.jsx)(e.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,n.jsx)(e.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]})]})}function c(o={}){const{wrapper:e}={...(0,a.a)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(l,{...o})}):l(o)}},71670:(o,e,t)=>{t.d(e,{Z:()=>s,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(o){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function s(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(a):o.components||a:i(o.components),n.createElement(r.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ca75a11.24f63f42.js b/assets/js/6ca75a11.24f63f42.js new file mode 100644 index 000000000000..e9f3ad15104a --- /dev/null +++ b/assets/js/6ca75a11.24f63f42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32165],{46324:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});var o=s(24246),i=s(71670);const r={slug:"/migration/v2/versioned-sites"},d="Versioned sites",t={id:"migration/v2/migration-versioned-sites",title:"Versioned sites",description:"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1's approach.",source:"@site/docs/migration/v2/migration-versioned-sites.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/versioned-sites",permalink:"/docs/migration/v2/versioned-sites",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/migration/v2/versioned-sites"},sidebar:"docs",previous:{title:"Manual migration",permalink:"/docs/migration/v2/manual"},next:{title:"Translated sites",permalink:"/docs/migration/v2/translated-sites"}},l={},a=[{value:"Migrate your <code>versioned_docs</code> front matter",id:"migrate-your-versioned_docs-front-matter",level:2},{value:"Migrate your <code>versioned_sidebars</code>",id:"migrate-your-versioned_sidebars",level:2},{value:"Populate your <code>versioned_sidebars</code> and <code>versioned_docs</code>",id:"populate-your-versioned_sidebars-and-versioned_docs",level:2},{value:"Convert style attributes to style objects in MDX",id:"convert-style-attributes-to-style-objects-in-mdx",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"versioned-sites",children:"Versioned sites"})}),"\n",(0,o.jsxs)(n.p,{children:["Read up ",(0,o.jsx)(n.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning",children:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning"})," first for problems in v1's approach."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["The versioned docs should normally be migrated correctly by the ",(0,o.jsx)(n.a,{href:"/docs/migration/v2/automated",children:"migration CLI"})]})}),"\n",(0,o.jsxs)(n.h2,{id:"migrate-your-versioned_docs-front-matter",children:["Migrate your ",(0,o.jsx)(n.code,{children:"versioned_docs"})," front matter"]}),"\n",(0,o.jsxs)(n.p,{children:["Unlike v1, The Markdown header for each versioned doc is no longer altered by using ",(0,o.jsx)(n.code,{children:"version-${version}-${original_id}"})," as the value for the actual ID field. See scenario below for better explanation."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if you have a ",(0,o.jsx)(n.code,{children:"docs/hello.md"}),"."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["When you cut a new version 1.0.0, in Docusaurus v1, ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["In comparison, Docusaurus 2 ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this (exactly same as original)"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Since we're going for snapshot and allow people to move (and edit) docs easily inside version. The ",(0,o.jsx)(n.code,{children:"id"})," front matter is no longer altered and will remain the same. Internally, it is set as ",(0,o.jsx)(n.code,{children:"version-${version}/${id}"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Essentially, here are the necessary changes in each versioned_docs file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",metastring:"{2-3,5}",children:"---\n- id: version-1.0.0-hello\n+ id: hello\ntitle: Hello, World !\n- original_id: hello\n---\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.h2,{id:"migrate-your-versioned_sidebars",children:["Migrate your ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Refer to ",(0,o.jsx)(n.code,{children:"versioned_docs"})," ID as ",(0,o.jsx)(n.code,{children:"version-${version}/${id}"})," (v2) instead of ",(0,o.jsx)(n.code,{children:"version-${version}-${original_id}"})," (v1)."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Because in v1 there is a good chance someone created a new file with front matter ID ",(0,o.jsx)(n.code,{children:'"version-${version}-${id}"'})," that can conflict with ",(0,o.jsx)(n.code,{children:"versioned_docs"})," ID."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, Docusaurus 1 can't differentiate ",(0,o.jsx)(n.code,{children:"docs/xxx.md"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\n---\n\nAnother content\n"})}),"\n",(0,o.jsxs)(n.p,{children:["vs ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Since we don't allow ",(0,o.jsx)(n.code,{children:"/"})," in v1 & v2 for front matter, conflicts are less likely to occur."]}),"\n",(0,o.jsx)(n.p,{children:"So v1 users need to migrate their versioned_sidebars file"}),"\n",(0,o.jsxs)(n.p,{children:["Example ",(0,o.jsx)(n.code,{children:"versioned_sidebars/version-1.0.0-sidebars.json"}),":"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",metastring:'{2-3,5-6,9-10} title="versioned_sidebars/version-1.0.0-sidebars.json"',children:'{\n+ "version-1.0.0/docs": {\n- "version-1.0.0-docs": {\n "Test": [\n+ "version-1.0.0/foo/bar",\n- "version-1.0.0-foo/bar",\n ],\n "Guides": [\n+ "version-1.0.0/hello",\n- "version-1.0.0-hello"\n ]\n }\n}\n'})}),"\n",(0,o.jsxs)(n.h2,{id:"populate-your-versioned_sidebars-and-versioned_docs",children:["Populate your ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})," and ",(0,o.jsx)(n.code,{children:"versioned_docs"})]}),"\n",(0,o.jsxs)(n.p,{children:["In v2, we use snapshot approach for documentation versioning. ",(0,o.jsx)(n.strong,{children:"Every versioned docs does not depends on other version"}),". It is possible to have ",(0,o.jsx)(n.code,{children:"foo.md"})," in ",(0,o.jsx)(n.code,{children:"version-1.0.0"})," but it doesn't exist in ",(0,o.jsx)(n.code,{children:"version-1.2.0"}),". This is not possible in previous version due to Docusaurus v1 fallback functionality (",(0,o.jsx)(n.a,{href:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality",children:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality"}),")."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if your ",(0,o.jsx)(n.code,{children:"versions.json"})," looks like this in v1"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",metastring:'title="versions.json"',children:'["1.1.0", "1.0.0"]\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Docusaurus v1 creates versioned docs ",(0,o.jsx)(n.strong,{children:"if and only if the doc content is different"}),". Your docs structure might look like this if the only doc changed from v1.0.0 to v1.1.0 is ",(0,o.jsx)(n.code,{children:"hello.md"}),"."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,o.jsxs)(n.p,{children:["In v2, you have to populate the missing ",(0,o.jsx)(n.code,{children:"versioned_docs"})," and ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})," (with the right front matter and ID reference too)."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:"{3-5,12}",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u251c\u2500\u2500 version-1.1.0-sidebars.json\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,o.jsx)(n.h2,{id:"convert-style-attributes-to-style-objects-in-mdx",children:"Convert style attributes to style objects in MDX"}),"\n",(0,o.jsx)(n.p,{children:"Docusaurus 2 uses JSX for doc files. If you have any style attributes in your Docusaurus 1 docs, convert them to style objects, like this:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",children:"---\nid: demo\ntitle: Demo\n---\n\n## Section\n\nhello world\n\n- pre style=\"background: black\">zzz</pre>\n+ pre style={{background: 'black'}}>zzz</pre>\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>d});var o=s(27378);const i={},r=o.createContext(i);function d(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ca75a11.d5660fb2.js b/assets/js/6ca75a11.d5660fb2.js deleted file mode 100644 index 9853265a63d9..000000000000 --- a/assets/js/6ca75a11.d5660fb2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32165],{46324:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});var i=s(24246),o=s(71670);const r={slug:"/migration/v2/versioned-sites"},d="Versioned sites",t={id:"migration/v2/migration-versioned-sites",title:"Versioned sites",description:"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1's approach.",source:"@site/docs/migration/v2/migration-versioned-sites.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/versioned-sites",permalink:"/docs/migration/v2/versioned-sites",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/migration/v2/versioned-sites"},sidebar:"docs",previous:{title:"Manual migration",permalink:"/docs/migration/v2/manual"},next:{title:"Translated sites",permalink:"/docs/migration/v2/translated-sites"}},l={},a=[{value:"Migrate your <code>versioned_docs</code> front matter",id:"migrate-your-versioned_docs-front-matter",level:2},{value:"Migrate your <code>versioned_sidebars</code>",id:"migrate-your-versioned_sidebars",level:2},{value:"Populate your <code>versioned_sidebars</code> and <code>versioned_docs</code>",id:"populate-your-versioned_sidebars-and-versioned_docs",level:2},{value:"Convert style attributes to style objects in MDX",id:"convert-style-attributes-to-style-objects-in-mdx",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"versioned-sites",children:"Versioned sites"})}),"\n",(0,i.jsxs)(n.p,{children:["Read up ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning",children:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning"})," first for problems in v1's approach."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["The versioned docs should normally be migrated correctly by the ",(0,i.jsx)(n.a,{href:"/docs/migration/v2/automated",children:"migration CLI"})]})}),"\n",(0,i.jsxs)(n.h2,{id:"migrate-your-versioned_docs-front-matter",children:["Migrate your ",(0,i.jsx)(n.code,{children:"versioned_docs"})," front matter"]}),"\n",(0,i.jsxs)(n.p,{children:["Unlike v1, The Markdown header for each versioned doc is no longer altered by using ",(0,i.jsx)(n.code,{children:"version-${version}-${original_id}"})," as the value for the actual ID field. See scenario below for better explanation."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if you have a ",(0,i.jsx)(n.code,{children:"docs/hello.md"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["When you cut a new version 1.0.0, in Docusaurus v1, ",(0,i.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In comparison, Docusaurus 2 ",(0,i.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this (exactly same as original)"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Since we're going for snapshot and allow people to move (and edit) docs easily inside version. The ",(0,i.jsx)(n.code,{children:"id"})," front matter is no longer altered and will remain the same. Internally, it is set as ",(0,i.jsx)(n.code,{children:"version-${version}/${id}"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Essentially, here are the necessary changes in each versioned_docs file:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:"{2-3,5}",children:"---\n- id: version-1.0.0-hello\n+ id: hello\ntitle: Hello, World !\n- original_id: hello\n---\nHi, Endilie here :)\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"migrate-your-versioned_sidebars",children:["Migrate your ",(0,i.jsx)(n.code,{children:"versioned_sidebars"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Refer to ",(0,i.jsx)(n.code,{children:"versioned_docs"})," ID as ",(0,i.jsx)(n.code,{children:"version-${version}/${id}"})," (v2) instead of ",(0,i.jsx)(n.code,{children:"version-${version}-${original_id}"})," (v1)."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Because in v1 there is a good chance someone created a new file with front matter ID ",(0,i.jsx)(n.code,{children:'"version-${version}-${id}"'})," that can conflict with ",(0,i.jsx)(n.code,{children:"versioned_docs"})," ID."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, Docusaurus 1 can't differentiate ",(0,i.jsx)(n.code,{children:"docs/xxx.md"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\n---\n\nAnother content\n"})}),"\n",(0,i.jsxs)(n.p,{children:["vs ",(0,i.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Since we don't allow ",(0,i.jsx)(n.code,{children:"/"})," in v1 & v2 for front matter, conflicts are less likely to occur."]}),"\n",(0,i.jsx)(n.p,{children:"So v1 users need to migrate their versioned_sidebars file"}),"\n",(0,i.jsxs)(n.p,{children:["Example ",(0,i.jsx)(n.code,{children:"versioned_sidebars/version-1.0.0-sidebars.json"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'{2-3,5-6,9-10} title="versioned_sidebars/version-1.0.0-sidebars.json"',children:'{\n+ "version-1.0.0/docs": {\n- "version-1.0.0-docs": {\n "Test": [\n+ "version-1.0.0/foo/bar",\n- "version-1.0.0-foo/bar",\n ],\n "Guides": [\n+ "version-1.0.0/hello",\n- "version-1.0.0-hello"\n ]\n }\n}\n'})}),"\n",(0,i.jsxs)(n.h2,{id:"populate-your-versioned_sidebars-and-versioned_docs",children:["Populate your ",(0,i.jsx)(n.code,{children:"versioned_sidebars"})," and ",(0,i.jsx)(n.code,{children:"versioned_docs"})]}),"\n",(0,i.jsxs)(n.p,{children:["In v2, we use snapshot approach for documentation versioning. ",(0,i.jsx)(n.strong,{children:"Every versioned docs does not depends on other version"}),". It is possible to have ",(0,i.jsx)(n.code,{children:"foo.md"})," in ",(0,i.jsx)(n.code,{children:"version-1.0.0"})," but it doesn't exist in ",(0,i.jsx)(n.code,{children:"version-1.2.0"}),". This is not possible in previous version due to Docusaurus v1 fallback functionality (",(0,i.jsx)(n.a,{href:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality",children:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if your ",(0,i.jsx)(n.code,{children:"versions.json"})," looks like this in v1"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versions.json"',children:'["1.1.0", "1.0.0"]\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v1 creates versioned docs ",(0,i.jsx)(n.strong,{children:"if and only if the doc content is different"}),". Your docs structure might look like this if the only doc changed from v1.0.0 to v1.1.0 is ",(0,i.jsx)(n.code,{children:"hello.md"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In v2, you have to populate the missing ",(0,i.jsx)(n.code,{children:"versioned_docs"})," and ",(0,i.jsx)(n.code,{children:"versioned_sidebars"})," (with the right front matter and ID reference too)."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:"{3-5,12}",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u251c\u2500\u2500 version-1.1.0-sidebars.json\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,i.jsx)(n.h2,{id:"convert-style-attributes-to-style-objects-in-mdx",children:"Convert style attributes to style objects in MDX"}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus 2 uses JSX for doc files. If you have any style attributes in your Docusaurus 1 docs, convert them to style objects, like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:"---\nid: demo\ntitle: Demo\n---\n\n## Section\n\nhello world\n\n- pre style=\"background: black\">zzz</pre>\n+ pre style={{background: 'black'}}>zzz</pre>\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>d});var i=s(27378);const o={},r=i.createContext(o);function d(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e08c139.476eddf3.js b/assets/js/6e08c139.476eddf3.js deleted file mode 100644 index f59af79abbfe..000000000000 --- a/assets/js/6e08c139.476eddf3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89177],{36367:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},97865:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},15691:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var n=t(24246),r=t(71670);const a={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.",date:"2023-09-29T00:00:00.000Z",tags:[{inline:!1,label:"Maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.975,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:t(36367).Z,authorsImageUrls:[void 0]},u=[];function d(e){const s={a:"a",admonition:"admonition",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/docs/next/migration/v3",children:"upgrade guide"})," for the most up-to-date migration steps."]})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Docusaurus v3"})," is now ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,n.jsx)(s.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,n.jsx)(s.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus v3 comes with a few ",(0,n.jsx)(s.strong,{children:"breaking changes"}),", many of which can be ",(0,n.jsx)(s.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,n.jsxs)(s.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,n.jsx)(s.a,{href:"https://mdxjs.com/blog/v2/",children:(0,n.jsx)(s.strong,{children:"MDX v2"})})," and ",(0,n.jsx)(s.a,{href:"https://mdxjs.com/blog/v3/",children:(0,n.jsx)(s.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,n.jsx)(s.strong,{children:"more strictly"})," and with ",(0,n.jsx)(s.strong,{children:"subtle differences"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:t(97865).Z+"",width:"1040",height:"546"})})]})}function l(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var n=t(27378);const r={},a=n.createContext(r);function o(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e08c139.fc1ad122.js b/assets/js/6e08c139.fc1ad122.js new file mode 100644 index 000000000000..8a0782b32b1e --- /dev/null +++ b/assets/js/6e08c139.fc1ad122.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89177],{36367:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},97865:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},15691:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var n=t(24246),r=t(71670);const a={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the upgrade guide for the most up-to-date migration steps.",date:"2023-09-29T00:00:00.000Z",tags:[{inline:!1,label:"Maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.975,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:t(36367).Z,authorsImageUrls:[void 0]},u=[];function d(e){const s={a:"a",admonition:"admonition",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["This blog post was written when Docusaurus v3 was in beta. There are some changes in dependency versions and upgrade steps you should be aware of if upgrading to Docusaurus v3 current stable releases. Use the ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/docs/next/migration/v3",children:"upgrade guide"})," for the most up-to-date migration steps."]})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Docusaurus v3"})," is now ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,n.jsx)(s.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,n.jsx)(s.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus v3 comes with a few ",(0,n.jsx)(s.strong,{children:"breaking changes"}),", many of which can be ",(0,n.jsx)(s.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,n.jsxs)(s.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,n.jsx)(s.a,{href:"https://mdxjs.com/blog/v2/",children:(0,n.jsx)(s.strong,{children:"MDX v2"})})," and ",(0,n.jsx)(s.a,{href:"https://mdxjs.com/blog/v3/",children:(0,n.jsx)(s.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,n.jsx)(s.strong,{children:"more strictly"})," and with ",(0,n.jsx)(s.strong,{children:"subtle differences"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:t(97865).Z+"",width:"1040",height:"546"})})]})}function l(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var n=t(27378);const r={},a=n.createContext(r);function o(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e7f3c19.e661d904.js b/assets/js/6e7f3c19.505c4770.js similarity index 85% rename from assets/js/6e7f3c19.e661d904.js rename to assets/js/6e7f3c19.505c4770.js index 94db2e038906..d615e621e407 100644 --- a/assets/js/6e7f3c19.e661d904.js +++ b/assets/js/6e7f3c19.505c4770.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78645],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[l,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:d;return h({value:e,tabValues:c})?e:null})();(0,a.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),c=i[r].value;c!==n&&(l(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=m(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,j.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function a({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),a=e?`${e}-${i}`:i,l=`#${a}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(a),(0,r.jsx)("tr",{id:a,tabIndex:0,ref:u.location.hash===l?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(l)},onKeyDown:e=>{"Enter"===e.key&&u.push(l)},children:t.props.children})}const l=o.forwardRef(a);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const a=o.Children.map(c.props.children,(e=>(0,r.jsx)(l,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:a})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),a=n(61132),l=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(a.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(a.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>_e});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function D(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,l=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:N,theme:l},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){C(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:c},c,r);var _,A,V=n(89583),$=n(6324),M=n.n($);function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){q(e,t,n[t])}))}return e}({},W),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(G)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(G)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(G,e))})),z);var z,G;const U=Object.keys(W);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(U,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:p[t]&&(a[p[t]].range+=`${a[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(a).forEach((([e,{range:t}])=>{M()(t).forEach((t=>{var n;null!==(n=(_=d)[A=t])&&void 0!==n||(_[A]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),a=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:l),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(R))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:m,code:j}=Q(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:m[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:j})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function De(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ce(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const Te=(Ze=function(e){var{children:t}=e,n=Ce(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof s?Ee:re;return(0,o.jsx)(a,De(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(D,Ie({scope:L},e)):(0,o.jsx)(Ze,Ie({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _e(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},74203:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),a=n(82064);const l={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},u="\ud83d\udce6 plugin-google-tag-manager",p={id:"api/plugins/plugin-google-tag-manager",title:"\ud83d\udce6 plugin-google-tag-manager",description:"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.",source:"@site/docs/api/plugins/plugin-google-tag-manager.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"},next:{title:"\ud83d\udce6 plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-tag-manager",children:"\ud83d\udce6 plugin-google-tag-manager"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["A plugin for adding ",(0,r.jsx)(t.a,{href:"https://developers.google.com/tag-platform/tag-manager",children:"Google Tag Manager (gtm.js)"})," to a Docusaurus site. Use this plugin in conjunction with the standard ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"gtag plugin"})," for in-depth analysis of how users are using your site."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if tag manager is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-tag-manager\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"containerId"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsxs)(t.td,{children:["Your Tag Manager container Id (usually starts with ",(0,r.jsx)(t.code,{children:"GTM-"}),")."]})]})})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(a.Z,{pluginName:"@docusaurus/plugin-google-tag-manager",presetOptionName:"googleTagManager",code:"{\n containerId: 'GTM-12345',\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78645],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[l,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:d;return h({value:e,tabValues:c})?e:null})();(0,a.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),c=i[r].value;c!==n&&(l(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=m(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},t,e)),(0,r.jsx)(k,w({},t,e))]})}function E(e){const t=(0,j.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function a({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),a=e?`${e}-${i}`:i,l=`#${a}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(a),(0,r.jsx)("tr",{id:a,tabIndex:0,ref:u.location.hash===l?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(l)},onKeyDown:e=>{"Enter"===e.key&&u.push(l)},children:t.props.children})}const l=o.forwardRef(a);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const a=o.Children.map(c.props.children,(e=>(0,r.jsx)(l,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:a})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),a=n(61132),l=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(a.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(a.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>_e});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function D(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,l=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:N,theme:l},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function B(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){B(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",I(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:c},c,r);var _,A,V=n(89583),$=n(6324),M=n.n($);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(G=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},W),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(G,Object.getOwnPropertyDescriptors(U)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(U)).forEach((function(e){Object.defineProperty(G,e,Object.getOwnPropertyDescriptor(U,e))})),G);var G,U;const z=Object.keys(W);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(z,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:p[t]&&(a[p[t]].range+=`${a[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(a).forEach((([e,{range:t}])=>{M()(t).forEach((t=>{var n;null!==(n=(_=d)[A=t])&&void 0!==n||(_[A]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),a=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:l),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(q))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:m,code:j}=Q(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:m[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:j})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function De(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Be(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const Te=(Ze=function(e){var{children:t}=e,n=Be(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof s?Ee:re;return(0,o.jsx)(a,De(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(D,Ie({scope:L},e)):(0,o.jsx)(Ze,Ie({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _e(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},74203:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),a=n(82064);const l={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},u="\ud83d\udce6 plugin-google-tag-manager",p={id:"api/plugins/plugin-google-tag-manager",title:"\ud83d\udce6 plugin-google-tag-manager",description:"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.",source:"@site/docs/api/plugins/plugin-google-tag-manager.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"},next:{title:"\ud83d\udce6 plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-plugin-google-tag-manager",children:"\ud83d\udce6 plugin-google-tag-manager"})}),"\n","\n",(0,r.jsxs)(t.p,{children:["A plugin for adding ",(0,r.jsx)(t.a,{href:"https://developers.google.com/tag-platform/tag-manager",children:"Google Tag Manager (gtm.js)"})," to a Docusaurus site. Use this plugin in conjunction with the standard ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"gtag plugin"})," for in-depth analysis of how users are using your site."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if tag manager is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-tag-manager\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"containerId"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsxs)(t.td,{children:["Your Tag Manager container Id (usually starts with ",(0,r.jsx)(t.code,{children:"GTM-"}),")."]})]})})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(a.Z,{pluginName:"@docusaurus/plugin-google-tag-manager",presetOptionName:"googleTagManager",code:"{\n containerId: 'GTM-12345',\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/6e8cf259.0fada8ce.js b/assets/js/6e8cf259.0fada8ce.js new file mode 100644 index 000000000000..b7e760a7e29c --- /dev/null +++ b/assets/js/6e8cf259.0fada8ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92206],{51427:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=a(24246),o=a(71670);const s={},r=void 0,d={type:"mdx",permalink:"/tests/pages/head-metadata",source:"@site/_dogfooding/_pages tests/head-metadata.mdx",description:"Head Metadata tests",frontMatter:{},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx",unlisted:!1},i={},c=[{value:"Head Metadata tests",id:"head-metadata-tests",level:2}];function m(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components},{Head:a}=t;return a||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"head-metadata-tests",children:"Head Metadata tests"}),"\n",(0,n.jsx)(t.p,{children:"This page declares the following custom head metadata:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:'<head>\n <meta name="generator" value="custom generator name!" />\n <meta name="viewport" content="initial-scale=1, viewport-fit=cover" />\n <meta name="robots" content="noindex, nofollow, my-extra-directive" />\n</head>\n'})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("meta",{name:"generator",value:"custom generator name!"}),(0,n.jsx)("meta",{name:"viewport",content:"initial-scale=1, viewport-fit=cover"}),(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow, my-extra-directive"})]})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>d,a:()=>r});var n=a(27378);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e8cf259.2b1eca46.js b/assets/js/6e8cf259.2b1eca46.js deleted file mode 100644 index 5d6c51ec5714..000000000000 --- a/assets/js/6e8cf259.2b1eca46.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92206],{51427:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=a(24246),o=a(71670);const s={},r=void 0,d={type:"mdx",permalink:"/tests/pages/head-metadata",source:"@site/_dogfooding/_pages tests/head-metadata.mdx",description:"Head Metadata tests",frontMatter:{},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx",unlisted:!1},i={},c=[{value:"Head Metadata tests",id:"head-metadata-tests",level:2}];function m(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components},{Head:a}=t;return a||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"head-metadata-tests",children:"Head Metadata tests"}),"\n",(0,n.jsx)(t.p,{children:"This page declares the following custom head metadata:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:'<head>\n <meta name="generator" value="custom generator name!" />\n <meta name="viewport" content="initial-scale=1, viewport-fit=cover" />\n <meta name="robots" content="noindex, nofollow, my-extra-directive" />\n</head>\n'})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("meta",{name:"generator",value:"custom generator name!"}),(0,n.jsx)("meta",{name:"viewport",content:"initial-scale=1, viewport-fit=cover"}),(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow, my-extra-directive"})]})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>d,a:()=>r});var n=a(27378);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6f742216.119696d7.js b/assets/js/6f742216.119696d7.js deleted file mode 100644 index 85614ae358d8..000000000000 --- a/assets/js/6f742216.119696d7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[57262],{2722:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var n=s(24246),o=s(71670);const r={tags:["a","e","some-tag"]},a="Another test page",i={id:"more-test",title:"Another test page",description:"Test link",source:"@site/_dogfooding/_docs tests/more-test.mdx",sourceDirName:".",slug:"/more-test",permalink:"/tests/docs/more-test",draft:!1,unlisted:!1,tags:[{inline:!1,label:"A",permalink:"/tests/docs/tags/a",description:"Description for tag a"},{inline:!1,label:"Label for tag e",permalink:"/tests/docs/tags/permalink-for-tag-e",description:"Description for tag e"},{inline:!1,label:"Some-tag",permalink:"/tests/docs/tags/some-tag"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{tags:["a","e","some-tag"]},sidebar:"sidebar",previous:{title:"Another category with index",permalink:"/tests/docs/category/another-category-with-index"},next:{title:"toc-2-2",permalink:"/tests/docs/toc/toc-2-2"}},c={},d=[];function l(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"another-test-page",children:"Another test page"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/tests/docs/folder%20with%20space/doc%201",children:"Test link"})})]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}p.displayName="MDXContent(_dogfooding/_docs tests/more-test.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6f742216.b3a2b292.js b/assets/js/6f742216.b3a2b292.js new file mode 100644 index 000000000000..a79d3f43df28 --- /dev/null +++ b/assets/js/6f742216.b3a2b292.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[57262],{2722:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var n=s(24246),o=s(71670);const a={tags:["a","e","some-tag"]},r="Another test page",i={id:"more-test",title:"Another test page",description:"Test link",source:"@site/_dogfooding/_docs tests/more-test.mdx",sourceDirName:".",slug:"/more-test",permalink:"/tests/docs/more-test",draft:!1,unlisted:!1,tags:[{inline:!1,label:"A",permalink:"/tests/docs/tags/a",description:"Description for tag a"},{inline:!1,label:"Label for tag e",permalink:"/tests/docs/tags/permalink-for-tag-e",description:"Description for tag e"},{inline:!1,label:"Some-tag",permalink:"/tests/docs/tags/some-tag"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{tags:["a","e","some-tag"]},sidebar:"sidebar",previous:{title:"Another category with index",permalink:"/tests/docs/category/another-category-with-index"},next:{title:"toc-2-2",permalink:"/tests/docs/toc/toc-2-2"}},c={},d=[];function l(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"another-test-page",children:"Another test page"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/tests/docs/folder%20with%20space/doc%201",children:"Test link"})})]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}p.displayName="MDXContent(_dogfooding/_docs tests/more-test.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>r});var n=s(27378);const o={},a=n.createContext(o);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/706279d4.22d9123c.js b/assets/js/706279d4.22d9123c.js new file mode 100644 index 000000000000..ae8a90454b40 --- /dev/null +++ b/assets/js/706279d4.22d9123c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35718],{24239:(e,n,t)=>{t.d(n,{Z:()=>y});var r=t(24246),s=(t(27378),t(40624)),i=t(97298),a=t(41428),o=t(7812),l=t(64149),c=t(36712),d=t(52615);const h={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function u({href:e,children:n}){return(0,r.jsx)(a.Z,{href:e,className:(0,s.Z)("card padding--lg",h.cardContainer),children:n})}function g({href:e,icon:n,title:t,description:i}){return(0,r.jsxs)(u,{href:e,children:[(0,r.jsxs)(d.Z,{as:"h2",className:(0,s.Z)("text--truncate",h.cardTitle),title:t,children:[n," ",t]}),i&&(0,r.jsx)("p",{className:(0,s.Z)("text--truncate",h.cardDescription),title:i,children:i})]})}function p({item:e}){const n=(0,i.LM)(e),t=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,c.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n}))}();return n?(0,r.jsx)(g,{href:n,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(s=e.description)&&void 0!==s?s:t(e.items.length)}):null;var s}function m({item:e}){const n=(0,l.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var t;const s=(0,i.xz)(null!==(t=e.docId)&&void 0!==t?t:void 0);var a;return(0,r.jsx)(g,{href:e.href,icon:n,title:e.label,description:null!==(a=e.description)&&void 0!==a?a:null==s?void 0:s.description})}function b({item:e}){switch(e.type){case"link":return(0,r.jsx)(m,{item:e});case"category":return(0,r.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x({className:e}){const n=(0,i.jA)();return(0,r.jsx)(y,{items:n.items,className:e})}function y(e){const{items:n,className:t}=e;if(!n)return(0,r.jsx)(x,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}({},e));const a=(0,i.MN)(n);return(0,r.jsx)("section",{className:(0,s.Z)("row",t),children:a.map(((e,n)=>(0,r.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,r.jsx)(b,{item:e})},n)))})}},61132:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>D});var r=t(24246),s=t(27378),i=t(40624),a=t(75527),o=t(3620),l=t(44479),c=t(62821),d=t(52196),h=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function g(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(r),a=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(g(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){u(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,a]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=m(e),[a,o]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[c,d]=j({queryString:t,groupId:r}),[u,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,h.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=c?c:u;return b({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),g(e)}),[d,g,i]),tabValues:i}}var y=t(29088);const f={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){w(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),i=o[r].value;i!==t&&(c(n),s(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:h,onClick:d},s),{className:(0,i.Z)("tabs__item",f.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function N({lazy:e,children:n,selectedValue:t}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function S(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,r.jsx)(O,v({},n,e)),(0,r.jsx)(N,v({},n,e))]})}function D(e){const n=(0,y.Z)();return(0,r.jsx)(S,k(v({},e),{children:p(e.children)}),String(n))}},7812:(e,n,t)=>{t.d(n,{c:()=>c});var r=t(27378),s=t(4423);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((n=>e.includes(n)))}const o={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,r.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:a(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),o}}),[e])}function c(){const e=l();return{selectMessage:(n,t)=>function(e,n,t){const r=e.split("|");if(1===r.length)return r[0];r.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const s=t.select(n),i=t.pluralForms.indexOf(s);return r[Math.min(i,r.length-1)]}(t,n,e)}}},6698:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(24246),s=(t(27378),t(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){a(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function c({children:e,minHeight:n,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(o({},a),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(i.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:c,children:e})]})}},64040:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>g});var r=t(24246),s=t(71670),i=t(97555),a=t(61132),o=t(6698),l=t(24239);const c={toc_max_heading_level:4,slug:"/sidebar/items"},d="Sidebar items",h={id:"guides/docs/sidebar/items",title:"Sidebar items",description:"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.",source:"@site/docs/guides/docs/sidebar/items.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/items",permalink:"/docs/sidebar/items",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_max_heading_level:4,slug:"/sidebar/items"},sidebar:"docs",previous:{title:"Sidebar",permalink:"/docs/sidebar"},next:{title:"Autogenerated",permalink:"/docs/sidebar/autogenerated"}},u={},g=[{value:"Doc: link to a doc",id:"sidebar-item-doc",level:2},{value:"Link: link to any page",id:"sidebar-item-link",level:2},{value:"HTML: render custom markup",id:"sidebar-item-html",level:2},{value:"Category: create a hierarchy",id:"sidebar-item-category",level:2},{value:"Category links",id:"category-link",level:3},{value:"Generated index page",id:"generated-index-page",level:4},{value:"Doc link",id:"category-doc-link",level:4},{value:"Embedding generated index in doc page",id:"embedding-generated-index-in-doc-page",level:4},{value:"Collapsible categories",id:"collapsible-categories",level:3},{value:"Expanded categories by default",id:"expanded-categories-by-default",level:3},{value:"Using shorthands",id:"using-shorthands",level:2},{value:"Doc shorthand",id:"doc-shorthand",level:3},{value:"Category shorthand",id:"category-shorthand",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"sidebar-items",children:"Sidebar items"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["We have introduced three types of item types in the example in the previous section: ",(0,r.jsx)(n.code,{children:"doc"}),", ",(0,r.jsx)(n.code,{children:"category"}),", and ",(0,r.jsx)(n.code,{children:"link"}),", whose usages are fairly intuitive. We will formally introduce their APIs. There's also a fourth type: ",(0,r.jsx)(n.code,{children:"autogenerated"}),", which we will explain in detail later."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-doc",children:"Doc"})}),": link to a doc page, associating it with the sidebar"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-link",children:"Link"})}),": link to any internal or external page"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-category",children:"Category"})}),": creates a dropdown of sidebar items"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"Autogenerated"})}),": generate a sidebar slice automatically"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-html",children:"HTML"})}),": renders pure HTML in the item's position"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-item-ref",children:"*Ref"})}),": link to a doc page, without making the item take part in navigation generation"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-doc",children:"Doc: link to a doc"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"doc"})," type to link to a doc page and assign that doc to a sidebar:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemDoc =\n // Normal syntax\n | {\n type: 'doc';\n id: string;\n label: string; // Sidebar label text\n className?: string; // Class name for sidebar label\n customProps?: Record<string, unknown>; // Custom props\n }\n\n // Shorthand syntax\n | string; // docId shortcut\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // Normal syntax:\n // highlight-start\n {\n type: 'doc',\n id: 'doc1', // document ID\n label: 'Getting started', // sidebar label\n },\n // highlight-end\n\n // Shorthand syntax:\n // highlight-start\n 'doc2', // document ID\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you use the doc shorthand or ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated"})," sidebar, you would lose the ability to customize the sidebar label through item definition. You can, however, use the ",(0,r.jsx)(n.code,{children:"sidebar_label"})," Markdown front matter within that doc, which has higher precedence over the ",(0,r.jsx)(n.code,{children:"label"})," key in the sidebar item. Similarly, you can use ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"})," to declare custom metadata for a doc page."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.code,{children:"doc"})," item sets an ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-association",children:"implicit sidebar association"}),". Don't assign the same doc to multiple sidebars: change the type to ",(0,r.jsx)(n.code,{children:"ref"})," instead."]})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Sidebar custom props is a useful way to propagate arbitrary doc metadata to the client side, so you can get additional information when using any doc-related hook that fetches a doc object."})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-link",children:"Link: link to any page"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"link"})," type to link to any page (internal or external) that is not a doc."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemLink = {\n type: 'link';\n label: string;\n href: string;\n className?: string;\n description?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myLinksSidebar: [\n // highlight-start\n // External link\n {\n type: 'link',\n label: 'Facebook', // The link label\n href: 'https://facebook.com', // The external URL\n },\n // highlight-end\n\n // highlight-start\n // Internal link\n {\n type: 'link',\n label: 'Home', // The link label\n href: '/', // The internal path\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-html",children:"HTML: render custom markup"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"html"})," type to render custom HTML within the item's ",(0,r.jsx)(n.code,{children:"<li>"})," tag."]}),"\n",(0,r.jsx)(n.p,{children:"This can be useful for inserting custom items such as dividers, section titles, ads, and images."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemHtml = {\n type: 'html';\n value: string;\n defaultStyle?: boolean; // Use default menu item styles\n className?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n // highlight-start\n {\n type: 'html',\n value: '<img src=\"sponsor.png\" alt=\"Sponsor\" />', // The HTML to be rendered\n defaultStyle: true, // Use the default menu item styling\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["The menu item is already wrapped in an ",(0,r.jsx)(n.code,{children:"<li>"})," tag, so if your custom item is simple, such as a title, just supply a string as the value and use the ",(0,r.jsx)(n.code,{children:"className"})," property to style it:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n {\n type: 'html',\n value: 'Core concepts',\n className: 'sidebar-title',\n },\n ],\n};\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-category",children:"Category: create a hierarchy"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"category"})," type to create a hierarchy of sidebar items."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemCategory = {\n type: 'category';\n label: string; // Sidebar label text.\n items: SidebarItem[]; // Array of sidebar items.\n className?: string;\n description?: string;\n\n // Category options:\n collapsible: boolean; // Set the category to be collapsible\n collapsed: boolean; // Set the category to be initially collapsed or open by default\n link: SidebarItemCategoryLinkDoc | SidebarItemCategoryLinkGeneratedIndex;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n collapsible: true,\n collapsed: false,\n items: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"shorthand syntax"})})," when you don't need customizations:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n Docs: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n};\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"category-link",children:"Category links"}),"\n",(0,r.jsx)(n.p,{children:"With category links, clicking on a category can navigate you to another page."}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"Use category links to introduce a category of documents."}),(0,r.jsxs)(n.p,{children:["Autogenerated categories can use the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-item-metadata",children:(0,r.jsx)(n.code,{children:"_category_.yml"})})," file to declare the link."]})]}),"\n",(0,r.jsx)(n.h4,{id:"generated-index-page",children:"Generated index page"}),"\n",(0,r.jsxs)(n.p,{children:["You can auto-generate an index page that displays all the direct children of this category. The ",(0,r.jsx)(n.code,{children:"slug"})," allows you to customize the generated page's route, which defaults to ",(0,r.jsx)(n.code,{children:"/category/[categoryName]"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {\n type: 'generated-index',\n title: 'Docusaurus Guides',\n description: 'Learn about the most important Docusaurus concepts!',\n slug: '/category/docusaurus-guides',\n keywords: ['guides'],\n image: '/img/docusaurus.png',\n },\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/category/guides",children:"Docusaurus Guides page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"generated-index"})," links as a quick way to get an introductory document."]})}),"\n",(0,r.jsx)(n.h4,{id:"category-doc-link",children:"Doc link"}),"\n",(0,r.jsx)(n.p,{children:"A category can link to an existing document."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {type: 'doc', id: 'introduction'},\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction page"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"embedding-generated-index-in-doc-page",children:"Embedding generated index in doc page"}),"\n",(0,r.jsxs)(n.p,{children:["You can embed the generated cards list in a normal doc page as well with the ",(0,r.jsx)(n.code,{children:"DocCardList"})," component. It will display all the sidebar items of the parent category of the current document."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/sidebar/index.md"',children:"import DocCardList from '@theme/DocCardList';\n\n<DocCardList />\n"})}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(l.Z,{})}),"\n",(0,r.jsx)(n.h3,{id:"collapsible-categories",children:"Collapsible categories"}),"\n",(0,r.jsxs)(n.p,{children:["We support the option to expand/collapse categories. Categories are collapsible by default, but you can disable collapsing with ",(0,r.jsx)(n.code,{children:"collapsible: false"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n items: [\n 'creating-pages',\n {\n type: 'category',\n // highlight-next-line\n collapsible: false,\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make all categories non-collapsible by default, set the ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," option in ",(0,r.jsx)(n.code,{children:"plugin-content-docs"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsible: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The option in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," takes precedence over plugin configuration, so it is possible to make certain categories collapsible when ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," is set to ",(0,r.jsx)(n.code,{children:"false"})," globally."]})}),"\n",(0,r.jsx)(n.h3,{id:"expanded-categories-by-default",children:"Expanded categories by default"}),"\n",(0,r.jsxs)(n.p,{children:["Collapsible categories are collapsed by default. If you want them to be expanded on the first render, you can set ",(0,r.jsx)(n.code,{children:"collapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n // highlight-next-line\n collapsed: false,\n items: ['markdown-features', 'sidebar', 'versioning'],\n },\n ],\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Similar to ",(0,r.jsx)(n.code,{children:"collapsible"}),", you can also set the global configuration ",(0,r.jsx)(n.code,{children:"options.sidebarCollapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),". Individual ",(0,r.jsx)(n.code,{children:"collapsed"})," options in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," will still take precedence over this configuration."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsed: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["When a category has ",(0,r.jsx)(n.code,{children:"collapsed: true"})," but ",(0,r.jsx)(n.code,{children:"collapsible: false"})," (either through ",(0,r.jsx)(n.code,{children:"sidebars.js"})," or through plugin configuration), the latter takes precedence and the category is still rendered as expanded."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-shorthands",children:"Using shorthands"}),"\n",(0,r.jsxs)(n.p,{children:["You can express typical sidebar items without much customization more concisely with ",(0,r.jsx)(n.strong,{children:"shorthand syntaxes"}),". There are two parts to this: ",(0,r.jsx)(n.a,{href:"#doc-shorthand",children:(0,r.jsx)(n.strong,{children:"doc shorthand"})})," and ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"category shorthand"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-shorthand",children:"Doc shorthand"}),"\n",(0,r.jsxs)(n.p,{children:["An item with type ",(0,r.jsx)(n.code,{children:"doc"})," can be simply a string representing its ID:"]}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'doc',\n id: 'myDoc',\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n 'myDoc',\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"So it's possible to simplify the example above to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n {\n type: 'category',\n label: 'Getting Started',\n items: [\n // highlight-next-line\n 'doc1',\n ],\n },\n {\n type: 'category',\n label: 'Docusaurus',\n items: [\n // highlight-start\n 'doc2',\n 'doc3',\n // highlight-end\n ],\n },\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-shorthand",children:"Category shorthand"}),"\n",(0,r.jsx)(n.p,{children:"A category item can be represented by an object whose key is its label, and the value is an array of subitems."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'category',\n label: 'Getting started',\n items: ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"This permits us to simplify that example to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n },\n {\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Each shorthand object after this transformation will contain exactly one entry. Now consider the further simplified example below:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Note how the two consecutive category shorthands are compressed into one object with two entries. This syntax generates a ",(0,r.jsx)(n.strong,{children:"sidebar slice"}),': you shouldn\'t see that object as one bulk item\u2014this object is unwrapped, with each entry becoming a separate item, and they spliced together with the rest of the items (in this case, the "Learn more" link) to form the final sidebar level. Sidebar slices are also important when discussing ',(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Wherever you have an array of items that is reduced to one category shorthand, you can omit that enclosing array as well."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Before",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n {\n 'Getting started': ['doc1'],\n Docusaurus: [\n {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n ],\n },\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"After",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: {\n 'Getting started': ['doc1'],\n Docusaurus: {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n },\n};\n"})})})]})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var r=t(27378);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/706279d4.889e2a0b.js b/assets/js/706279d4.889e2a0b.js deleted file mode 100644 index 5598853023eb..000000000000 --- a/assets/js/706279d4.889e2a0b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35718],{24239:(e,n,t)=>{t.d(n,{Z:()=>y});var r=t(24246),s=(t(27378),t(40624)),i=t(97298),a=t(41428),o=t(7812),l=t(64149),c=t(36712),d=t(52615);const h={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function u({href:e,children:n}){return(0,r.jsx)(a.Z,{href:e,className:(0,s.Z)("card padding--lg",h.cardContainer),children:n})}function g({href:e,icon:n,title:t,description:i}){return(0,r.jsxs)(u,{href:e,children:[(0,r.jsxs)(d.Z,{as:"h2",className:(0,s.Z)("text--truncate",h.cardTitle),title:t,children:[n," ",t]}),i&&(0,r.jsx)("p",{className:(0,s.Z)("text--truncate",h.cardDescription),title:i,children:i})]})}function p({item:e}){const n=(0,i.LM)(e),t=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,c.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n}))}();return n?(0,r.jsx)(g,{href:n,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(s=e.description)&&void 0!==s?s:t(e.items.length)}):null;var s}function m({item:e}){const n=(0,l.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var t;const s=(0,i.xz)(null!==(t=e.docId)&&void 0!==t?t:void 0);var a;return(0,r.jsx)(g,{href:e.href,icon:n,title:e.label,description:null!==(a=e.description)&&void 0!==a?a:null==s?void 0:s.description})}function b({item:e}){switch(e.type){case"link":return(0,r.jsx)(m,{item:e});case"category":return(0,r.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x({className:e}){const n=(0,i.jA)();return(0,r.jsx)(y,{items:n.items,className:e})}function y(e){const{items:n,className:t}=e;if(!n)return(0,r.jsx)(x,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}({},e));const a=(0,i.MN)(n);return(0,r.jsx)("section",{className:(0,s.Z)("row",t),children:a.map(((e,n)=>(0,r.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,r.jsx)(b,{item:e})},n)))})}},61132:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>D});var r=t(24246),s=t(27378),i=t(40624),a=t(75527),o=t(3620),l=t(44479),c=t(62821),d=t(52196),h=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function g(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(r),a=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(g(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){u(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,a]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=m(e),[a,o]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[c,d]=j({queryString:t,groupId:r}),[u,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,h.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=c?c:u;return b({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),g(e)}),[d,g,i]),tabValues:i}}var y=t(29088);const f={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){w(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),i=o[r].value;i!==t&&(c(n),s(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:h,onClick:d},s),{className:(0,i.Z)("tabs__item",f.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function N({lazy:e,children:n,selectedValue:t}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,i.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function S(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,r.jsx)(O,v({},n,e)),(0,r.jsx)(N,v({},n,e))]})}function D(e){const n=(0,y.Z)();return(0,r.jsx)(S,k(v({},e),{children:p(e.children)}),String(n))}},7812:(e,n,t)=>{t.d(n,{c:()=>c});var r=t(27378),s=t(4423);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((n=>e.includes(n)))}const o={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,r.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:a(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),o}}),[e])}function c(){const e=l();return{selectMessage:(n,t)=>function(e,n,t){const r=e.split("|");if(1===r.length)return r[0];r.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const s=t.select(n),i=t.pluralForms.indexOf(s);return r[Math.min(i,r.length-1)]}(t,n,e)}}},6698:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(24246),s=(t(27378),t(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){a(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function c({children:e,minHeight:n,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(o({},a),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(i.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:c,children:e})]})}},64040:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>g});var r=t(24246),s=t(71670),i=t(97555),a=t(61132),o=t(6698),l=t(24239);const c={toc_max_heading_level:4,slug:"/sidebar/items"},d="Sidebar items",h={id:"guides/docs/sidebar/items",title:"Sidebar items",description:"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.",source:"@site/docs/guides/docs/sidebar/items.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/items",permalink:"/docs/sidebar/items",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_max_heading_level:4,slug:"/sidebar/items"},sidebar:"docs",previous:{title:"Sidebar",permalink:"/docs/sidebar"},next:{title:"Autogenerated",permalink:"/docs/sidebar/autogenerated"}},u={},g=[{value:"Doc: link to a doc",id:"sidebar-item-doc",level:2},{value:"Link: link to any page",id:"sidebar-item-link",level:2},{value:"HTML: render custom markup",id:"sidebar-item-html",level:2},{value:"Category: create a hierarchy",id:"sidebar-item-category",level:2},{value:"Category links",id:"category-link",level:3},{value:"Generated index page",id:"generated-index-page",level:4},{value:"Doc link",id:"category-doc-link",level:4},{value:"Embedding generated index in doc page",id:"embedding-generated-index-in-doc-page",level:4},{value:"Collapsible categories",id:"collapsible-categories",level:3},{value:"Expanded categories by default",id:"expanded-categories-by-default",level:3},{value:"Using shorthands",id:"using-shorthands",level:2},{value:"Doc shorthand",id:"doc-shorthand",level:3},{value:"Category shorthand",id:"category-shorthand",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"sidebar-items",children:"Sidebar items"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["We have introduced three types of item types in the example in the previous section: ",(0,r.jsx)(n.code,{children:"doc"}),", ",(0,r.jsx)(n.code,{children:"category"}),", and ",(0,r.jsx)(n.code,{children:"link"}),", whose usages are fairly intuitive. We will formally introduce their APIs. There's also a fourth type: ",(0,r.jsx)(n.code,{children:"autogenerated"}),", which we will explain in detail later."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-doc",children:"Doc"})}),": link to a doc page, associating it with the sidebar"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-link",children:"Link"})}),": link to any internal or external page"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-category",children:"Category"})}),": creates a dropdown of sidebar items"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"Autogenerated"})}),": generate a sidebar slice automatically"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-html",children:"HTML"})}),": renders pure HTML in the item's position"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-item-ref",children:"*Ref"})}),": link to a doc page, without making the item take part in navigation generation"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-doc",children:"Doc: link to a doc"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"doc"})," type to link to a doc page and assign that doc to a sidebar:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemDoc =\n // Normal syntax\n | {\n type: 'doc';\n id: string;\n label: string; // Sidebar label text\n className?: string; // Class name for sidebar label\n customProps?: Record<string, unknown>; // Custom props\n }\n\n // Shorthand syntax\n | string; // docId shortcut\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // Normal syntax:\n // highlight-start\n {\n type: 'doc',\n id: 'doc1', // document ID\n label: 'Getting started', // sidebar label\n },\n // highlight-end\n\n // Shorthand syntax:\n // highlight-start\n 'doc2', // document ID\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you use the doc shorthand or ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated"})," sidebar, you would lose the ability to customize the sidebar label through item definition. You can, however, use the ",(0,r.jsx)(n.code,{children:"sidebar_label"})," Markdown front matter within that doc, which has higher precedence over the ",(0,r.jsx)(n.code,{children:"label"})," key in the sidebar item. Similarly, you can use ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"})," to declare custom metadata for a doc page."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.code,{children:"doc"})," item sets an ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-association",children:"implicit sidebar association"}),". Don't assign the same doc to multiple sidebars: change the type to ",(0,r.jsx)(n.code,{children:"ref"})," instead."]})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Sidebar custom props is a useful way to propagate arbitrary doc metadata to the client side, so you can get additional information when using any doc-related hook that fetches a doc object."})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-link",children:"Link: link to any page"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"link"})," type to link to any page (internal or external) that is not a doc."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemLink = {\n type: 'link';\n label: string;\n href: string;\n className?: string;\n description?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myLinksSidebar: [\n // highlight-start\n // External link\n {\n type: 'link',\n label: 'Facebook', // The link label\n href: 'https://facebook.com', // The external URL\n },\n // highlight-end\n\n // highlight-start\n // Internal link\n {\n type: 'link',\n label: 'Home', // The link label\n href: '/', // The internal path\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-html",children:"HTML: render custom markup"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"html"})," type to render custom HTML within the item's ",(0,r.jsx)(n.code,{children:"<li>"})," tag."]}),"\n",(0,r.jsx)(n.p,{children:"This can be useful for inserting custom items such as dividers, section titles, ads, and images."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemHtml = {\n type: 'html';\n value: string;\n defaultStyle?: boolean; // Use default menu item styles\n className?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n // highlight-start\n {\n type: 'html',\n value: '<img src=\"sponsor.png\" alt=\"Sponsor\" />', // The HTML to be rendered\n defaultStyle: true, // Use the default menu item styling\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["The menu item is already wrapped in an ",(0,r.jsx)(n.code,{children:"<li>"})," tag, so if your custom item is simple, such as a title, just supply a string as the value and use the ",(0,r.jsx)(n.code,{children:"className"})," property to style it:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n {\n type: 'html',\n value: 'Core concepts',\n className: 'sidebar-title',\n },\n ],\n};\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-category",children:"Category: create a hierarchy"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"category"})," type to create a hierarchy of sidebar items."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemCategory = {\n type: 'category';\n label: string; // Sidebar label text.\n items: SidebarItem[]; // Array of sidebar items.\n className?: string;\n description?: string;\n\n // Category options:\n collapsible: boolean; // Set the category to be collapsible\n collapsed: boolean; // Set the category to be initially collapsed or open by default\n link: SidebarItemCategoryLinkDoc | SidebarItemCategoryLinkGeneratedIndex;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n collapsible: true,\n collapsed: false,\n items: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"shorthand syntax"})})," when you don't need customizations:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n Docs: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n};\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"category-link",children:"Category links"}),"\n",(0,r.jsx)(n.p,{children:"With category links, clicking on a category can navigate you to another page."}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"Use category links to introduce a category of documents."}),(0,r.jsxs)(n.p,{children:["Autogenerated categories can use the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-item-metadata",children:(0,r.jsx)(n.code,{children:"_category_.yml"})})," file to declare the link."]})]}),"\n",(0,r.jsx)(n.h4,{id:"generated-index-page",children:"Generated index page"}),"\n",(0,r.jsxs)(n.p,{children:["You can auto-generate an index page that displays all the direct children of this category. The ",(0,r.jsx)(n.code,{children:"slug"})," allows you to customize the generated page's route, which defaults to ",(0,r.jsx)(n.code,{children:"/category/[categoryName]"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {\n type: 'generated-index',\n title: 'Docusaurus Guides',\n description: 'Learn about the most important Docusaurus concepts!',\n slug: '/category/docusaurus-guides',\n keywords: ['guides'],\n image: '/img/docusaurus.png',\n },\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/category/guides",children:"Docusaurus Guides page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"generated-index"})," links as a quick way to get an introductory document."]})}),"\n",(0,r.jsx)(n.h4,{id:"category-doc-link",children:"Doc link"}),"\n",(0,r.jsx)(n.p,{children:"A category can link to an existing document."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {type: 'doc', id: 'introduction'},\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction page"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"embedding-generated-index-in-doc-page",children:"Embedding generated index in doc page"}),"\n",(0,r.jsxs)(n.p,{children:["You can embed the generated cards list in a normal doc page as well with the ",(0,r.jsx)(n.code,{children:"DocCardList"})," component. It will display all the sidebar items of the parent category of the current document."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/sidebar/index.md"',children:"import DocCardList from '@theme/DocCardList';\n\n<DocCardList />\n"})}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(l.Z,{})}),"\n",(0,r.jsx)(n.h3,{id:"collapsible-categories",children:"Collapsible categories"}),"\n",(0,r.jsxs)(n.p,{children:["We support the option to expand/collapse categories. Categories are collapsible by default, but you can disable collapsing with ",(0,r.jsx)(n.code,{children:"collapsible: false"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n items: [\n 'creating-pages',\n {\n type: 'category',\n // highlight-next-line\n collapsible: false,\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make all categories non-collapsible by default, set the ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," option in ",(0,r.jsx)(n.code,{children:"plugin-content-docs"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsible: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The option in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," takes precedence over plugin configuration, so it is possible to make certain categories collapsible when ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," is set to ",(0,r.jsx)(n.code,{children:"false"})," globally."]})}),"\n",(0,r.jsx)(n.h3,{id:"expanded-categories-by-default",children:"Expanded categories by default"}),"\n",(0,r.jsxs)(n.p,{children:["Collapsible categories are collapsed by default. If you want them to be expanded on the first render, you can set ",(0,r.jsx)(n.code,{children:"collapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n // highlight-next-line\n collapsed: false,\n items: ['markdown-features', 'sidebar', 'versioning'],\n },\n ],\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Similar to ",(0,r.jsx)(n.code,{children:"collapsible"}),", you can also set the global configuration ",(0,r.jsx)(n.code,{children:"options.sidebarCollapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),". Individual ",(0,r.jsx)(n.code,{children:"collapsed"})," options in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," will still take precedence over this configuration."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsed: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["When a category has ",(0,r.jsx)(n.code,{children:"collapsed: true"})," but ",(0,r.jsx)(n.code,{children:"collapsible: false"})," (either through ",(0,r.jsx)(n.code,{children:"sidebars.js"})," or through plugin configuration), the latter takes precedence and the category is still rendered as expanded."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-shorthands",children:"Using shorthands"}),"\n",(0,r.jsxs)(n.p,{children:["You can express typical sidebar items without much customization more concisely with ",(0,r.jsx)(n.strong,{children:"shorthand syntaxes"}),". There are two parts to this: ",(0,r.jsx)(n.a,{href:"#doc-shorthand",children:(0,r.jsx)(n.strong,{children:"doc shorthand"})})," and ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"category shorthand"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-shorthand",children:"Doc shorthand"}),"\n",(0,r.jsxs)(n.p,{children:["An item with type ",(0,r.jsx)(n.code,{children:"doc"})," can be simply a string representing its ID:"]}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'doc',\n id: 'myDoc',\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n 'myDoc',\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"So it's possible to simplify the example above to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n {\n type: 'category',\n label: 'Getting Started',\n items: [\n // highlight-next-line\n 'doc1',\n ],\n },\n {\n type: 'category',\n label: 'Docusaurus',\n items: [\n // highlight-start\n 'doc2',\n 'doc3',\n // highlight-end\n ],\n },\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-shorthand",children:"Category shorthand"}),"\n",(0,r.jsx)(n.p,{children:"A category item can be represented by an object whose key is its label, and the value is an array of subitems."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'category',\n label: 'Getting started',\n items: ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"This permits us to simplify that example to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n },\n {\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Each shorthand object after this transformation will contain exactly one entry. Now consider the further simplified example below:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Note how the two consecutive category shorthands are compressed into one object with two entries. This syntax generates a ",(0,r.jsx)(n.strong,{children:"sidebar slice"}),': you shouldn\'t see that object as one bulk item\u2014this object is unwrapped, with each entry becoming a separate item, and they spliced together with the rest of the items (in this case, the "Learn more" link) to form the final sidebar level. Sidebar slices are also important when discussing ',(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Wherever you have an array of items that is reduced to one category shorthand, you can omit that enclosing array as well."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Before",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n {\n 'Getting started': ['doc1'],\n Docusaurus: [\n {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n ],\n },\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"After",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: {\n 'Getting started': ['doc1'],\n Docusaurus: {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n },\n};\n"})})})]})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var r=t(27378);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/70e09343.c8592c36.js b/assets/js/70e09343.a9dd10a6.js similarity index 60% rename from assets/js/70e09343.c8592c36.js rename to assets/js/70e09343.a9dd10a6.js index 6189fab71424..6193befcb4d6 100644 --- a/assets/js/70e09343.c8592c36.js +++ b/assets/js/70e09343.a9dd10a6.js @@ -1 +1 @@ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35870],{46768:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(24246),s=(n(27378),n(66222)),o=n(36712);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l(e,t){if(null==e)return{};var n,r,s=function(e,t){if(null==e)return{};var n,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}function d(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,o.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,r=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,o.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:r})}case"offline":return(0,o.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,o.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,o.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function u(e){const{img:t}=e,n=l(e,["img"]);return"string"==typeof t||"default"in t?(0,r.jsx)("img",a({src:"string"==typeof t?t:t.default},n)):(0,r.jsx)(s.Z,c(a({},n),{height:null!==(o=t.src.height)&&void 0!==o?o:100,width:null!==(i=t.src.width)&&void 0!==i?i:100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>c(a({},e),{src:e.path}))),getMessage:d}));var o,i}},29564:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>b,default:()=>x,frontMatter:()=>h,metadata:()=>m,toc:()=>y});var r=n(24246),s=n(71670),o=(n(27378),n(40624)),i=n(36712),a=n(41428),c=n(46768),l=n(52615);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const u=[{name:"\ud83d\udce6 CodeSandbox",image:n(43376),url:"https://docusaurus.new/codesandbox",urlTS:"https://docusaurus.new/codesandbox-ts",description:(0,r.jsx)(i.Z,{id:"playground.codesandbox.description",children:"CodeSandbox is an online code editor and development environment that allows developers to create, share and collaborate on web development projects in a browser-based environment"})},{name:"\u26a1 StackBlitz \ud83c\udd95",image:n(14046),url:"https://docusaurus.new/stackblitz",urlTS:"https://docusaurus.new/stackblitz-ts",description:(0,r.jsx)(i.Z,{id:"playground.stackblitz.description",values:{webContainersLink:(0,r.jsx)(a.Z,{href:"https://blog.stackblitz.com/posts/introducing-webcontainers/",children:"WebContainers"})},children:"StackBlitz uses a novel {webContainersLink} technology to run Docusaurus directly in your browser."})}];function p({name:e,image:t,url:n,urlTS:s,description:d}){return(0,r.jsx)("div",{className:"col col--6 margin-bottom--lg",children:(0,r.jsxs)("div",{className:(0,o.Z)("card"),children:[(0,r.jsx)("div",{className:(0,o.Z)("card__image"),children:(0,r.jsx)(a.Z,{to:n,children:(0,r.jsx)(c.Z,{img:t,alt:`${e}'s image`})})}),(0,r.jsxs)("div",{className:"card__body",children:[(0,r.jsx)(l.Z,{as:"h3",children:e}),(0,r.jsx)("p",{children:d})]}),(0,r.jsxs)("div",{className:"card__footer",children:[(0,r.jsx)("div",{style:{textAlign:"center"},children:(0,r.jsx)("b",{children:(0,r.jsx)(i.Z,{id:"playground.tryItButton",children:"Try it now!"})})}),(0,r.jsxs)("div",{className:"button-group button-group--block",children:[(0,r.jsx)(a.Z,{className:"button button--secondary",to:n,children:"JavaScript"}),(0,r.jsx)(a.Z,{className:"button button--secondary",to:s,children:"TypeScript"})]})]})]})})}function g(){return(0,r.jsx)("div",{className:"row",children:u.map((e=>(0,r.jsx)(p,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},e),e.name)))})}const h={},b="Playground",m={id:"playground",title:"Playground",description:"Playgrounds allow you to run Docusaurus in your browser, without installing anything!",source:"@site/docs/playground.mdx",sourceDirName:".",slug:"/playground",permalink:"/docs/playground",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/configuration"},next:{title:"TypeScript Support",permalink:"/docs/typescript-support"}},f={},y=[];function A(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"playground",children:"Playground"})}),"\n",(0,r.jsxs)(t.p,{children:["Playgrounds allow you to run Docusaurus ",(0,r.jsx)(t.strong,{children:"in your browser, without installing anything"}),"!"]}),"\n",(0,r.jsx)(t.p,{children:"They are mostly useful for:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Testing Docusaurus"}),"\n",(0,r.jsx)(t.li,{children:"Reporting bugs"}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Use ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})," as an easy-to-remember shortcut."]}),"\n",(0,r.jsx)(t.p,{children:"Choose one of the available options below."}),"\n","\n",(0,r.jsx)(g,{}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["For convenience, we'll remember your choice next time you visit ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"}),"."]})})]})}function x(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(A,{...e})}):A(e)}},43376:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png 640w,"+n.p+"assets/ideal-img/codesandbox.36984ff.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png",width:640,height:355},{path:n.p+"assets/ideal-img/codesandbox.36984ff.1030.png",width:1030,height:571}],src:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png",toString:function(){return n.p+"assets/ideal-img/codesandbox.7906bc4.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7ElEQVR4nB3Ov0rDQACA8ZszxVrvLpfYu0goUWtQwT+IOtRasrg6WQdbhL5BHZwEoaVIaXHpC6irxc3JxUVfw01wcHD7pB1+07d8orKasb1zQLmcUrIxcZwQmEUK85IFrVGBQQcRwtolppIkIQxDlFJsrm+QHx1Tq1bJa3UO9/YRWqtZTNMVXOwozhXI26dcTYbcPo+5ntzTGnQQURQhpaRkLYExSL+IPMnY6p9zNu5QH7WRzV2Ec47QGNJ0mcpahlYBN4MuP/zx9vnB1+83L++vCN/3mVJKzxY8z+Oy2eLp4ZFG44Lh3Yh+t8c/jL9rZrM0xfsAAAAASUVORK5CYII="}},14046:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png 640w,"+n.p+"assets/ideal-img/stackblitz.8ebfdbb.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png",width:640,height:356},{path:n.p+"assets/ideal-img/stackblitz.8ebfdbb.1030.png",width:1030,height:572}],src:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png",toString:function(){return n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA2UlEQVR4nB3LvUrDUABA4fsAovbPNs29yb25adKEWlJB8C0rqFOx+BD+ILjbvTiYDiWpUx2zWAIeMcPHmY5I05SLyysm0wxjR+ggbLiej/INvrZ42iKkjvBsgiMDXC+k5/hE4ykvb6+8r1as1x88Pj0jBjJABhP6KmbgWlpdySjJ2G4Ldl876rqmLArEUIV44TnSjFE6pusYonRGvtlQliU/hwOfeY5QJsbYFOlHOCqk3ZNEScZ+/01VVfxCM4jTdp9/J62zpkfHHYZSc3N7x2Jxz3L5wHx+zR8O9nujOJsFvAAAAABJRU5ErkJggg=="}},71670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,a:()=>i});var r=n(27378);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35870],{46768:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(24246),s=(n(27378),n(66222)),o=n(36712);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l(e,t){if(null==e)return{};var n,r,s=function(e,t){if(null==e)return{};var n,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}function d(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,o.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,r=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,o.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:r})}case"offline":return(0,o.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,o.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,o.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function u(e){const{img:t}=e,n=l(e,["img"]);return"string"==typeof t||"default"in t?(0,r.jsx)("img",a({src:"string"==typeof t?t:t.default},n)):(0,r.jsx)(s.Z,c(a({},n),{height:null!==(o=t.src.height)&&void 0!==o?o:100,width:null!==(i=t.src.width)&&void 0!==i?i:100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>c(a({},e),{src:e.path}))),getMessage:d}));var o,i}},29564:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>b,default:()=>x,frontMatter:()=>h,metadata:()=>m,toc:()=>y});var r=n(24246),s=n(71670),o=(n(27378),n(40624)),i=n(36712),a=n(41428),c=n(46768),l=n(52615);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const u=[{name:"\ud83d\udce6 CodeSandbox",image:n(43376),url:"https://docusaurus.new/codesandbox",urlTS:"https://docusaurus.new/codesandbox-ts",description:(0,r.jsx)(i.Z,{id:"playground.codesandbox.description",children:"CodeSandbox is an online code editor and development environment that allows developers to create, share and collaborate on web development projects in a browser-based environment"})},{name:"\u26a1 StackBlitz \ud83c\udd95",image:n(14046),url:"https://docusaurus.new/stackblitz",urlTS:"https://docusaurus.new/stackblitz-ts",description:(0,r.jsx)(i.Z,{id:"playground.stackblitz.description",values:{webContainersLink:(0,r.jsx)(a.Z,{href:"https://blog.stackblitz.com/posts/introducing-webcontainers/",children:"WebContainers"})},children:"StackBlitz uses a novel {webContainersLink} technology to run Docusaurus directly in your browser."})}];function p({name:e,image:t,url:n,urlTS:s,description:d}){return(0,r.jsx)("div",{className:"col col--6 margin-bottom--lg",children:(0,r.jsxs)("div",{className:(0,o.Z)("card"),children:[(0,r.jsx)("div",{className:(0,o.Z)("card__image"),children:(0,r.jsx)(a.Z,{to:n,children:(0,r.jsx)(c.Z,{img:t,alt:`${e}'s image`})})}),(0,r.jsxs)("div",{className:"card__body",children:[(0,r.jsx)(l.Z,{as:"h3",children:e}),(0,r.jsx)("p",{children:d})]}),(0,r.jsxs)("div",{className:"card__footer",children:[(0,r.jsx)("div",{style:{textAlign:"center"},children:(0,r.jsx)("b",{children:(0,r.jsx)(i.Z,{id:"playground.tryItButton",children:"Try it now!"})})}),(0,r.jsxs)("div",{className:"button-group button-group--block",children:[(0,r.jsx)(a.Z,{className:"button button--secondary",to:n,children:"JavaScript"}),(0,r.jsx)(a.Z,{className:"button button--secondary",to:s,children:"TypeScript"})]})]})]})})}function g(){return(0,r.jsx)("div",{className:"row",children:u.map((e=>(0,r.jsx)(p,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},e),e.name)))})}const h={},b="Playground",m={id:"playground",title:"Playground",description:"Playgrounds allow you to run Docusaurus in your browser, without installing anything!",source:"@site/docs/playground.mdx",sourceDirName:".",slug:"/playground",permalink:"/docs/playground",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/configuration"},next:{title:"TypeScript Support",permalink:"/docs/typescript-support"}},f={},y=[];function A(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"playground",children:"Playground"})}),"\n",(0,r.jsxs)(t.p,{children:["Playgrounds allow you to run Docusaurus ",(0,r.jsx)(t.strong,{children:"in your browser, without installing anything"}),"!"]}),"\n",(0,r.jsx)(t.p,{children:"They are mostly useful for:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Testing Docusaurus"}),"\n",(0,r.jsx)(t.li,{children:"Reporting bugs"}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Use ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})," as an easy-to-remember shortcut."]}),"\n",(0,r.jsx)(t.p,{children:"Choose one of the available options below."}),"\n","\n",(0,r.jsx)(g,{}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["For convenience, we'll remember your choice next time you visit ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"}),"."]})})]})}function x(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(A,{...e})}):A(e)}},43376:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png 640w,"+n.p+"assets/ideal-img/codesandbox.36984ff.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png",width:640,height:355},{path:n.p+"assets/ideal-img/codesandbox.36984ff.1030.png",width:1030,height:571}],src:n.p+"assets/ideal-img/codesandbox.7906bc4.640.png",toString:function(){return n.p+"assets/ideal-img/codesandbox.7906bc4.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7ElEQVR4nB3Ov0rDQACA8ZszxVrvLpfYu0goUWtQwT+IOtRasrg6WQdbhL5BHZwEoaVIaXHpC6irxc3JxUVfw01wcHD7pB1+07d8orKasb1zQLmcUrIxcZwQmEUK85IFrVGBQQcRwtolppIkIQxDlFJsrm+QHx1Tq1bJa3UO9/YRWqtZTNMVXOwozhXI26dcTYbcPo+5ntzTGnQQURQhpaRkLYExSL+IPMnY6p9zNu5QH7WRzV2Ec47QGNJ0mcpahlYBN4MuP/zx9vnB1+83L++vCN/3mVJKzxY8z+Oy2eLp4ZFG44Lh3Yh+t8c/jL9rZrM0xfsAAAAASUVORK5CYII="}},14046:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png 640w,"+n.p+"assets/ideal-img/stackblitz.8ebfdbb.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png",width:640,height:356},{path:n.p+"assets/ideal-img/stackblitz.8ebfdbb.1030.png",width:1030,height:572}],src:n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png",toString:function(){return n.p+"assets/ideal-img/stackblitz.4ee9b70.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA2UlEQVR4nB3LvUrDUABA4fsAovbPNs29yb25adKEWlJB8C0rqFOx+BD+ILjbvTiYDiWpUx2zWAIeMcPHmY5I05SLyysm0wxjR+ggbLiej/INvrZ42iKkjvBsgiMDXC+k5/hE4ykvb6+8r1as1x88Pj0jBjJABhP6KmbgWlpdySjJ2G4Ldl876rqmLArEUIV44TnSjFE6pusYonRGvtlQliU/hwOfeY5QJsbYFOlHOCqk3ZNEScZ+/01VVfxCM4jTdp9/J62zpkfHHYZSc3N7x2Jxz3L5wHx+zR8O9nujOJsFvAAAAABJRU5ErkJggg=="}},71670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,a:()=>i});var r=n(27378);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/758e69f6.3dc4146c.js b/assets/js/758e69f6.3dc4146c.js deleted file mode 100644 index 911001dc03c2..000000000000 --- a/assets/js/758e69f6.3dc4146c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32194],{62895:(t,s,e)=>{e.r(s),e.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>l});var i=e(24246),r=e(71670);const n={tags:["visibility","listed"]},o="Some Drafts - Listed 1",d={id:"tests/visibility/some-drafts/draft-subcategory/listed1",title:"Some Drafts - Listed 1",description:"Regular doc",source:"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx",sourceDirName:"tests/visibility/some-drafts/draft-subcategory",slug:"/tests/visibility/some-drafts/draft-subcategory/listed1",permalink:"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1",draft:!1,unlisted:!1,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Listed",permalink:"/tests/docs/tags/listed"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{tags:["visibility","listed"]},sidebar:"sidebar",previous:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"},next:{title:"Some Unlisteds - Listed 1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},a={},l=[];function c(t){const s={h1:"h1",header:"header",p:"p",...(0,r.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"some-drafts---listed-1",children:"Some Drafts - Listed 1"})}),"\n",(0,i.jsx)(s.p,{children:"Regular doc"})]})}function u(t={}){const{wrapper:s}={...(0,r.a)(),...t.components};return s?(0,i.jsx)(s,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx)"},71670:(t,s,e)=>{e.d(s,{Z:()=>d,a:()=>o});var i=e(27378);const r={},n=i.createContext(r);function o(t){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function d(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),i.createElement(n.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/758e69f6.476fe50a.js b/assets/js/758e69f6.476fe50a.js new file mode 100644 index 000000000000..0e60fae9affc --- /dev/null +++ b/assets/js/758e69f6.476fe50a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32194],{62895:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var i=s(24246),r=s(71670);const n={tags:["visibility","listed"]},o="Some Drafts - Listed 1",a={id:"tests/visibility/some-drafts/draft-subcategory/listed1",title:"Some Drafts - Listed 1",description:"Regular doc",source:"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx",sourceDirName:"tests/visibility/some-drafts/draft-subcategory",slug:"/tests/visibility/some-drafts/draft-subcategory/listed1",permalink:"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1",draft:!1,unlisted:!1,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Listed",permalink:"/tests/docs/tags/listed"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{tags:["visibility","listed"]},sidebar:"sidebar",previous:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"},next:{title:"Some Unlisteds - Listed 1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},d={},l=[];function c(t){const e={h1:"h1",header:"header",p:"p",...(0,r.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"some-drafts---listed-1",children:"Some Drafts - Listed 1"})}),"\n",(0,i.jsx)(e.p,{children:"Regular doc"})]})}function u(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>a,a:()=>o});var i=s(27378);const r={},n=i.createContext(r);function o(t){const e=i.useContext(n);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),i.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/76134b9e.4b236a0d.js b/assets/js/76134b9e.4b236a0d.js deleted file mode 100644 index c7e262a0ee7d..000000000000 --- a/assets/js/76134b9e.4b236a0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58335],{60950:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var s=t(24246),r=t(71670);const i={},o="Beginner's guide",d={id:"beginner's guide",title:"Beginner's guide",description:"#9160",source:"@site/_dogfooding/_docs tests/beginner's guide.mdx",sourceDirName:".",slug:"/beginner's guide",permalink:"/tests/docs/beginner's guide",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{}},c={},a=[];function u(e){const n={a:"a",h1:"h1",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"beginners-guide",children:"Beginner's guide"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9160",children:"#9160"})})]})}function g(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}g.displayName="MDXContent(_dogfooding/_docs tests/beginner's guide.mdx)"},71670:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>o});var s=t(27378);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/76134b9e.df47e244.js b/assets/js/76134b9e.df47e244.js new file mode 100644 index 000000000000..9ed27008e2b4 --- /dev/null +++ b/assets/js/76134b9e.df47e244.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58335],{60950:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var s=t(24246),r=t(71670);const o={},i="Beginner's guide",d={id:"beginner's guide",title:"Beginner's guide",description:"#9160",source:"@site/_dogfooding/_docs tests/beginner's guide.mdx",sourceDirName:".",slug:"/beginner's guide",permalink:"/tests/docs/beginner's guide",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{}},a={},c=[];function u(e){const n={a:"a",h1:"h1",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"beginners-guide",children:"Beginner's guide"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9160",children:"#9160"})})]})}function g(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}g.displayName="MDXContent(_dogfooding/_docs tests/beginner's guide.mdx)"},71670:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>i});var s=t(27378);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/771ca8b2.4482ab31.js b/assets/js/771ca8b2.4482ab31.js new file mode 100644 index 000000000000..962a665f91b4 --- /dev/null +++ b/assets/js/771ca8b2.4482ab31.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65147],{8144:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:2,toc_max_heading_level:4},l=void 0,d={id:"toc/toc-2-4",title:"toc-2-4",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx",sourceDirName:"toc",slug:"/toc/toc-2-4",permalink:"/tests/docs/toc/toc-2-4",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:4},sidebar:"sidebar",previous:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"},next:{title:"toc-2-5",permalink:"/tests/docs/toc/toc-2-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function a(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}a.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-2-4.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/771ca8b2.b64324e7.js b/assets/js/771ca8b2.b64324e7.js deleted file mode 100644 index 85785adfb6e5..000000000000 --- a/assets/js/771ca8b2.b64324e7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65147],{8144:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:2,toc_max_heading_level:4},l=void 0,d={id:"toc/toc-2-4",title:"toc-2-4",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx",sourceDirName:"toc",slug:"/toc/toc-2-4",permalink:"/tests/docs/toc/toc-2-4",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:4},sidebar:"sidebar",previous:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"},next:{title:"toc-2-5",permalink:"/tests/docs/toc/toc-2-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}x.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-2-4.mdx)"},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"title",children:"title"})}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/772c972a.5399d41c.js b/assets/js/772c972a.5399d41c.js deleted file mode 100644 index ce812c69397b..000000000000 --- a/assets/js/772c972a.5399d41c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63067],{65500:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var t=n(24246),s=n(71670);const i={id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},r="Docs Introduction",d={id:"guides/docs/introduction",title:"Docs Introduction",description:"The docs feature provides users with a way to organize Markdown files in a hierarchical format.",source:"@site/docs/guides/docs/docs-introduction.mdx",sourceDirName:"guides/docs",slug:"/docs-introduction",permalink:"/docs/docs-introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},sidebar:"docs",previous:{title:"Pages",permalink:"/docs/creating-pages"},next:{title:"Create a doc",permalink:"/docs/create-doc"}},c={},l=[{value:"Docs-only mode",id:"docs-only-mode",level:2}];function a(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"docs-introduction",children:"Docs Introduction"})}),"\n",(0,t.jsx)(o.p,{children:"The docs feature provides users with a way to organize Markdown files in a hierarchical format."}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsxs)(o.p,{children:["Check the ",(0,t.jsx)(o.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"Docs Plugin API Reference documentation"})," for an exhaustive list of options."]})}),"\n",(0,t.jsx)(o.p,{children:"Your site's documentation is organized by four levels, from lowest to highest:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:"Individual pages."}),"\n",(0,t.jsx)(o.li,{children:"Sidebars."}),"\n",(0,t.jsx)(o.li,{children:"Versions."}),"\n",(0,t.jsx)(o.li,{children:"Plugin instances."}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["The guide will introduce them in that order: starting from ",(0,t.jsx)(o.a,{href:"/docs/create-doc",children:"how individual pages can be configured"}),", to ",(0,t.jsx)(o.a,{href:"/docs/sidebar",children:"how to create a sidebar or multiple ones"}),", to ",(0,t.jsx)(o.a,{href:"/docs/versioning",children:"how to create and manage versions"}),", to ",(0,t.jsx)(o.a,{href:"/docs/docs-multi-instance",children:"how to use multiple docs plugin instances"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"docs-only-mode",children:"Docs-only mode"}),"\n",(0,t.jsx)(o.p,{children:"A freshly initialized Docusaurus site has the following structure:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `src/pages/index.js`\n\nexample.com/docs/intro -> generated from `docs/intro.md`\nexample.com/docs/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n\nexample.com/blog/2021/08/26/welcome -> generated from `blog/2021-08-26-welcome/index.md`\nexample.com/blog/2021/08/01/mdx-blog-post -> generated from `blog/2021-08-01-mdx-blog-post.mdx`\n...\n"})}),"\n",(0,t.jsxs)(o.p,{children:["All docs will be served under the subroute ",(0,t.jsx)(o.code,{children:"docs/"}),". But what if ",(0,t.jsx)(o.strong,{children:"your site only has docs"}),", or you want to prioritize your docs by putting them at the root?"]}),"\n",(0,t.jsx)(o.p,{children:"Assume that you have the following in your configuration:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n /* docs plugin options */\n },\n blog: {\n /* blog plugin options */\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(o.p,{children:"To enter docs-only mode, change it to like this:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n routeBasePath: '/', // Serve the docs at the site's root\n /* other docs plugin options */\n },\n // highlight-next-line\n blog: false, // Optional: disable the blog plugin\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Note that you ",(0,t.jsx)(o.strong,{children:"don't necessarily have to give up on using the blog"})," or other plugins; all that ",(0,t.jsx)(o.code,{children:"routeBasePath: '/'"})," does is that instead of serving the docs through ",(0,t.jsx)(o.code,{children:"https://example.com/docs/some-doc"}),", they are now at the site root: ",(0,t.jsx)(o.code,{children:"https://example.com/some-doc"}),". The blog, if enabled, can still be accessed through the ",(0,t.jsx)(o.code,{children:"blog/"})," subroute."]}),"\n",(0,t.jsxs)(o.p,{children:["Don't forget to put some page at the root (",(0,t.jsx)(o.code,{children:"https://example.com/"}),") through adding the front matter:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-md",metastring:'title="docs/intro.md"',children:"---\n# highlight-next-line\nslug: /\n---\n\nThis page will be the home page when users visit https://example.com/.\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"warning",children:(0,t.jsxs)(o.p,{children:["If you added ",(0,t.jsx)(o.code,{children:"slug: /"})," to a doc to make it the homepage, you should delete the existing homepage at ",(0,t.jsx)(o.code,{children:"./src/pages/index.js"}),", or else there will be two files mapping to the same route!"]})}),"\n",(0,t.jsx)(o.p,{children:"Now, the site's structure will be like the following:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `docs/intro.md`\nexample.com/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:['There\'s also a "blog-only mode" for those who only want to use the blog feature of Docusaurus. You can use the same method detailed above. Follow the setup instructions on ',(0,t.jsx)(o.a,{href:"/docs/blog#blog-only-mode",children:"Blog-only mode"}),"."]})})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},71670:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>r});var t=n(27378);const s={},i=t.createContext(s);function r(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/772c972a.f66530ef.js b/assets/js/772c972a.f66530ef.js new file mode 100644 index 000000000000..e9e76932a062 --- /dev/null +++ b/assets/js/772c972a.f66530ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63067],{65500:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var t=n(24246),s=n(71670);const i={id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},r="Docs Introduction",d={id:"guides/docs/introduction",title:"Docs Introduction",description:"The docs feature provides users with a way to organize Markdown files in a hierarchical format.",source:"@site/docs/guides/docs/docs-introduction.mdx",sourceDirName:"guides/docs",slug:"/docs-introduction",permalink:"/docs/docs-introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},sidebar:"docs",previous:{title:"Pages",permalink:"/docs/creating-pages"},next:{title:"Create a doc",permalink:"/docs/create-doc"}},c={},l=[{value:"Docs-only mode",id:"docs-only-mode",level:2}];function a(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"docs-introduction",children:"Docs Introduction"})}),"\n",(0,t.jsx)(o.p,{children:"The docs feature provides users with a way to organize Markdown files in a hierarchical format."}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsxs)(o.p,{children:["Check the ",(0,t.jsx)(o.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"Docs Plugin API Reference documentation"})," for an exhaustive list of options."]})}),"\n",(0,t.jsx)(o.p,{children:"Your site's documentation is organized by four levels, from lowest to highest:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:"Individual pages."}),"\n",(0,t.jsx)(o.li,{children:"Sidebars."}),"\n",(0,t.jsx)(o.li,{children:"Versions."}),"\n",(0,t.jsx)(o.li,{children:"Plugin instances."}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["The guide will introduce them in that order: starting from ",(0,t.jsx)(o.a,{href:"/docs/create-doc",children:"how individual pages can be configured"}),", to ",(0,t.jsx)(o.a,{href:"/docs/sidebar",children:"how to create a sidebar or multiple ones"}),", to ",(0,t.jsx)(o.a,{href:"/docs/versioning",children:"how to create and manage versions"}),", to ",(0,t.jsx)(o.a,{href:"/docs/docs-multi-instance",children:"how to use multiple docs plugin instances"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"docs-only-mode",children:"Docs-only mode"}),"\n",(0,t.jsx)(o.p,{children:"A freshly initialized Docusaurus site has the following structure:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `src/pages/index.js`\n\nexample.com/docs/intro -> generated from `docs/intro.md`\nexample.com/docs/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n\nexample.com/blog/2021/08/26/welcome -> generated from `blog/2021-08-26-welcome/index.md`\nexample.com/blog/2021/08/01/mdx-blog-post -> generated from `blog/2021-08-01-mdx-blog-post.mdx`\n...\n"})}),"\n",(0,t.jsxs)(o.p,{children:["All docs will be served under the subroute ",(0,t.jsx)(o.code,{children:"docs/"}),". But what if ",(0,t.jsx)(o.strong,{children:"your site only has docs"}),", or you want to prioritize your docs by putting them at the root?"]}),"\n",(0,t.jsx)(o.p,{children:"Assume that you have the following in your configuration:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n /* docs plugin options */\n },\n blog: {\n /* blog plugin options */\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(o.p,{children:"To enter docs-only mode, change it to like this:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n routeBasePath: '/', // Serve the docs at the site's root\n /* other docs plugin options */\n },\n // highlight-next-line\n blog: false, // Optional: disable the blog plugin\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Note that you ",(0,t.jsx)(o.strong,{children:"don't necessarily have to give up on using the blog"})," or other plugins; all that ",(0,t.jsx)(o.code,{children:"routeBasePath: '/'"})," does is that instead of serving the docs through ",(0,t.jsx)(o.code,{children:"https://example.com/docs/some-doc"}),", they are now at the site root: ",(0,t.jsx)(o.code,{children:"https://example.com/some-doc"}),". The blog, if enabled, can still be accessed through the ",(0,t.jsx)(o.code,{children:"blog/"})," subroute."]}),"\n",(0,t.jsxs)(o.p,{children:["Don't forget to put some page at the root (",(0,t.jsx)(o.code,{children:"https://example.com/"}),") through adding the front matter:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-md",metastring:'title="docs/intro.md"',children:"---\n# highlight-next-line\nslug: /\n---\n\nThis page will be the home page when users visit https://example.com/.\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"warning",children:(0,t.jsxs)(o.p,{children:["If you added ",(0,t.jsx)(o.code,{children:"slug: /"})," to a doc to make it the homepage, you should delete the existing homepage at ",(0,t.jsx)(o.code,{children:"./src/pages/index.js"}),", or else there will be two files mapping to the same route!"]})}),"\n",(0,t.jsx)(o.p,{children:"Now, the site's structure will be like the following:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `docs/intro.md`\nexample.com/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:['There\'s also a "blog-only mode" for those who only want to use the blog feature of Docusaurus. You can use the same method detailed above. Follow the setup instructions on ',(0,t.jsx)(o.a,{href:"/docs/blog#blog-only-mode",children:"Blog-only mode"}),"."]})})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},71670:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>r});var t=n(27378);const s={},i=t.createContext(s);function r(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77da816e.88fda49c.js b/assets/js/77da816e.4be32908.js similarity index 55% rename from assets/js/77da816e.88fda49c.js rename to assets/js/77da816e.4be32908.js index e20e5cf2cf91..8dcb98ff7c66 100644 --- a/assets/js/77da816e.88fda49c.js +++ b/assets/js/77da816e.4be32908.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39797],{40805:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},89686:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},38098:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var a=t(24246),r=t(71670);const n={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},c={image:t(40805).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:t(89686).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39797],{40805:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},89686:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},38098:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var a=t(24246),r=t(71670);const n={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},c={image:t(40805).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:t(89686).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77eb9b8f.678d97e2.js b/assets/js/77eb9b8f.678d97e2.js new file mode 100644 index 000000000000..13101579e8d3 --- /dev/null +++ b/assets/js/77eb9b8f.678d97e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54724],{84311:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=t(24246),i=t(71670);const o={sidebar_position:1,toc_max_heading_level:4},r="Lifecycle APIs",a={id:"api/plugin-methods/lifecycle-apis",title:"Lifecycle APIs",description:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.",source:"@site/docs/api/plugin-methods/lifecycle-apis.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/lifecycle-apis",permalink:"/docs/api/plugin-methods/lifecycle-apis",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:1,frontMatter:{sidebar_position:1,toc_max_heading_level:4},sidebar:"api",previous:{title:"Plugin Method References",permalink:"/docs/api/plugin-methods/"},next:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"}},d={},c=[{value:"<code>async loadContent()</code>",id:"loadContent",level:2},{value:"<code>async contentLoaded({content, actions})</code>",id:"contentLoaded",level:2},{value:"<code>content</code>",id:"content",level:3},{value:"<code>actions</code>",id:"actions",level:3},{value:"<code>addRoute(config: RouteConfig): void</code>",id:"addRoute",level:4},{value:"<code>createData(name: string, data: any): Promise<string></code>",id:"createData",level:4},{value:"<code>setGlobalData(data: any): void</code>",id:"setGlobalData",level:4},{value:"<code>configureWebpack(config, isServer, utils, content)</code>",id:"configureWebpack",level:2},{value:"<code>config</code>",id:"config",level:3},{value:"<code>isServer</code>",id:"isServer",level:3},{value:"<code>utils</code>",id:"utils",level:3},{value:"<code>content</code>",id:"content-1",level:3},{value:"Merge strategy",id:"merge-strategy",level:3},{value:"Configuring dev server",id:"configuring-dev-server",level:3},{value:"<code>configurePostCss(options)</code>",id:"configurePostCss",level:2},{value:"<code>postBuild(props)</code>",id:"postBuild",level:2},{value:"<code>injectHtmlTags({content})</code>",id:"injectHtmlTags",level:2},{value:"<code>getClientModules()</code>",id:"getClientModules",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"lifecycle-apis",children:"Lifecycle APIs"})}),"\n",(0,s.jsx)(n.p,{children:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files."}),"\n",(0,s.jsx)(n.h2,{id:"loadContent",children:(0,s.jsx)(n.code,{children:"async loadContent()"})}),"\n",(0,s.jsx)(n.p,{children:"Plugins should use this lifecycle to fetch from data sources (filesystem, remote API, headless CMS, etc.) or do some server processing. The return value is the content it needs."}),"\n",(0,s.jsx)(n.p,{children:"For example, this plugin below returns a random integer between 1 and 10 as content."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async loadContent() {\n return 1 + Math.floor(Math.random() * 10);\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"contentLoaded",children:(0,s.jsx)(n.code,{children:"async contentLoaded({content, actions})"})}),"\n",(0,s.jsxs)(n.p,{children:["The data that was loaded in ",(0,s.jsx)(n.code,{children:"loadContent"})," will be consumed in ",(0,s.jsx)(n.code,{children:"contentLoaded"}),". It can be rendered to routes, registered as global data, etc."]}),"\n",(0,s.jsx)(n.h3,{id:"content",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"contentLoaded"})," will be called ",(0,s.jsx)(n.em,{children:"after"})," ",(0,s.jsx)(n.code,{children:"loadContent"})," is done. The return value of ",(0,s.jsx)(n.code,{children:"loadContent()"})," will be passed to ",(0,s.jsx)(n.code,{children:"contentLoaded"})," as ",(0,s.jsx)(n.code,{children:"content"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"actions",children:(0,s.jsx)(n.code,{children:"actions"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"actions"})," contain three functions:"]}),"\n",(0,s.jsx)(n.h4,{id:"addRoute",children:(0,s.jsx)(n.code,{children:"addRoute(config: RouteConfig): void"})}),"\n",(0,s.jsx)(n.p,{children:"Create a route to add to the website."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:'export type RouteConfig = {\n /**\n * With leading slash. Trailing slash will be normalized by config.\n */\n path: string;\n /**\n * Component used to render this route, a path that the bundler can `require`.\n */\n component: string;\n /**\n * Props. Each entry should be `[propName]: pathToPropModule` (created with\n * `createData`)\n */\n modules?: RouteModules;\n /**\n * The route context will wrap the `component`. Use `useRouteContext` to\n * retrieve what\'s declared here. Note that all custom route context declared\n * here will be namespaced under {@link RouteContext.data}.\n */\n context?: RouteModules;\n /**\n * Nested routes config, useful for "layout routes" having subroutes.\n */\n routes?: RouteConfig[];\n /**\n * React router config option: `exact` routes would not match subroutes.\n */\n exact?: boolean;\n /**\n * React router config option: `strict` routes are sensitive to the presence\n * of a trailing slash.\n */\n strict?: boolean;\n /**\n * Used to sort routes.\n * Higher-priority routes will be matched first.\n */\n priority?: number;\n /**\n * Optional route metadata\n */\n metadata?: RouteMetadata;\n /**\n * Extra props; will be available on the client side.\n */\n [propName: string]: unknown;\n};\n\n/**\n * Plugin authors can assign extra metadata to the created routes\n * It is only available on the Node.js side, and not sent to the browser\n * Optional: plugin authors are encouraged but not required to provide it\n *\n * Some plugins might use this data to provide additional features.\n * This is the case of the sitemap plugin to provide support for "lastmod".\n * See also: https://github.com/facebook/docusaurus/pull/9954\n */\nexport type RouteMetadata = {\n /**\n * The source code file path that led to the creation of the current route\n * In official content plugins, this is usually a Markdown or React file\n * This path is expected to be relative to the site directory\n */\n sourceFilePath?: string;\n /**\n * The last updated date of this route\n * This is generally read from the Git history of the sourceFilePath\n * but can also be provided through other means (usually front matter)\n *\n * This has notably been introduced for adding "lastmod" support to the\n * sitemap plugin, see https://github.com/facebook/docusaurus/pull/9954\n */\n lastUpdatedAt?: number;\n};\n\ntype RouteModules = {\n [module: string]: Module | RouteModules | RouteModules[];\n};\n\ntype Module =\n | {\n path: string;\n __import?: boolean;\n query?: ParsedUrlQueryInput;\n }\n | string;\n'})}),"\n",(0,s.jsx)(n.h4,{id:"createData",children:(0,s.jsx)(n.code,{children:"createData(name: string, data: any): Promise<string>"})}),"\n",(0,s.jsx)(n.p,{children:"A declarative callback to create static data (generally JSON or string) which can later be provided to your routes as props. Takes the file name and data to be stored, and returns the actual data file's path."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\n\nexport default function FriendsComponent({friends}) {\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {createData, addRoute} = actions;\n // Create friends.json\n const friends = ['Yangshun', 'Sebastien'];\n const friendsJsonPath = await createData(\n 'friends.json',\n JSON.stringify(friends),\n );\n\n // Add the '/friends' routes, and ensure it receives the friends props\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n modules: {\n // propName -> JSON file path\n friends: friendsJsonPath,\n },\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h4,{id:"setGlobalData",children:(0,s.jsx)(n.code,{children:"setGlobalData(data: any): void"})}),"\n",(0,s.jsx)(n.p,{children:"This function permits one to create some global plugin data that can be read from any page, including the pages created by other plugins, and your theme layout."}),"\n",(0,s.jsxs)(n.p,{children:["This data becomes accessible to your client-side/theme code through the ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#useGlobalData",children:(0,s.jsx)(n.code,{children:"useGlobalData"})})," and ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#usePluginData",children:(0,s.jsx)(n.code,{children:"usePluginData"})})," hooks."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Global data is... global: its size affects the loading time of all pages of your site, so try to keep it small. Prefer ",(0,s.jsx)(n.code,{children:"createData"})," and page-specific data whenever possible."]})}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nexport default function FriendsComponent() {\n const {friends} = usePluginData('docusaurus-friends-plugin');\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {setGlobalData, addRoute} = actions;\n // Create friends global data\n setGlobalData({friends: ['Yangshun', 'Sebastien']});\n\n // Add the '/friends' routes\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configureWebpack",children:(0,s.jsx)(n.code,{children:"configureWebpack(config, isServer, utils, content)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies the internal webpack config. If the return value is a JavaScript object, it will be merged into the final config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:(0,s.jsx)(n.code,{children:"webpack-merge"})}),". If it is a function, it will be called and receive ",(0,s.jsx)(n.code,{children:"config"})," as the first argument and an ",(0,s.jsx)(n.code,{children:"isServer"})," flag as the second argument."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["The API of ",(0,s.jsx)(n.code,{children:"configureWebpack"})," will be modified in the future to accept an object (",(0,s.jsx)(n.code,{children:"configureWebpack({config, isServer, utils, content})"}),")"]})}),"\n",(0,s.jsx)(n.h3,{id:"config",children:(0,s.jsx)(n.code,{children:"config"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," is called with ",(0,s.jsx)(n.code,{children:"config"})," generated according to client/server build. You may treat this as the base config to be merged with."]}),"\n",(0,s.jsx)(n.h3,{id:"isServer",children:(0,s.jsx)(n.code,{children:"isServer"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both in server build and in client build. The server build receives ",(0,s.jsx)(n.code,{children:"true"})," and the client build receives ",(0,s.jsx)(n.code,{children:"false"})," as ",(0,s.jsx)(n.code,{children:"isServer"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"utils",children:(0,s.jsx)(n.code,{children:"utils"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," also receives an util object:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getStyleLoaders(isServer: boolean, cssOptions: {[key: string]: any}): Loader[]"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getJSLoader(isServer: boolean, cacheOptions?: {}): Loader | null"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You may use them to return your webpack configuration conditionally."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below modify the webpack config to transpile ",(0,s.jsx)(n.code,{children:".foo"})," files."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n // highlight-start\n configureWebpack(config, isServer, utils) {\n const {getJSLoader} = utils;\n return {\n module: {\n rules: [\n {\n test: /\\.foo$/,\n use: [getJSLoader(isServer), 'my-custom-webpack-loader'],\n },\n ],\n },\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"content-1",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.h3,{id:"merge-strategy",children:"Merge strategy"}),"\n",(0,s.jsxs)(n.p,{children:["We merge the Webpack configuration parts of plugins into the global Webpack config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:"webpack-merge"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It is possible to specify the merge strategy. For example, if you want a webpack rule to be prepended instead of appended:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n mergeStrategy: {'module.rules': 'prepend'},\n module: {rules: [myRuleToPrepend]},\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Read the ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge#merging-with-strategies",children:"webpack-merge strategy doc"})," for more details."]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-dev-server",children:"Configuring dev server"}),"\n",(0,s.jsxs)(n.p,{children:["The dev server can be configured through returning a ",(0,s.jsx)(n.code,{children:"devServer"})," field."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n devServer: {\n open: '/docs', // Opens localhost:3000/docs instead of localhost:3000/\n },\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configurePostCss",children:(0,s.jsx)(n.code,{children:"configurePostCss(options)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies ",(0,s.jsxs)(n.a,{href:"https://webpack.js.org/loaders/postcss-loader/#postcssoptions",children:[(0,s.jsx)(n.code,{children:"postcssOptions"})," of ",(0,s.jsx)(n.code,{children:"postcss-loader"})]})," during the generation of the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["Should return the mutated ",(0,s.jsx)(n.code,{children:"postcssOptions"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["By default, ",(0,s.jsx)(n.code,{children:"postcssOptions"})," looks like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"const postcssOptions = {\n ident: 'postcss',\n plugins: [require('autoprefixer')],\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n configurePostCss(postcssOptions) {\n // Appends new PostCSS plugin.\n postcssOptions.plugins.push(require('postcss-import'));\n return postcssOptions;\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"postBuild",children:(0,s.jsx)(n.code,{children:"postBuild(props)"})}),"\n",(0,s.jsx)(n.p,{children:"Called when a (production) build finishes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"interface Props {\n siteDir: string;\n generatedFilesDir: string;\n siteConfig: DocusaurusConfig;\n outDir: string;\n baseUrl: string;\n headTags: string;\n preBodyTags: string;\n postBodyTags: string;\n routesPaths: string[];\n plugins: Plugin<any>[];\n content: Content;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async postBuild({siteConfig = {}, routesPaths = [], outDir}) {\n // Print out to console all the rendered routes.\n routesPaths.map((route) => {\n console.log(route);\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"injectHtmlTags",children:(0,s.jsx)(n.code,{children:"injectHtmlTags({content})"})}),"\n",(0,s.jsx)(n.p,{children:"Inject head and/or body HTML tags to Docusaurus generated HTML."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"injectHtmlTags"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"function injectHtmlTags(): {\n headTags?: HtmlTags;\n preBodyTags?: HtmlTags;\n postBodyTags?: HtmlTags;\n};\n\ntype HtmlTags = string | HtmlTagObject | (string | HtmlTagObject)[];\n\ntype HtmlTagObject = {\n /**\n * Attributes of the HTML tag\n * E.g. `{'disabled': true, 'value': 'demo', 'rel': 'preconnect'}`\n */\n attributes?: {\n [attributeName: string]: string | boolean;\n };\n /**\n * The tag name e.g. `div`, `script`, `link`, `meta`\n */\n tagName: string;\n /**\n * The inner HTML\n */\n innerHTML?: string;\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n loadContent: async () => {\n return {remoteHeadTags: await fetchHeadTagsFromAPI()};\n },\n // highlight-start\n injectHtmlTags({content}) {\n return {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'preconnect',\n href: 'https://www.github.com',\n },\n },\n ...content.remoteHeadTags,\n ],\n preBodyTags: [\n {\n tagName: 'script',\n attributes: {\n charset: 'utf-8',\n src: '/noflash.js',\n },\n },\n ],\n postBodyTags: [`<div> This is post body </div>`],\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Tags will be added as follows:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"headTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</head>"})," tag after scripts added by config."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"preBodyTags"})," will be inserted after the opening ",(0,s.jsx)(n.code,{children:"<body>"})," tag before any child elements."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"postBodyTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</body>"})," tag after all child elements."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules()"})}),"\n",(0,s.jsxs)(n.p,{children:["Returns an array of paths to the ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#client-modules",children:"client modules"})," that are to be imported into the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, to make your theme load a ",(0,s.jsx)(n.code,{children:"customCss"})," or ",(0,s.jsx)(n.code,{children:"customJs"})," file path from ",(0,s.jsx)(n.code,{children:"options"})," passed in by the user:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function (context, options) {\n const {customCss, customJs} = options || {};\n return {\n name: 'name-of-my-theme',\n // highlight-start\n getClientModules() {\n return [customCss, customJs];\n },\n // highlight-end\n };\n}\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var s=t(27378);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77eb9b8f.8c1862af.js b/assets/js/77eb9b8f.8c1862af.js deleted file mode 100644 index c88f90a0d71d..000000000000 --- a/assets/js/77eb9b8f.8c1862af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54724],{84311:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=t(24246),i=t(71670);const o={sidebar_position:1,toc_max_heading_level:4},r="Lifecycle APIs",a={id:"api/plugin-methods/lifecycle-apis",title:"Lifecycle APIs",description:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.",source:"@site/docs/api/plugin-methods/lifecycle-apis.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/lifecycle-apis",permalink:"/docs/api/plugin-methods/lifecycle-apis",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:1,frontMatter:{sidebar_position:1,toc_max_heading_level:4},sidebar:"api",previous:{title:"Plugin Method References",permalink:"/docs/api/plugin-methods/"},next:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"}},d={},c=[{value:"<code>async loadContent()</code>",id:"loadContent",level:2},{value:"<code>async contentLoaded({content, actions})</code>",id:"contentLoaded",level:2},{value:"<code>content</code>",id:"content",level:3},{value:"<code>actions</code>",id:"actions",level:3},{value:"<code>addRoute(config: RouteConfig): void</code>",id:"addRoute",level:4},{value:"<code>createData(name: string, data: any): Promise<string></code>",id:"createData",level:4},{value:"<code>setGlobalData(data: any): void</code>",id:"setGlobalData",level:4},{value:"<code>configureWebpack(config, isServer, utils, content)</code>",id:"configureWebpack",level:2},{value:"<code>config</code>",id:"config",level:3},{value:"<code>isServer</code>",id:"isServer",level:3},{value:"<code>utils</code>",id:"utils",level:3},{value:"<code>content</code>",id:"content-1",level:3},{value:"Merge strategy",id:"merge-strategy",level:3},{value:"Configuring dev server",id:"configuring-dev-server",level:3},{value:"<code>configurePostCss(options)</code>",id:"configurePostCss",level:2},{value:"<code>postBuild(props)</code>",id:"postBuild",level:2},{value:"<code>injectHtmlTags({content})</code>",id:"injectHtmlTags",level:2},{value:"<code>getClientModules()</code>",id:"getClientModules",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"lifecycle-apis",children:"Lifecycle APIs"})}),"\n",(0,s.jsx)(n.p,{children:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files."}),"\n",(0,s.jsx)(n.h2,{id:"loadContent",children:(0,s.jsx)(n.code,{children:"async loadContent()"})}),"\n",(0,s.jsx)(n.p,{children:"Plugins should use this lifecycle to fetch from data sources (filesystem, remote API, headless CMS, etc.) or do some server processing. The return value is the content it needs."}),"\n",(0,s.jsx)(n.p,{children:"For example, this plugin below returns a random integer between 1 and 10 as content."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async loadContent() {\n return 1 + Math.floor(Math.random() * 10);\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"contentLoaded",children:(0,s.jsx)(n.code,{children:"async contentLoaded({content, actions})"})}),"\n",(0,s.jsxs)(n.p,{children:["The data that was loaded in ",(0,s.jsx)(n.code,{children:"loadContent"})," will be consumed in ",(0,s.jsx)(n.code,{children:"contentLoaded"}),". It can be rendered to routes, registered as global data, etc."]}),"\n",(0,s.jsx)(n.h3,{id:"content",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"contentLoaded"})," will be called ",(0,s.jsx)(n.em,{children:"after"})," ",(0,s.jsx)(n.code,{children:"loadContent"})," is done. The return value of ",(0,s.jsx)(n.code,{children:"loadContent()"})," will be passed to ",(0,s.jsx)(n.code,{children:"contentLoaded"})," as ",(0,s.jsx)(n.code,{children:"content"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"actions",children:(0,s.jsx)(n.code,{children:"actions"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"actions"})," contain three functions:"]}),"\n",(0,s.jsx)(n.h4,{id:"addRoute",children:(0,s.jsx)(n.code,{children:"addRoute(config: RouteConfig): void"})}),"\n",(0,s.jsx)(n.p,{children:"Create a route to add to the website."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:'export type RouteConfig = {\n /**\n * With leading slash. Trailing slash will be normalized by config.\n */\n path: string;\n /**\n * Component used to render this route, a path that the bundler can `require`.\n */\n component: string;\n /**\n * Props. Each entry should be `[propName]: pathToPropModule` (created with\n * `createData`)\n */\n modules?: RouteModules;\n /**\n * The route context will wrap the `component`. Use `useRouteContext` to\n * retrieve what\'s declared here. Note that all custom route context declared\n * here will be namespaced under {@link RouteContext.data}.\n */\n context?: RouteModules;\n /**\n * Nested routes config, useful for "layout routes" having subroutes.\n */\n routes?: RouteConfig[];\n /**\n * React router config option: `exact` routes would not match subroutes.\n */\n exact?: boolean;\n /**\n * React router config option: `strict` routes are sensitive to the presence\n * of a trailing slash.\n */\n strict?: boolean;\n /**\n * Used to sort routes.\n * Higher-priority routes will be matched first.\n */\n priority?: number;\n /**\n * Optional route metadata\n */\n metadata?: RouteMetadata;\n /**\n * Extra props; will be available on the client side.\n */\n [propName: string]: unknown;\n};\n\n/**\n * Plugin authors can assign extra metadata to the created routes\n * It is only available on the Node.js side, and not sent to the browser\n * Optional: plugin authors are encouraged but not required to provide it\n *\n * Some plugins might use this data to provide additional features.\n * This is the case of the sitemap plugin to provide support for "lastmod".\n * See also: https://github.com/facebook/docusaurus/pull/9954\n */\nexport type RouteMetadata = {\n /**\n * The source code file path that led to the creation of the current route\n * In official content plugins, this is usually a Markdown or React file\n * This path is expected to be relative to the site directory\n */\n sourceFilePath?: string;\n /**\n * The last updated date of this route\n * This is generally read from the Git history of the sourceFilePath\n * but can also be provided through other means (usually front matter)\n *\n * This has notably been introduced for adding "lastmod" support to the\n * sitemap plugin, see https://github.com/facebook/docusaurus/pull/9954\n */\n lastUpdatedAt?: number;\n};\n\ntype RouteModules = {\n [module: string]: Module | RouteModules | RouteModules[];\n};\n\ntype Module =\n | {\n path: string;\n __import?: boolean;\n query?: ParsedUrlQueryInput;\n }\n | string;\n'})}),"\n",(0,s.jsx)(n.h4,{id:"createData",children:(0,s.jsx)(n.code,{children:"createData(name: string, data: any): Promise<string>"})}),"\n",(0,s.jsx)(n.p,{children:"A declarative callback to create static data (generally JSON or string) which can later be provided to your routes as props. Takes the file name and data to be stored, and returns the actual data file's path."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\n\nexport default function FriendsComponent({friends}) {\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {createData, addRoute} = actions;\n // Create friends.json\n const friends = ['Yangshun', 'Sebastien'];\n const friendsJsonPath = await createData(\n 'friends.json',\n JSON.stringify(friends),\n );\n\n // Add the '/friends' routes, and ensure it receives the friends props\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n modules: {\n // propName -> JSON file path\n friends: friendsJsonPath,\n },\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h4,{id:"setGlobalData",children:(0,s.jsx)(n.code,{children:"setGlobalData(data: any): void"})}),"\n",(0,s.jsx)(n.p,{children:"This function permits one to create some global plugin data that can be read from any page, including the pages created by other plugins, and your theme layout."}),"\n",(0,s.jsxs)(n.p,{children:["This data becomes accessible to your client-side/theme code through the ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#useGlobalData",children:(0,s.jsx)(n.code,{children:"useGlobalData"})})," and ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#usePluginData",children:(0,s.jsx)(n.code,{children:"usePluginData"})})," hooks."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Global data is... global: its size affects the loading time of all pages of your site, so try to keep it small. Prefer ",(0,s.jsx)(n.code,{children:"createData"})," and page-specific data whenever possible."]})}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nexport default function FriendsComponent() {\n const {friends} = usePluginData('docusaurus-friends-plugin');\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {setGlobalData, addRoute} = actions;\n // Create friends global data\n setGlobalData({friends: ['Yangshun', 'Sebastien']});\n\n // Add the '/friends' routes\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configureWebpack",children:(0,s.jsx)(n.code,{children:"configureWebpack(config, isServer, utils, content)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies the internal webpack config. If the return value is a JavaScript object, it will be merged into the final config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:(0,s.jsx)(n.code,{children:"webpack-merge"})}),". If it is a function, it will be called and receive ",(0,s.jsx)(n.code,{children:"config"})," as the first argument and an ",(0,s.jsx)(n.code,{children:"isServer"})," flag as the second argument."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["The API of ",(0,s.jsx)(n.code,{children:"configureWebpack"})," will be modified in the future to accept an object (",(0,s.jsx)(n.code,{children:"configureWebpack({config, isServer, utils, content})"}),")"]})}),"\n",(0,s.jsx)(n.h3,{id:"config",children:(0,s.jsx)(n.code,{children:"config"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," is called with ",(0,s.jsx)(n.code,{children:"config"})," generated according to client/server build. You may treat this as the base config to be merged with."]}),"\n",(0,s.jsx)(n.h3,{id:"isServer",children:(0,s.jsx)(n.code,{children:"isServer"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both in server build and in client build. The server build receives ",(0,s.jsx)(n.code,{children:"true"})," and the client build receives ",(0,s.jsx)(n.code,{children:"false"})," as ",(0,s.jsx)(n.code,{children:"isServer"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"utils",children:(0,s.jsx)(n.code,{children:"utils"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," also receives an util object:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getStyleLoaders(isServer: boolean, cssOptions: {[key: string]: any}): Loader[]"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getJSLoader(isServer: boolean, cacheOptions?: {}): Loader | null"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You may use them to return your webpack configuration conditionally."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below modify the webpack config to transpile ",(0,s.jsx)(n.code,{children:".foo"})," files."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n // highlight-start\n configureWebpack(config, isServer, utils) {\n const {getJSLoader} = utils;\n return {\n module: {\n rules: [\n {\n test: /\\.foo$/,\n use: [getJSLoader(isServer), 'my-custom-webpack-loader'],\n },\n ],\n },\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"content-1",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.h3,{id:"merge-strategy",children:"Merge strategy"}),"\n",(0,s.jsxs)(n.p,{children:["We merge the Webpack configuration parts of plugins into the global Webpack config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:"webpack-merge"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It is possible to specify the merge strategy. For example, if you want a webpack rule to be prepended instead of appended:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n mergeStrategy: {'module.rules': 'prepend'},\n module: {rules: [myRuleToPrepend]},\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Read the ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge#merging-with-strategies",children:"webpack-merge strategy doc"})," for more details."]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-dev-server",children:"Configuring dev server"}),"\n",(0,s.jsxs)(n.p,{children:["The dev server can be configured through returning a ",(0,s.jsx)(n.code,{children:"devServer"})," field."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n devServer: {\n open: '/docs', // Opens localhost:3000/docs instead of localhost:3000/\n },\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configurePostCss",children:(0,s.jsx)(n.code,{children:"configurePostCss(options)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies ",(0,s.jsxs)(n.a,{href:"https://webpack.js.org/loaders/postcss-loader/#postcssoptions",children:[(0,s.jsx)(n.code,{children:"postcssOptions"})," of ",(0,s.jsx)(n.code,{children:"postcss-loader"})]})," during the generation of the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["Should return the mutated ",(0,s.jsx)(n.code,{children:"postcssOptions"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["By default, ",(0,s.jsx)(n.code,{children:"postcssOptions"})," looks like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"const postcssOptions = {\n ident: 'postcss',\n plugins: [require('autoprefixer')],\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n configurePostCss(postcssOptions) {\n // Appends new PostCSS plugin.\n postcssOptions.plugins.push(require('postcss-import'));\n return postcssOptions;\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"postBuild",children:(0,s.jsx)(n.code,{children:"postBuild(props)"})}),"\n",(0,s.jsx)(n.p,{children:"Called when a (production) build finishes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"interface Props {\n siteDir: string;\n generatedFilesDir: string;\n siteConfig: DocusaurusConfig;\n outDir: string;\n baseUrl: string;\n headTags: string;\n preBodyTags: string;\n postBodyTags: string;\n routesPaths: string[];\n plugins: Plugin<any>[];\n content: Content;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async postBuild({siteConfig = {}, routesPaths = [], outDir}) {\n // Print out to console all the rendered routes.\n routesPaths.map((route) => {\n console.log(route);\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"injectHtmlTags",children:(0,s.jsx)(n.code,{children:"injectHtmlTags({content})"})}),"\n",(0,s.jsx)(n.p,{children:"Inject head and/or body HTML tags to Docusaurus generated HTML."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"injectHtmlTags"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"function injectHtmlTags(): {\n headTags?: HtmlTags;\n preBodyTags?: HtmlTags;\n postBodyTags?: HtmlTags;\n};\n\ntype HtmlTags = string | HtmlTagObject | (string | HtmlTagObject)[];\n\ntype HtmlTagObject = {\n /**\n * Attributes of the HTML tag\n * E.g. `{'disabled': true, 'value': 'demo', 'rel': 'preconnect'}`\n */\n attributes?: {\n [attributeName: string]: string | boolean;\n };\n /**\n * The tag name e.g. `div`, `script`, `link`, `meta`\n */\n tagName: string;\n /**\n * The inner HTML\n */\n innerHTML?: string;\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n loadContent: async () => {\n return {remoteHeadTags: await fetchHeadTagsFromAPI()};\n },\n // highlight-start\n injectHtmlTags({content}) {\n return {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'preconnect',\n href: 'https://www.github.com',\n },\n },\n ...content.remoteHeadTags,\n ],\n preBodyTags: [\n {\n tagName: 'script',\n attributes: {\n charset: 'utf-8',\n src: '/noflash.js',\n },\n },\n ],\n postBodyTags: [`<div> This is post body </div>`],\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Tags will be added as follows:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"headTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</head>"})," tag after scripts added by config."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"preBodyTags"})," will be inserted after the opening ",(0,s.jsx)(n.code,{children:"<body>"})," tag before any child elements."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"postBodyTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</body>"})," tag after all child elements."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules()"})}),"\n",(0,s.jsxs)(n.p,{children:["Returns an array of paths to the ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#client-modules",children:"client modules"})," that are to be imported into the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, to make your theme load a ",(0,s.jsx)(n.code,{children:"customCss"})," or ",(0,s.jsx)(n.code,{children:"customJs"})," file path from ",(0,s.jsx)(n.code,{children:"options"})," passed in by the user:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function (context, options) {\n const {customCss, customJs} = options || {};\n return {\n name: 'name-of-my-theme',\n // highlight-start\n getClientModules() {\n return [customCss, customJs];\n },\n // highlight-end\n };\n}\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var s=t(27378);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a272146.0fcf375c.js b/assets/js/7a272146.0fcf375c.js deleted file mode 100644 index 1e44d2651740..000000000000 --- a/assets/js/7a272146.0fcf375c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8496],{13149:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>r});var t=n(24246),o=n(71670);const a={sidebar_position:4},s="Static methods",d={id:"api/plugin-methods/static-methods",title:"Static methods",description:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.",source:"@site/docs/api/plugin-methods/static-methods.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/static-methods",permalink:"/docs/api/plugin-methods/static-methods",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"api",previous:{title:"I18n lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles"},next:{title:"Plugins overview",permalink:"/docs/api/plugins"}},l={},r=[{value:"<code>validateOptions({options, validate})</code>",id:"validateOptions",level:2},{value:"<code>options</code>",id:"options",level:3},{value:"<code>validate</code>",id:"validate",level:3},{value:"<code>validateThemeConfig({themeConfig, validate})</code>",id:"validateThemeConfig",level:2},{value:"<code>themeConfig</code>",id:"themeConfig",level:3},{value:"<code>validate</code>",id:"validate-1",level:3}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"static-methods",children:"Static methods"})}),"\n",(0,t.jsx)(i.p,{children:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance."}),"\n",(0,t.jsx)(i.h2,{id:"validateOptions",children:(0,t.jsx)(i.code,{children:"validateOptions({options, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Returns validated and normalized options for the plugin. This method is called before the plugin is initialized. You must return the options since they will be passed to the plugin during initialization."}),"\n",(0,t.jsx)(i.h3,{id:"options",children:(0,t.jsx)(i.code,{children:"options"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"options"})," passed to plugin for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and options as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of options."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options and return options in case of success."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-plugin/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateOptions({options, validate}) {\n const validatedOptions = validate(myValidationSchema, options);\n return validatedOptions;\n}\n// highlight-end\n"})}),"\n",(0,t.jsx)(i.h2,{id:"validateThemeConfig",children:(0,t.jsx)(i.code,{children:"validateThemeConfig({themeConfig, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Return validated and normalized configuration for the theme."}),"\n",(0,t.jsx)(i.h3,{id:"themeConfig",children:(0,t.jsx)(i.code,{children:"themeConfig"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"themeConfig"})," provided in ",(0,t.jsx)(i.code,{children:"docusaurus.config.js"})," for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate-1",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and ",(0,t.jsx)(i.code,{children:"themeConfig"})," as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of theme config."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateThemeConfig({themeConfig, validate}) {\n const validatedThemeConfig = validate(myValidationSchema, options);\n return validatedThemeConfig;\n}\n// highlight-end\n"})})]})}function h(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},71670:(e,i,n)=>{n.d(i,{Z:()=>d,a:()=>s});var t=n(27378);const o={},a=t.createContext(o);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a272146.601bb116.js b/assets/js/7a272146.601bb116.js new file mode 100644 index 000000000000..45378bcf174d --- /dev/null +++ b/assets/js/7a272146.601bb116.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8496],{13149:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>r});var t=n(24246),o=n(71670);const a={sidebar_position:4},s="Static methods",d={id:"api/plugin-methods/static-methods",title:"Static methods",description:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.",source:"@site/docs/api/plugin-methods/static-methods.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/static-methods",permalink:"/docs/api/plugin-methods/static-methods",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"api",previous:{title:"I18n lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles"},next:{title:"Plugins overview",permalink:"/docs/api/plugins"}},l={},r=[{value:"<code>validateOptions({options, validate})</code>",id:"validateOptions",level:2},{value:"<code>options</code>",id:"options",level:3},{value:"<code>validate</code>",id:"validate",level:3},{value:"<code>validateThemeConfig({themeConfig, validate})</code>",id:"validateThemeConfig",level:2},{value:"<code>themeConfig</code>",id:"themeConfig",level:3},{value:"<code>validate</code>",id:"validate-1",level:3}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"static-methods",children:"Static methods"})}),"\n",(0,t.jsx)(i.p,{children:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance."}),"\n",(0,t.jsx)(i.h2,{id:"validateOptions",children:(0,t.jsx)(i.code,{children:"validateOptions({options, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Returns validated and normalized options for the plugin. This method is called before the plugin is initialized. You must return the options since they will be passed to the plugin during initialization."}),"\n",(0,t.jsx)(i.h3,{id:"options",children:(0,t.jsx)(i.code,{children:"options"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"options"})," passed to plugin for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and options as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of options."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options and return options in case of success."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-plugin/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateOptions({options, validate}) {\n const validatedOptions = validate(myValidationSchema, options);\n return validatedOptions;\n}\n// highlight-end\n"})}),"\n",(0,t.jsx)(i.h2,{id:"validateThemeConfig",children:(0,t.jsx)(i.code,{children:"validateThemeConfig({themeConfig, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Return validated and normalized configuration for the theme."}),"\n",(0,t.jsx)(i.h3,{id:"themeConfig",children:(0,t.jsx)(i.code,{children:"themeConfig"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"themeConfig"})," provided in ",(0,t.jsx)(i.code,{children:"docusaurus.config.js"})," for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate-1",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and ",(0,t.jsx)(i.code,{children:"themeConfig"})," as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of theme config."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateThemeConfig({themeConfig, validate}) {\n const validatedThemeConfig = validate(myValidationSchema, options);\n return validatedThemeConfig;\n}\n// highlight-end\n"})})]})}function h(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},71670:(e,i,n)=>{n.d(i,{Z:()=>d,a:()=>s});var t=n(27378);const o={},a=t.createContext(o);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ada4fa6.614c8638.js b/assets/js/7ada4fa6.614c8638.js deleted file mode 100644 index 98a201232549..000000000000 --- a/assets/js/7ada4fa6.614c8638.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42606],{6698:(e,n,r)=>{r.d(n,{Z:()=>c});var s=r(24246),t=(r(27378),r(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},s=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),s.forEach((function(n){a(e,n,r[n])}))}return e}function d(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,s)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function c({children:e,minHeight:n,url:r="http://localhost:3000",style:a,bodyStyle:c}){return(0,s.jsxs)("div",{className:o.browserWindow,style:d(i({},a),{minHeight:n}),children:[(0,s.jsxs)("div",{className:o.browserWindowHeader,children:[(0,s.jsxs)("div",{className:o.buttons,children:[(0,s.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(o.browserWindowAddressBar,"text--truncate"),children:r}),(0,s.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar})]})})]}),(0,s.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},87064:(e,n,r)=>{r.d(n,{Z:()=>s});const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},64522:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>l});var s=r(24246),t=r(71670),o=r(6698);const a={id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},i="Markdown Features",d={id:"guides/markdown-features/introduction",title:"Markdown Features",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",source:"@site/docs/guides/markdown-features/markdown-features-intro.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features",permalink:"/docs/markdown-features",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},sidebar:"docs",previous:{title:"Blog",permalink:"/docs/blog"},next:{title:"MDX and React",permalink:"/docs/markdown-features/react"}},c={},l=[{value:"MDX vs. CommonMark",id:"mdx-vs-commonmark",level:2},{value:"Standard features",id:"standard-features",level:2},{value:"Front matter",id:"front-matter",level:2},{value:"Quotes",id:"quotes",level:2},{value:"Details",id:"details",level:2}];function u(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"markdown-features",children:"Markdown Features"})}),"\n","\n",(0,s.jsxs)(n.p,{children:["Docusaurus uses ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://commonmark.org/",children:"Markdown"})})," as its main content authoring format."]}),"\n",(0,s.jsx)(n.admonition,{title:"Learn Markdown",type:"tip",children:(0,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"https://commonmark.org/help/",children:"learn Markdown in 10 minutes"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus uses modern tooling to help you create ",(0,s.jsx)(n.strong,{children:"interactive documentation"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"})})," compiler transforms ",(0,s.jsx)(n.strong,{children:"Markdown files to React components"}),", and allows you to use JSX in your Markdown content. This enables you to easily interleave React components within your content, and create delightful learning experiences."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Use the MDX Playground",type:"tip",children:[(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," is your new best friend!"]}),(0,s.jsx)(n.p,{children:"It is a very helpful debugging tool that shows how the MDX compiler transforms Markdown to React."}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Options"}),": select the right format (MDX or CommonMark) and the following plugins Docusaurus uses: ",(0,s.jsx)(n.code,{children:"remark-gfm"}),", ",(0,s.jsx)(n.code,{children:"remark-directive"}),", ",(0,s.jsx)(n.code,{children:"rehype-raw"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"mdx-vs-commonmark",children:"MDX vs. CommonMark"}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus compiles both ",(0,s.jsx)(n.code,{children:".md"})," and ",(0,s.jsx)(n.code,{children:".mdx"})," files to React components using the MDX compiler, but ",(0,s.jsx)(n.strong,{children:"the syntax can be interpreted differently"})," depending on your settings."]}),"\n",(0,s.jsxs)(n.p,{children:["The MDX compiler supports ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/packages/mdx/#optionsformat",children:"2 formats"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/",children:"MDX format"}),": a powerful parser allowing the usage of JSX"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark format"}),": a standard-compliant Markdown parser that does not allow the usage of JSX"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["By default, ",(0,s.jsx)(n.strong,{children:"Docusaurus v3 uses the MDX format for all files"})," (including ",(0,s.jsx)(n.code,{children:".md"})," files) for historical reasons."]}),"\n",(0,s.jsxs)(n.p,{children:["It is possible to ",(0,s.jsx)(n.strong,{children:"opt-in for CommonMark"})," using the ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(n.code,{children:"siteConfig.markdown.format"})})," setting or the ",(0,s.jsx)(n.code,{children:"format: md"})," front matter."]}),"\n",(0,s.jsxs)(n.admonition,{title:"how to use CommonMark",type:"tip",children:[(0,s.jsxs)(n.p,{children:["If you plan to use CommonMark, we recommend the ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(n.code,{children:"siteConfig.markdown.format: 'detect'"})})," setting. The appropriate format will be selected automatically, based on file extensions:"]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:".md"})," files will use the CommonMark format"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:".mdx"})," files will use the MDX format"]}),"\n"]})]}),"\n",(0,s.jsx)(n.admonition,{title:"Experimental CommonMark support",type:"danger",children:(0,s.jsxs)(n.p,{children:["The CommonMark support is ",(0,s.jsx)(n.strong,{children:"experimental"})," and currently has a few ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})}),"\n",(0,s.jsx)(n.h2,{id:"standard-features",children:"Standard features"}),"\n",(0,s.jsx)(n.p,{children:"Markdown is a syntax that enables you to write formatted content in a readable syntax."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"### My Doc Section\n\nHello world message with some **bold** text, some _italic_ text, and a [link](/)\n\n![img alt](/img/docusaurus.png)\n"})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"My Doc Section"}),(0,s.jsxs)(n.p,{children:["Hello world message with some ",(0,s.jsx)(n.strong,{children:"bold"})," text, some ",(0,s.jsx)(n.em,{children:"italic"})," text and a ",(0,s.jsx)(n.a,{href:"/",children:"link"})]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"img alt",src:r(87064).Z+"",width:"200",height:"200"})})]}),"\n",(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Markdown is declarative"}),(0,s.jsxs)(n.p,{children:["Some may assume a 1-1 correlation between Markdown and HTML, e.g., ",(0,s.jsx)(n.code,{children:"![Preview](/img/docusaurus.png)"})," will always become ",(0,s.jsx)(n.code,{children:'<img src="/img/docusaurus.png" alt="Preview" />'}),", as-is. However, ",(0,s.jsx)(n.em,{children:"that is not the case"}),"."]}),(0,s.jsxs)(n.p,{children:["The Markdown syntax ",(0,s.jsx)(n.code,{children:"![message](url)"})," only declaratively tells Docusaurus that an image needs to be inserted here, but we may do other things like transforming a ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/assets#images",children:"file path to URL path"}),", so the generated markup may differ from the output of other Markdown renderers, or a na\xefve hand-transcription to the equivalent JSX/HTML code."]}),(0,s.jsxs)(n.p,{children:["In general, you should only assume the ",(0,s.jsx)(n.em,{children:"semantics"})," of the markup (",(0,s.jsx)(n.code,{children:"```"})," fences become ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/code-blocks",children:"code blocks"}),"; ",(0,s.jsx)(n.code,{children:">"})," becomes ",(0,s.jsx)(n.a,{href:"#quotes",children:"quotes"}),", etc.), but not the actual compiled output."]})]}),"\n",(0,s.jsx)(n.h2,{id:"front-matter",children:"Front matter"}),"\n",(0,s.jsx)(n.p,{children:"Front matter is used to add metadata to your Markdown file. All content plugins have their own front matter schema, and use the front matter to enrich the default metadata inferred from the content or other configuration."}),"\n",(0,s.jsxs)(n.p,{children:["Front matter is provided at the very top of the file, enclosed by three dashes ",(0,s.jsx)(n.code,{children:"---"}),". The content is parsed as ",(0,s.jsx)(n.a,{href:"https://yaml.org/spec/1.2.2/",children:"YAML"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\ntitle: My Doc Title\nmore_data:\n - Can be provided\n - as: objects\n or: arrays\n---\n"})}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"The API documentation of each official plugin lists the supported attributes:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"Docs front matter"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#markdown-front-matter",children:"Blog front matter"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#markdown-front-matter",children:"Pages front matter"})}),"\n"]})]}),"\n",(0,s.jsxs)(n.admonition,{title:"enhance your front matter",type:"tip",children:[(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsxs)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:["Markdown config ",(0,s.jsx)(n.code,{children:"parseFrontMatter"})," function"]})," to provide your own front matter parser, or to enhance the default parser."]}),(0,s.jsx)(n.p,{children:"It is possible to reuse the default parser to wrap it with your own custom proprietary logic. This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"quotes",children:"Quotes"}),"\n",(0,s.jsx)(n.p,{children:"Markdown quotes are beautifully styled:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"> Easy to maintain open source documentation websites.\n>\n> \u2014 Docusaurus\n"})}),"\n",(0,s.jsx)(o.Z,{children:(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Easy to maintain open source documentation websites."}),"\n",(0,s.jsx)(n.p,{children:"\u2014 Docusaurus"}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"details",children:"Details"}),"\n",(0,s.jsxs)(n.p,{children:["Markdown can embed HTML elements, and ",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details",children:(0,s.jsx)(n.code,{children:"details"})})," HTML elements are beautifully styled:"]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'### Details element example\n\n<details>\n <summary>Toggle me!</summary>\n\n This is the detailed content\n\n ```js\n console.log("Markdown features including the code block are available");\n ```\n\n You can use Markdown here including **bold** and _italic_ text, and [inline link](https://docusaurus.io)\n <details>\n <summary>Nested toggle! Some surprise inside...</summary>\n\n \ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\n </details>\n</details>\n'})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"Details element example"}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Toggle me!"}),(0,s.jsx)(n.p,{children:"This is the detailed content"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'console.log("Markdown features including the code block are available");\n'})}),(0,s.jsxs)(n.p,{children:["You can use Markdown here including ",(0,s.jsx)(n.strong,{children:"bold"})," and ",(0,s.jsx)(n.em,{children:"italic"})," text, and ",(0,s.jsx)(n.a,{href:"https://docusaurus.io",children:"inline link"})]}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Nested toggle! Some surprise inside..."}),(0,s.jsx)(n.p,{children:"\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32"})]})]})]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You may want to keep your ",(0,s.jsx)(n.code,{children:"<summary>"})," on a single line. Keep in mind that ",(0,s.jsxs)(n.a,{href:"https://mdxjs.com/migrating/v2/#jsx",children:["MDX creates extra HTML ",(0,s.jsx)(n.code,{children:"<p>"})," paragraphs for line breaks."]}),". When in doubt, use the ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})," to troubleshoot ",(0,s.jsx)(n.code,{children:"<details>"})," rendering problems."]})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(27378);const t={},o=s.createContext(t);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ada4fa6.d96eb120.js b/assets/js/7ada4fa6.d96eb120.js new file mode 100644 index 000000000000..a0acbbfc0b6a --- /dev/null +++ b/assets/js/7ada4fa6.d96eb120.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42606],{6698:(e,n,r)=>{r.d(n,{Z:()=>c});var s=r(24246),t=(r(27378),r(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},s=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),s.forEach((function(n){a(e,n,r[n])}))}return e}function d(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,s)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function c({children:e,minHeight:n,url:r="http://localhost:3000",style:a,bodyStyle:c}){return(0,s.jsxs)("div",{className:o.browserWindow,style:d(i({},a),{minHeight:n}),children:[(0,s.jsxs)("div",{className:o.browserWindowHeader,children:[(0,s.jsxs)("div",{className:o.buttons,children:[(0,s.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(o.browserWindowAddressBar,"text--truncate"),children:r}),(0,s.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar})]})})]}),(0,s.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},87064:(e,n,r)=>{r.d(n,{Z:()=>s});const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},64522:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>l});var s=r(24246),t=r(71670),o=r(6698);const a={id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},i="Markdown Features",d={id:"guides/markdown-features/introduction",title:"Markdown Features",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",source:"@site/docs/guides/markdown-features/markdown-features-intro.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features",permalink:"/docs/markdown-features",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},sidebar:"docs",previous:{title:"Blog",permalink:"/docs/blog"},next:{title:"MDX and React",permalink:"/docs/markdown-features/react"}},c={},l=[{value:"MDX vs. CommonMark",id:"mdx-vs-commonmark",level:2},{value:"Standard features",id:"standard-features",level:2},{value:"Front matter",id:"front-matter",level:2},{value:"Quotes",id:"quotes",level:2},{value:"Details",id:"details",level:2}];function u(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"markdown-features",children:"Markdown Features"})}),"\n","\n",(0,s.jsxs)(n.p,{children:["Docusaurus uses ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://commonmark.org/",children:"Markdown"})})," as its main content authoring format."]}),"\n",(0,s.jsx)(n.admonition,{title:"Learn Markdown",type:"tip",children:(0,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"https://commonmark.org/help/",children:"learn Markdown in 10 minutes"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus uses modern tooling to help you create ",(0,s.jsx)(n.strong,{children:"interactive documentation"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"})})," compiler transforms ",(0,s.jsx)(n.strong,{children:"Markdown files to React components"}),", and allows you to use JSX in your Markdown content. This enables you to easily interleave React components within your content, and create delightful learning experiences."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Use the MDX Playground",type:"tip",children:[(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," is your new best friend!"]}),(0,s.jsx)(n.p,{children:"It is a very helpful debugging tool that shows how the MDX compiler transforms Markdown to React."}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Options"}),": select the right format (MDX or CommonMark) and the following plugins Docusaurus uses: ",(0,s.jsx)(n.code,{children:"remark-gfm"}),", ",(0,s.jsx)(n.code,{children:"remark-directive"}),", ",(0,s.jsx)(n.code,{children:"rehype-raw"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"mdx-vs-commonmark",children:"MDX vs. CommonMark"}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus compiles both ",(0,s.jsx)(n.code,{children:".md"})," and ",(0,s.jsx)(n.code,{children:".mdx"})," files to React components using the MDX compiler, but ",(0,s.jsx)(n.strong,{children:"the syntax can be interpreted differently"})," depending on your settings."]}),"\n",(0,s.jsxs)(n.p,{children:["The MDX compiler supports ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/packages/mdx/#optionsformat",children:"2 formats"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/",children:"MDX format"}),": a powerful parser allowing the usage of JSX"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark format"}),": a standard-compliant Markdown parser that does not allow the usage of JSX"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["By default, ",(0,s.jsx)(n.strong,{children:"Docusaurus v3 uses the MDX format for all files"})," (including ",(0,s.jsx)(n.code,{children:".md"})," files) for historical reasons."]}),"\n",(0,s.jsxs)(n.p,{children:["It is possible to ",(0,s.jsx)(n.strong,{children:"opt-in for CommonMark"})," using the ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(n.code,{children:"siteConfig.markdown.format"})})," setting or the ",(0,s.jsx)(n.code,{children:"format: md"})," front matter."]}),"\n",(0,s.jsxs)(n.admonition,{title:"how to use CommonMark",type:"tip",children:[(0,s.jsxs)(n.p,{children:["If you plan to use CommonMark, we recommend the ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(n.code,{children:"siteConfig.markdown.format: 'detect'"})})," setting. The appropriate format will be selected automatically, based on file extensions:"]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:".md"})," files will use the CommonMark format"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:".mdx"})," files will use the MDX format"]}),"\n"]})]}),"\n",(0,s.jsx)(n.admonition,{title:"Experimental CommonMark support",type:"danger",children:(0,s.jsxs)(n.p,{children:["The CommonMark support is ",(0,s.jsx)(n.strong,{children:"experimental"})," and currently has a few ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})}),"\n",(0,s.jsx)(n.h2,{id:"standard-features",children:"Standard features"}),"\n",(0,s.jsx)(n.p,{children:"Markdown is a syntax that enables you to write formatted content in a readable syntax."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"### My Doc Section\n\nHello world message with some **bold** text, some _italic_ text, and a [link](/)\n\n![img alt](/img/docusaurus.png)\n"})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"My Doc Section"}),(0,s.jsxs)(n.p,{children:["Hello world message with some ",(0,s.jsx)(n.strong,{children:"bold"})," text, some ",(0,s.jsx)(n.em,{children:"italic"})," text and a ",(0,s.jsx)(n.a,{href:"/",children:"link"})]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"img alt",src:r(87064).Z+"",width:"200",height:"200"})})]}),"\n",(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Markdown is declarative"}),(0,s.jsxs)(n.p,{children:["Some may assume a 1-1 correlation between Markdown and HTML, e.g., ",(0,s.jsx)(n.code,{children:"![Preview](/img/docusaurus.png)"})," will always become ",(0,s.jsx)(n.code,{children:'<img src="/img/docusaurus.png" alt="Preview" />'}),", as-is. However, ",(0,s.jsx)(n.em,{children:"that is not the case"}),"."]}),(0,s.jsxs)(n.p,{children:["The Markdown syntax ",(0,s.jsx)(n.code,{children:"![message](url)"})," only declaratively tells Docusaurus that an image needs to be inserted here, but we may do other things like transforming a ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/assets#images",children:"file path to URL path"}),", so the generated markup may differ from the output of other Markdown renderers, or a na\xefve hand-transcription to the equivalent JSX/HTML code."]}),(0,s.jsxs)(n.p,{children:["In general, you should only assume the ",(0,s.jsx)(n.em,{children:"semantics"})," of the markup (",(0,s.jsx)(n.code,{children:"```"})," fences become ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/code-blocks",children:"code blocks"}),"; ",(0,s.jsx)(n.code,{children:">"})," becomes ",(0,s.jsx)(n.a,{href:"#quotes",children:"quotes"}),", etc.), but not the actual compiled output."]})]}),"\n",(0,s.jsx)(n.h2,{id:"front-matter",children:"Front matter"}),"\n",(0,s.jsx)(n.p,{children:"Front matter is used to add metadata to your Markdown file. All content plugins have their own front matter schema, and use the front matter to enrich the default metadata inferred from the content or other configuration."}),"\n",(0,s.jsxs)(n.p,{children:["Front matter is provided at the very top of the file, enclosed by three dashes ",(0,s.jsx)(n.code,{children:"---"}),". The content is parsed as ",(0,s.jsx)(n.a,{href:"https://yaml.org/spec/1.2.2/",children:"YAML"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\ntitle: My Doc Title\nmore_data:\n - Can be provided\n - as: objects\n or: arrays\n---\n"})}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"The API documentation of each official plugin lists the supported attributes:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"Docs front matter"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#markdown-front-matter",children:"Blog front matter"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#markdown-front-matter",children:"Pages front matter"})}),"\n"]})]}),"\n",(0,s.jsxs)(n.admonition,{title:"enhance your front matter",type:"tip",children:[(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsxs)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:["Markdown config ",(0,s.jsx)(n.code,{children:"parseFrontMatter"})," function"]})," to provide your own front matter parser, or to enhance the default parser."]}),(0,s.jsx)(n.p,{children:"It is possible to reuse the default parser to wrap it with your own custom proprietary logic. This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"quotes",children:"Quotes"}),"\n",(0,s.jsx)(n.p,{children:"Markdown quotes are beautifully styled:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"> Easy to maintain open source documentation websites.\n>\n> \u2014 Docusaurus\n"})}),"\n",(0,s.jsx)(o.Z,{children:(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Easy to maintain open source documentation websites."}),"\n",(0,s.jsx)(n.p,{children:"\u2014 Docusaurus"}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"details",children:"Details"}),"\n",(0,s.jsxs)(n.p,{children:["Markdown can embed HTML elements, and ",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details",children:(0,s.jsx)(n.code,{children:"details"})})," HTML elements are beautifully styled:"]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'### Details element example\n\n<details>\n <summary>Toggle me!</summary>\n\n This is the detailed content\n\n ```js\n console.log("Markdown features including the code block are available");\n ```\n\n You can use Markdown here including **bold** and _italic_ text, and [inline link](https://docusaurus.io)\n <details>\n <summary>Nested toggle! Some surprise inside...</summary>\n\n \ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\n </details>\n</details>\n'})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"Details element example"}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Toggle me!"}),(0,s.jsx)(n.p,{children:"This is the detailed content"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'console.log("Markdown features including the code block are available");\n'})}),(0,s.jsxs)(n.p,{children:["You can use Markdown here including ",(0,s.jsx)(n.strong,{children:"bold"})," and ",(0,s.jsx)(n.em,{children:"italic"})," text, and ",(0,s.jsx)(n.a,{href:"https://docusaurus.io",children:"inline link"})]}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Nested toggle! Some surprise inside..."}),(0,s.jsx)(n.p,{children:"\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32"})]})]})]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You may want to keep your ",(0,s.jsx)(n.code,{children:"<summary>"})," on a single line. Keep in mind that ",(0,s.jsxs)(n.a,{href:"https://mdxjs.com/migrating/v2/#jsx",children:["MDX creates extra HTML ",(0,s.jsx)(n.code,{children:"<p>"})," paragraphs for line breaks."]}),". When in doubt, use the ",(0,s.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})," to troubleshoot ",(0,s.jsx)(n.code,{children:"<details>"})," rendering problems."]})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(27378);const t={},o=s.createContext(t);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d1ac6e6.0b3154cd.js b/assets/js/7d1ac6e6.0b3154cd.js new file mode 100644 index 000000000000..7874400693ec --- /dev/null +++ b/assets/js/7d1ac6e6.0b3154cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76062],{26468:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=r(24246),n=r(71670);const a={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,i={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},u={authorsImageUrls:[void 0]},c=[{value:"Docusaurus 2 (D2)",id:"docusaurus-2-d2",level:2},{value:"GitHub Activity",id:"github-activity",level:2},{value:"Notable Users",id:"notable-users",level:2},{value:"Media",id:"media",level:2},{value:"Community",id:"community",level:2},{value:"Looking Ahead",id:"looking-ahead",level:2}];function h(e){const t={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]}),"\n",(0,s.jsx)(t.h2,{id:"docusaurus-2-d2",children:"Docusaurus 2 (D2)"}),"\n",(0,s.jsxs)(t.p,{children:["In 2018, we proposed to rebuild ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/789",children:"Docusaurus from the ground up"}),". It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"@endilie"}),", our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over."]}),"\n",(0,s.jsxs)(t.p,{children:["D2's killer features are ",(0,s.jsx)(t.strong,{children:"Dark Mode"})," and its ",(0,s.jsx)(t.strong,{children:"superb performance"}),". D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc."]}),"\n",(0,s.jsxs)(t.p,{children:["Last but not least, we implemented a plugins architecture and turned the repo into a ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages",children:"Lerna monorepo"}),". We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases."]}),"\n",(0,s.jsx)(t.h2,{id:"github-activity",children:"GitHub Activity"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Stars: 10050 \u2192 14632 (+45.6% y/y)"}),"\n",(0,s.jsx)(t.li,{children:"Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors"}),"\n",(0,s.jsx)(t.li,{children:"Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November"}),"\n",(0,s.jsx)(t.li,{children:"D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub"}),"\n",(0,s.jsx)(t.li,{children:"We now have 4 active core contributors! (+100% y/y)"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"notable-users",children:"Notable Users"}),"\n",(0,s.jsx)(t.p,{children:"A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://create-react-app.dev/",children:"Create React App"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://redux.js.org/",children:"Redux"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://draftjs.org/",children:"Draft.js"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"http://facebook.github.io/flux/",children:"Flux"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"And welcomed more projects to Docusaurus 1:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://developers.libra.org/",children:"Libra"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://mobx.js.org/",children:"MobX"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://immerjs.github.io/immer/",children:"Immer"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://sorbet.org/",children:"Sorbet"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"media",children:"Media"}),"\n",(0,s.jsxs)(t.p,{children:["Yangshun gave a classroom session during F8 about ",(0,s.jsx)(t.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"Using Docusaurus to Create Open Source Websites"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,s.jsx)(t.p,{children:"A few third-party hosting/development services also has first-class integration with a Docusaurus setup:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/vercel/vercel/tree/main/examples/docusaurus",children:"Vercel deployment"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://codesandbox.io/s/docusaurus-template-x3vg9",children:"CodeSandbox"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"looking-ahead",children:"Looking Ahead"}),"\n",(0,s.jsxs)(t.p,{children:["D2 has gained some traction among the ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/showcase",children:"developer community"}),". In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!"]}),"\n",(0,s.jsxs)(t.p,{children:["Huge thanks to the community for their contributions, especially the core team - ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/wgao19",children:"Wei Gao"}),". Lastly, thank you ",(0,s.jsx)(t.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for starting Docusaurus and supporting the project all this time."]}),"\n",(0,s.jsx)(t.p,{children:"Cheers to a great 2020! \ud83c\udf89"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>i,a:()=>o});var s=r(27378);const n={},a=s.createContext(n);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d1ac6e6.b2da6763.js b/assets/js/7d1ac6e6.b2da6763.js deleted file mode 100644 index 9f4af81944d9..000000000000 --- a/assets/js/7d1ac6e6.b2da6763.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76062],{26468:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=r(24246),n=r(71670);const a={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,i={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{inline:!1,label:"Recap",permalink:"/blog/tags/recap",description:"Blog posts about Docusaurus' year recaps"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",page:{permalink:"/blog/authors/yangshun"},socials:{x:"https://x.com/yangshunz",github:"https://github.com/yangshun"},imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},u={authorsImageUrls:[void 0]},c=[{value:"Docusaurus 2 (D2)",id:"docusaurus-2-d2",level:2},{value:"GitHub Activity",id:"github-activity",level:2},{value:"Notable Users",id:"notable-users",level:2},{value:"Media",id:"media",level:2},{value:"Community",id:"community",level:2},{value:"Looking Ahead",id:"looking-ahead",level:2}];function h(e){const t={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]}),"\n",(0,s.jsx)(t.h2,{id:"docusaurus-2-d2",children:"Docusaurus 2 (D2)"}),"\n",(0,s.jsxs)(t.p,{children:["In 2018, we proposed to rebuild ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/789",children:"Docusaurus from the ground up"}),". It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"@endilie"}),", our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over."]}),"\n",(0,s.jsxs)(t.p,{children:["D2's killer features are ",(0,s.jsx)(t.strong,{children:"Dark Mode"})," and its ",(0,s.jsx)(t.strong,{children:"superb performance"}),". D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc."]}),"\n",(0,s.jsxs)(t.p,{children:["Last but not least, we implemented a plugins architecture and turned the repo into a ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages",children:"Lerna monorepo"}),". We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases."]}),"\n",(0,s.jsx)(t.h2,{id:"github-activity",children:"GitHub Activity"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Stars: 10050 \u2192 14632 (+45.6% y/y)"}),"\n",(0,s.jsx)(t.li,{children:"Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors"}),"\n",(0,s.jsx)(t.li,{children:"Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November"}),"\n",(0,s.jsx)(t.li,{children:"D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub"}),"\n",(0,s.jsx)(t.li,{children:"We now have 4 active core contributors! (+100% y/y)"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"notable-users",children:"Notable Users"}),"\n",(0,s.jsx)(t.p,{children:"A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://create-react-app.dev/",children:"Create React App"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://redux.js.org/",children:"Redux"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://draftjs.org/",children:"Draft.js"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"http://facebook.github.io/flux/",children:"Flux"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"And welcomed more projects to Docusaurus 1:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://developers.libra.org/",children:"Libra"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://mobx.js.org/",children:"MobX"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://immerjs.github.io/immer/",children:"Immer"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://sorbet.org/",children:"Sorbet"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"media",children:"Media"}),"\n",(0,s.jsxs)(t.p,{children:["Yangshun gave a classroom session during F8 about ",(0,s.jsx)(t.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"Using Docusaurus to Create Open Source Websites"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,s.jsx)(t.p,{children:"A few third-party hosting/development services also has first-class integration with a Docusaurus setup:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/vercel/vercel/tree/main/examples/docusaurus",children:"Vercel deployment"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://codesandbox.io/s/docusaurus-template-x3vg9",children:"CodeSandbox"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"looking-ahead",children:"Looking Ahead"}),"\n",(0,s.jsxs)(t.p,{children:["D2 has gained some traction among the ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/showcase",children:"developer community"}),". In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!"]}),"\n",(0,s.jsxs)(t.p,{children:["Huge thanks to the community for their contributions, especially the core team - ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/wgao19",children:"Wei Gao"}),". Lastly, thank you ",(0,s.jsx)(t.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for starting Docusaurus and supporting the project all this time."]}),"\n",(0,s.jsx)(t.p,{children:"Cheers to a great 2020! \ud83c\udf89"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>i,a:()=>o});var s=r(27378);const n={},a=s.createContext(n);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f3dfa04.024d4113.js b/assets/js/7f3dfa04.024d4113.js new file mode 100644 index 000000000000..d1643a300de4 --- /dev/null +++ b/assets/js/7f3dfa04.024d4113.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5136],{54729:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png"},49554:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png"},89955:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png"},6226:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png"},98233:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png"},97386:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png"},20269:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>a,toc:()=>d});var i=o(24246),s=o(71670);const n={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},r=void 0,a={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{inline:!1,label:"Profilo",permalink:"/blog/tags/profilo"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://x.com/abernathyca",socials:{x:"https://x.com/abernathyca"},imageURL:"https://github.com/caabernathy.png",key:"abernathyca",page:null}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},l={authorsImageUrls:[void 0]},d=[{value:"Overview of Steps Taken",id:"overview-of-steps-taken",level:2},{value:"Design",id:"design",level:2},{value:"Final Thoughts",id:"final-thoughts",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["This is the story of the rather short journey it took to create the ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,i.jsxs)(t.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,i.jsx)(t.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]}),"\n",(0,i.jsx)(t.p,{children:"In general, when creating a website with Docusaurus you do the following:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Generate a template website using Docusaurus scripts."}),"\n",(0,i.jsx)(t.li,{children:"Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links)."}),"\n",(0,i.jsxs)(t.li,{children:["Create the website content:","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Add your docs and any supporting assets."}),"\n",(0,i.jsx)(t.li,{children:"Customize the default landing page provided by Docusaurus to suit your needs."}),"\n",(0,i.jsx)(t.li,{children:"Configure the default site navigation file."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Publish the website and set up how it will be published for future changes."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus."}),"\n",(0,i.jsx)(t.h2,{id:"overview-of-steps-taken",children:"Overview of Steps Taken"}),"\n",(0,i.jsx)(t.p,{children:"Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Design and colors:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Got all the desired logo formats from designer. I had to create the ",(0,i.jsx)(t.em,{children:".favicon"})," one."]}),"\n",(0,i.jsxs)(t.li,{children:["Worked out some passable primary and secondary website colors using the ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"http://paletton.com/"})," tools - very handy!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Initial website setup:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Forked the ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/",children:"Profilo project"})," on GitHub and created a local clone of the fork to set up the website."]}),"\n",(0,i.jsxs)(t.li,{children:["Created the initial Docusaurus website using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation instructions"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Deleted the ",(0,i.jsx)(t.code,{children:"docs-examples-from-docusaurus"})," and ",(0,i.jsx)(t.code,{children:"website/blog-examples-from-docusaurus"})," folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Content creation:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added metadata to the existing Markdown files found in the ",(0,i.jsx)(t.code,{children:"docs"})," folder, for example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-md",children:"---\nid: architecture\ntitle: Architecture\nsidebar_label: Architecture\n---\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added the logo assets to the ",(0,i.jsx)(t.code,{children:"website/static/img"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/pages/en/index.js"}),", the landing page, to highlight Profilo features."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/core/Footer.js"}),", the footer, to simplify it for Profilo."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Edited ",(0,i.jsx)(t.code,{children:"website/siteConfig.js"})," (website configuration file) to specify the previously chosen primary and secondary colors."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/sidebars.json"})," that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Tested the website locally throughout this phase. (I ran ",(0,i.jsx)(t.code,{children:"yarn start"})," from the ",(0,i.jsx)(t.code,{children:"website"})," folder to start the server.)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Feedback and review changes:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Sent a ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/6",children:"pull request"})," to the project."]}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD)."}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors and updated the PR."}),"\n",(0,i.jsxs)(t.li,{children:["The PR was then accepted and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad",children:"merged"}),". Yay!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Website publishing:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Pushed the first website version by running the Docusaurus publish script from the command line:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"USE_SSH=true \\\n GIT_USER=caabernathy \\\n CURRENT_BRANCH=master \\\n yarn run publish-gh-pages\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Configured CircleCI using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration",children:"provided Docusaurus instructions"}),". There were 2 PRs for this, ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/8",children:"the first"}),"for the initial config and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/12",children:"the second"})," to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!)."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["The final website was published on ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"https://facebookincubator.github.io/profilo/"}),". It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website."]}),"\n",(0,i.jsx)(t.h2,{id:"design",children:"Design"}),"\n",(0,i.jsx)(t.p,{children:"Here's what the initial website looked like when the first pull request was sent out:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar",src:o(97386).Z+"",width:"1090",height:"919"})}),"\n",(0,i.jsx)(t.p,{children:"Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade",src:o(89955).Z+"",width:"1090",height:"624"})}),"\n",(0,i.jsxs)(t.p,{children:["I then took the RGB representation of the color and set it as the baseline color on ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"Paletton"}),". The website then gave me various color options to try on the website by editing the Docusaurus website configuration file."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Using Paletton to generate a full palette from the red shade selected. There's a color wheel showing all hues on the left, and a square showing various shades of red on the right.",src:o(49554).Z+"",width:"1012",height:"632"})}),"\n",(0,i.jsx)(t.p,{children:"The selected primary and secondary colors were a good jumping off point for designer feedback."}),"\n",(0,i.jsx)(t.p,{children:"There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features."}),"\n",(0,i.jsx)(t.p,{children:"Here's what the final website looked like:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.",src:o(6226).Z+"",width:"1141",height:"865"})}),"\n",(0,i.jsx)(t.p,{children:"This is an example page showing the core content, in this case the Getting Started page:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code",src:o(98233).Z+"",width:"1221",height:"733"})}),"\n",(0,i.jsxs)(t.p,{children:["This also shows the sidebar structure that was set up through editing ",(0,i.jsx)(t.code,{children:"website/sidebars.json"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.",src:o(54729).Z+"",width:"1064",height:"940"})}),"\n",(0,i.jsx)(t.h2,{id:"final-thoughts",children:"Final Thoughts"}),"\n",(0,i.jsx)(t.p,{children:"The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated."}),"\n",(0,i.jsx)(t.p,{children:"The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."})]})}function c(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>r});var i=o(27378);const s={},n=i.createContext(s);function r(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f3dfa04.98d62f8c.js b/assets/js/7f3dfa04.98d62f8c.js deleted file mode 100644 index 210797d09016..000000000000 --- a/assets/js/7f3dfa04.98d62f8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5136],{54729:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png"},49554:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png"},89955:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png"},6226:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png"},98233:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png"},97386:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png"},20269:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>a,toc:()=>d});var i=o(24246),s=o(71670);const n={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},r=void 0,a={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{inline:!1,label:"Profilo",permalink:"/blog/tags/profilo"},{inline:!1,label:"Adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://x.com/abernathyca",socials:{x:"https://x.com/abernathyca"},imageURL:"https://github.com/caabernathy.png",key:"abernathyca",page:null}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",authors:["abernathyca"],tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},l={authorsImageUrls:[void 0]},d=[{value:"Overview of Steps Taken",id:"overview-of-steps-taken",level:2},{value:"Design",id:"design",level:2},{value:"Final Thoughts",id:"final-thoughts",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["This is the story of the rather short journey it took to create the ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,i.jsxs)(t.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,i.jsx)(t.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]}),"\n",(0,i.jsx)(t.p,{children:"In general, when creating a website with Docusaurus you do the following:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Generate a template website using Docusaurus scripts."}),"\n",(0,i.jsx)(t.li,{children:"Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links)."}),"\n",(0,i.jsxs)(t.li,{children:["Create the website content:","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Add your docs and any supporting assets."}),"\n",(0,i.jsx)(t.li,{children:"Customize the default landing page provided by Docusaurus to suit your needs."}),"\n",(0,i.jsx)(t.li,{children:"Configure the default site navigation file."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Publish the website and set up how it will be published for future changes."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus."}),"\n",(0,i.jsx)(t.h2,{id:"overview-of-steps-taken",children:"Overview of Steps Taken"}),"\n",(0,i.jsx)(t.p,{children:"Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Design and colors:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Got all the desired logo formats from designer. I had to create the ",(0,i.jsx)(t.em,{children:".favicon"})," one."]}),"\n",(0,i.jsxs)(t.li,{children:["Worked out some passable primary and secondary website colors using the ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"http://paletton.com/"})," tools - very handy!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Initial website setup:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Forked the ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/",children:"Profilo project"})," on GitHub and created a local clone of the fork to set up the website."]}),"\n",(0,i.jsxs)(t.li,{children:["Created the initial Docusaurus website using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation instructions"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Deleted the ",(0,i.jsx)(t.code,{children:"docs-examples-from-docusaurus"})," and ",(0,i.jsx)(t.code,{children:"website/blog-examples-from-docusaurus"})," folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Content creation:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added metadata to the existing Markdown files found in the ",(0,i.jsx)(t.code,{children:"docs"})," folder, for example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-md",children:"---\nid: architecture\ntitle: Architecture\nsidebar_label: Architecture\n---\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added the logo assets to the ",(0,i.jsx)(t.code,{children:"website/static/img"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/pages/en/index.js"}),", the landing page, to highlight Profilo features."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/core/Footer.js"}),", the footer, to simplify it for Profilo."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Edited ",(0,i.jsx)(t.code,{children:"website/siteConfig.js"})," (website configuration file) to specify the previously chosen primary and secondary colors."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/sidebars.json"})," that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Tested the website locally throughout this phase. (I ran ",(0,i.jsx)(t.code,{children:"yarn start"})," from the ",(0,i.jsx)(t.code,{children:"website"})," folder to start the server.)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Feedback and review changes:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Sent a ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/6",children:"pull request"})," to the project."]}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD)."}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors and updated the PR."}),"\n",(0,i.jsxs)(t.li,{children:["The PR was then accepted and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad",children:"merged"}),". Yay!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Website publishing:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Pushed the first website version by running the Docusaurus publish script from the command line:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"USE_SSH=true \\\n GIT_USER=caabernathy \\\n CURRENT_BRANCH=master \\\n yarn run publish-gh-pages\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Configured CircleCI using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration",children:"provided Docusaurus instructions"}),". There were 2 PRs for this, ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/8",children:"the first"}),"for the initial config and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/12",children:"the second"})," to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!)."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["The final website was published on ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"https://facebookincubator.github.io/profilo/"}),". It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website."]}),"\n",(0,i.jsx)(t.h2,{id:"design",children:"Design"}),"\n",(0,i.jsx)(t.p,{children:"Here's what the initial website looked like when the first pull request was sent out:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar",src:o(97386).Z+"",width:"1090",height:"919"})}),"\n",(0,i.jsx)(t.p,{children:"Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade",src:o(89955).Z+"",width:"1090",height:"624"})}),"\n",(0,i.jsxs)(t.p,{children:["I then took the RGB representation of the color and set it as the baseline color on ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"Paletton"}),". The website then gave me various color options to try on the website by editing the Docusaurus website configuration file."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Using Paletton to generate a full palette from the red shade selected. There's a color wheel showing all hues on the left, and a square showing various shades of red on the right.",src:o(49554).Z+"",width:"1012",height:"632"})}),"\n",(0,i.jsx)(t.p,{children:"The selected primary and secondary colors were a good jumping off point for designer feedback."}),"\n",(0,i.jsx)(t.p,{children:"There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features."}),"\n",(0,i.jsx)(t.p,{children:"Here's what the final website looked like:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.",src:o(6226).Z+"",width:"1141",height:"865"})}),"\n",(0,i.jsx)(t.p,{children:"This is an example page showing the core content, in this case the Getting Started page:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code",src:o(98233).Z+"",width:"1221",height:"733"})}),"\n",(0,i.jsxs)(t.p,{children:["This also shows the sidebar structure that was set up through editing ",(0,i.jsx)(t.code,{children:"website/sidebars.json"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.",src:o(54729).Z+"",width:"1064",height:"940"})}),"\n",(0,i.jsx)(t.h2,{id:"final-thoughts",children:"Final Thoughts"}),"\n",(0,i.jsx)(t.p,{children:"The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated."}),"\n",(0,i.jsx)(t.p,{children:"The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."})]})}function c(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>r});var i=o(27378);const s={},n=i.createContext(s);function r(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7fdd8ddf.1cbdb978.js b/assets/js/7fdd8ddf.a2c064f2.js similarity index 63% rename from assets/js/7fdd8ddf.1cbdb978.js rename to assets/js/7fdd8ddf.a2c064f2.js index 496822e16043..39b943f1bde7 100644 --- a/assets/js/7fdd8ddf.1cbdb978.js +++ b/assets/js/7fdd8ddf.a2c064f2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76581],{61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>N});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),l=n(3620),i=n(44479),a=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function p(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return p(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,l.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,a._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[c,l]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[a,u]=j({queryString:n,groupId:r}),[h,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),p=(()=>{const e=null!=a?a:h;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{p&&l(p)}),[p]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:o,tabValues:l}){const i=[],{blockElementScrollPositionUntilNextRender:a}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=i.indexOf(t),s=l[r].value;s!==n&&(a(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[i.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:l.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function T({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=f(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(k,v({},t,e)),(0,r.jsx)(T,v({},t,e))]})}function N(e){const t=(0,y.Z)();return(0,r.jsx)(P,w(v({},e),{children:p(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:i(l({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ze});var r={};n.r(r),n.d(r,{ButtonExample:()=>_});var o=n(24246),s=n(27378),c=n(40624),l=n(29088),i=n(32711),a=n(36712),u=n(4423),d=n(94544),h=n(30691),b=n(78844),p=n(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){f(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(j.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function T(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function P(){const e=(0,l.Z)();return(0,o.jsx)(i.uz,{className:j.playgroundEditor},String(e))}function N(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const S=e=>`${e};`;function E(e){var t,{children:n,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=c,a=g();var d;const h=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(i.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:S,theme:a},s),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(T,{}),(0,o.jsx)(N,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(N,{}),(0,o.jsx)(T,{})]})}))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){D(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,o.jsx)("button",B(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const I=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:s},s,r);var Z,$,A=n(89583),H=n(6324),W=n.n(H);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const V=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),M=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(F);function X(e,t){const n=e.map((e=>{const{start:n,end:r}=q[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&M.test(s)){const e=s.match(M).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],t);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],t);case"html":return X(["js","jsBlock","html"],t);case"python":case"py":case"bash":return X(["bash"],t);case"markdown":case"md":return X(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return X(["tex"],t);case"lua":case"haskell":case"sql":return X(["lua"],t);case"wasm":return X(["wasm"],t);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],t);case"vbnet":return X(["vbnet","rem"],t);case"batch":return X(["rem"],t);case"basic":return X(["rem","f90"],t);case"fsharp":return X(["js","ml"],t);case"ocaml":case"sml":return X(["ml"],t);case"fortran":return X(["f90"],t);case"cobol":return X(["cobol"],t);default:return X(G,t)}}(r,o),l=n.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<l.length;){const e=l[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?i[a[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),l.splice(b,1)}n=l.join("\n");const h={};return Object.entries(i).forEach((([e,{range:t}])=>{W()(t).forEach((t=>{var n;null!==(n=(Z=h)[$=t])&&void 0!==n||(Z[$]=[]),h[t].push(e)}))})),{lineClassNames:h,code:n}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=n(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=r({line:e,className:(0,c.Z)(t,n&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},l),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=n(34370);function pe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){pe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,s.useState)(!1),l=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),l.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ke(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Te={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Te.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Te.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ne({children:e,className:t="",metastring:n,title:r,showLineNumbers:l,language:i}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,p.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,l),(0,s.useEffect)((()=>{l()}),[e,l]),(0,s.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(V))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:f,code:y}=Q(e,{metastring:n,language:h,magicComments:u}),O=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,h&&!t.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:b,code:y,language:null!=h?h:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:f[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Pe,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Se(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function De(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const _e=(Le=function(e){var{children:t}=e,n=De(e,["children"]);const r=(0,l.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?Ne:re;return(0,o.jsx)(i,Ee(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Se(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(E,Be({scope:I},e)):(0,o.jsx)(Le,Be({},e))});var Le;function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(e){return(0,o.jsx)(_e,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ie(e,t,n[t])}))}return e}({},e))}},417:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),s=n(38112),c=n(6698),l=n(97555),i=n(61132);const a={},u="Code block tests",d={type:"mdx",permalink:"/tests/pages/code-block-tests",source:"@site/_dogfooding/_pages tests/code-block-tests.mdx",title:"Code block tests",description:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.",frontMatter:{},lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx",unlisted:!1},h={},b=[{value:"Code block prism language tests",id:"code-block-prism-language-tests",level:2},{value:"<code>pre</code>",id:"pre",level:2},{value:"<code>pre > string</code>",id:"pre--string",level:3},{value:"<code>pre > string[]</code>",id:"pre--string-1",level:3},{value:"<code>pre > element</code>",id:"pre--element",level:3},{value:"<code>pre > element[]</code>",id:"pre--element-1",level:3},{value:"<code>pre > code > element</code>",id:"pre--code--element",level:3},{value:"<code>code</code>",id:"code",level:2},{value:"<code>code > string</code>",id:"code--string",level:3},{value:"<code>code > string[]</code>",id:"code--string-1",level:3},{value:"<code>code > element</code>",id:"code--element",level:3},{value:"<code>code > element[]</code>",id:"code--element-1",level:3},{value:"<code>CodeBlock</code>",id:"codeblock",level:2},{value:"<code>CodeBlock > string</code>",id:"codeblock--string",level:3},{value:"<code>CodeBlock > string[]</code>",id:"codeblock--string-1",level:3},{value:"<code>CodeBlock > element</code>",id:"codeblock--element",level:3},{value:"<code>CodeBlock > element[]</code>",id:"codeblock--element-1",level:3},{value:"Code blocks with line numbering tests",id:"code-blocks-with-line-numbering-tests",level:2},{value:"Code block wrapping tests",id:"code-block-wrapping-tests",level:2},{value:"Magic comments tests",id:"magic-comments-tests",level:2},{value:"HTML - script + style highlighting",id:"html---script--style-highlighting",level:2},{value:"Empty code blocks edge cases",id:"empty-code-blocks-edge-cases",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"code-block-tests",children:"Code block tests"})}),"\n",(0,r.jsx)(t.admonition,{title:"legacy test page - MDX v1",type:"danger",children:(0,r.jsx)(t.p,{children:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1."})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/1584",children:"https://github.com/facebook/docusaurus/pull/1584"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/3749",children:"https://github.com/facebook/docusaurus/pull/3749"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/6177",children:"https://github.com/facebook/docusaurus/pull/6177"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"code-block-prism-language-tests",children:"Code block prism language tests"}),"\n",(0,r.jsxs)(t.p,{children:["Code block with/without the good prism language case(lower or upper) in ",(0,r.jsx)(t.code,{children:"additionalLanguages[]"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-php",metastring:'title="php"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-PHP",metastring:'title="PHP"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-pHp",metastring:'title="pHp"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9183",children:"https://github.com/facebook/docusaurus/pull/9183"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"pre",children:(0,r.jsx)(t.code,{children:"pre"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string",children:(0,r.jsx)(t.code,{children:"pre > string"})}),"\n",(0,r.jsxs)(t.p,{children:["Multi-line text inside ",(0,r.jsx)(t.code,{children:"pre"})," will turn into one-liner, but it's okay (",(0,r.jsx)(t.a,{href:"https://github.com/mdx-js/mdx/issues/1095",children:"https://github.com/mdx-js/mdx/issues/1095"}),")"]}),"\n",(0,r.jsx)("pre",{children:"1 2 3"}),"\n","\n",(0,r.jsx)("pre",{children:(0,r.jsx)(t.p,{children:"1\n2\n3"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string-1",children:(0,r.jsx)(t.code,{children:"pre > string[]"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsxs)(t.p,{children:["1","\n","2","\n","3","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element",children:(0,r.jsx)(t.code,{children:"pre > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element-1",children:(0,r.jsx)(t.code,{children:"pre > element[]"})}),"\n",(0,r.jsxs)("pre",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"',"\n","\n",(0,r.jsx)("strong",{children:"Output: "}),"3","\n","\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab\n',(0,r.jsx)("strong",{children:"cdabcdab"}),'cd", at which time b is a substring.',"\n"]})]}),"\n",(0,r.jsx)(t.h3,{id:"pre--code--element",children:(0,r.jsx)(t.code,{children:"pre > code > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)("code",{children:(0,r.jsx)("b",{children:"Hey bro"})})}),"\n",(0,r.jsx)(t.h2,{id:"code",children:(0,r.jsx)(t.code,{children:"code"})}),"\n",(0,r.jsx)(t.h3,{id:"code--string",children:(0,r.jsx)(t.code,{children:"code > string"})}),"\n",(0,r.jsx)("code",{children:"1 2 3"}),"\n",(0,r.jsx)("code",{children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"code--string-1",children:(0,r.jsx)(t.code,{children:"code > string[]"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsxs)(t.p,{children:["link:"," \n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"code--element",children:(0,r.jsx)(t.code,{children:"code > element"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"code--element-1",children:(0,r.jsx)(t.code,{children:"code > element[]"})}),"\n",(0,r.jsxs)("code",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"codeblock",children:(0,r.jsx)(t.code,{children:"CodeBlock"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string",children:(0,r.jsx)(t.code,{children:"CodeBlock > string"})}),"\n",(0,r.jsx)(s.Z,{children:"1 2 3"}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > string[]"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsxs)(t.p,{children:["link:","\n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element",children:(0,r.jsx)(t.code,{children:"CodeBlock > element"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > element[]"})}),"\n",(0,r.jsxs)(s.Z,{className:"language-yaml",title:"test",children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"code-blocks-with-line-numbering-tests",children:"Code blocks with line numbering tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"{1,3,6} showLineNumbers",children:"function PageLayout(props) {\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"code-block-wrapping-tests",children:"Code block wrapping tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'mkdir this_is_a_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_string_to_test_code_block_wrapping\necho "this is a long string made up of many separate words that should be broken between words when possible"\ncurl https://docusaurus.io/tests/pages/code-block-tests\n'})}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"short-tab-1",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "hi"\n'})})}),(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo this will test whether a long string that is initially hidden will have the option to wrap when made visible\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab-2",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"rm short_initially_hidden_string\n"})})})]}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo medium_length_string_will_have_the_option_to_wrap_after_window_resized_while_it_is_hidden\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "short_initially_hidden_string"\n'})})})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\nexport default function MyReactPage() {\n return (\n <Layout>\n <h1>My React page</h1>\n <p>\n This is a React page. Let's make this sentence bit long. Some more words\n to make sure... Some more words to make sure... Some more words to make\n sure...\n </p>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"magic-comments-tests",children:"Magic comments tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-lua",metastring:'title="lua_sum.lua"',children:"function sum(n)\n -- highlight-next-line\n local result = 0\n for i = 1, n do\n -- highlight-start\n result = result + i\n end\n -- highlight-end\n print(result)\nend\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-wasm",metastring:'title="sum_webAssembly.wasm"',children:'(module\n ;; highlight-next-line\n (func $add (param $a i32) (param $b i32) (result i32)\n local.get $a\n ;; highlight-start\n local.get $b\n i32.add)\n ;; highlight-end\n (export "add" (func $add)))\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-sql",metastring:'title="sql_query.sql"',children:"-- highlight-start\nSELECT *\nFROM orders\n-- highlight-end\nWHERE customer_id IN (\n SELECT customer_id\n -- highlight-next-line\n FROM customers\n WHERE country = 'USA'\n)\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\n\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-latex",metastring:'title="latex.tex"',children:"\\begin{document}\n\t\\section{Triangles}\n\t% highlight-next-line\n\t\\subsection{Pythagoras' Theorem}\n\tPythagoras's theorem is:\n\t% highlight-start\n\t\\begin{equation}\n\t\tc^2 = a^2 + b^2\n\t\\end{equation}\n\t% highlight-end\n\\end{document}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vba",metastring:'title="vba.vb"',children:"Function Factorial(ByVal n As Long) As Long\n If n < 0 Then\n Err.Raise 5 ' Invalid argument\n End If\n 'highlight-next-line\n Factorial = 1 ' return value\n Dim i As Long\n ' highlight-start\n For i = 2 To n\n Factorial = Factorial * i\n Next\n ' highlight-end\nEnd Function\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vbnet",metastring:'title="vbnet.vb"',children:'\' highlight-next-line\nDim languages As New HashSet(Of String) From {\n "C#",\n "Visual Basic",\n _ \' highlight-start\n "F#",\n "PowerShell",\n "TypeScript"\n _\' highlight-end\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-batch",metastring:'title="cmd.bat"',children:"rem highlight-start\n@echo off\nsetlocal\nRem highlight-end\nipconfig\nREM highlight-next-line\necho Docusaurus is awesome\nnetstat\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fortran",metastring:'title="fortran.f90"',children:'! highlight-start\nprogram hello\n! highlight-end\n implicit none\n ! highlight-next-line\n print *, "Hello, World!"\nend program hello\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cobol",metastring:'title="cobol.cob"',children:'*> highlight-start\nIDENTIFICATION DIVISION.\nPROGRAM-ID. HELLO.\n*> highlight-end\nPROCEDURE DIVISION.\n *> highlight-next-line\n DISPLAY "Hello, World!".\nEND PROGRAM HELLO.\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fsharp",metastring:'title="fsharp.fsx"',children:'(* highlight-start *)\n[<EntryPoint>]\n(* highlight-end *)\nlet main _ =\n // highlight-next-line\n printfn "Hello, World!"\n 0\n'})}),"\n",(0,r.jsx)(t.h2,{id:"html---script--style-highlighting",children:"HTML - script + style highlighting"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9517",children:"https://github.com/facebook/docusaurus/issues/9517"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-html",children:"<html lang=\"en\">\n <head>\n <script>\n const name = 'Formidable';\n console.log(name);\n <\/script>\n <style>\n .some-class {\n border: solid red thick;\n }\n </style>\n </head>\n</html>\n"})}),"\n",(0,r.jsx)(t.h2,{id:"empty-code-blocks-edge-cases",children:"Empty code blocks edge cases"}),"\n",(0,r.jsx)(t.p,{children:"Empty inline code block: ``"}),"\n",(0,r.jsxs)(t.p,{children:["Single space inline code block: ",(0,r.jsx)(t.code,{children:" "})]}),"\n",(0,r.jsx)(t.p,{children:"Empty code block"}),"\n","\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 1 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 2 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty live code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:"live",live:!0})})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76581],{61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>N});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),l=n(3620),i=n(44479),a=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function p(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return p(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,l.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,a._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[c,l]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[a,u]=j({queryString:n,groupId:r}),[h,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),p=(()=>{const e=null!=a?a:h;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{p&&l(p)}),[p]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:o,tabValues:l}){const i=[],{blockElementScrollPositionUntilNextRender:a}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=i.indexOf(t),s=l[r].value;s!==n&&(a(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[i.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:l.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function T({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,s.Z)("margin-top--md",e.props.className)}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=f(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(k,v({},t,e)),(0,r.jsx)(T,v({},t,e))]})}function N(e){const t=(0,y.Z)();return(0,r.jsx)(P,w(v({},e),{children:p(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:i(l({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ze});var r={};n.r(r),n.d(r,{ButtonExample:()=>_});var o=n(24246),s=n(27378),c=n(40624),l=n(29088),i=n(32711),a=n(36712),u=n(4423),d=n(94544),h=n(30691),b=n(78844),p=n(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){f(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(j.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function T(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function P(){const e=(0,l.Z)();return(0,o.jsx)(i.uz,{className:j.playgroundEditor},String(e))}function N(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const S=e=>`${e};`;function E(e){var t,{children:n,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=c,a=g();var d;const h=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(i.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:S,theme:a},s),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(T,{}),(0,o.jsx)(N,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(N,{}),(0,o.jsx)(T,{})]})}))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){D(e,t,n[t])}))}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,o.jsx)("button",C(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const I=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:s},s,r);var Z,$,A=n(89583),H=n(6324),W=n.n(H);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(F);function X(e,t){const n=e.map((e=>{const{start:n,end:r}=q[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],t);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],t);case"html":return X(["js","jsBlock","html"],t);case"python":case"py":case"bash":return X(["bash"],t);case"markdown":case"md":return X(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return X(["tex"],t);case"lua":case"haskell":case"sql":return X(["lua"],t);case"wasm":return X(["wasm"],t);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],t);case"vbnet":return X(["vbnet","rem"],t);case"batch":return X(["rem"],t);case"basic":return X(["rem","f90"],t);case"fsharp":return X(["js","ml"],t);case"ocaml":case"sml":return X(["ml"],t);case"fortran":return X(["f90"],t);case"cobol":return X(["cobol"],t);default:return X(G,t)}}(r,o),l=n.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<l.length;){const e=l[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?i[a[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),l.splice(b,1)}n=l.join("\n");const h={};return Object.entries(i).forEach((([e,{range:t}])=>{W()(t).forEach((t=>{var n;null!==(n=(Z=h)[$=t])&&void 0!==n||(Z[$]=[]),h[t].push(e)}))})),{lineClassNames:h,code:n}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=n(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=r({line:e,className:(0,c.Z)(t,n&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e})),t)));return(0,o.jsxs)("span",de(ue({},l),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=n(34370);function pe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){pe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,s.useState)(!1),l=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),l.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ke(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Te={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Te.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Te.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ne({children:e,className:t="",metastring:n,title:r,showLineNumbers:l,language:i}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,p.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,l),(0,s.useEffect)((()=>{l()}),[e,l]),(0,s.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:f,code:y}=Q(e,{metastring:n,language:h,magicComments:u}),O=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,h&&!t.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:b,code:y,language:null!=h?h:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:f[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Pe,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Se(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function De(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const _e=(Le=function(e){var{children:t}=e,n=De(e,["children"]);const r=(0,l.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?Ne:re;return(0,o.jsx)(i,Ee(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Se(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(E,Ce({scope:I},e)):(0,o.jsx)(Le,Ce({},e))});var Le;function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(e){return(0,o.jsx)(_e,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ie(e,t,n[t])}))}return e}({},e))}},417:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),s=n(38112),c=n(6698),l=n(97555),i=n(61132);const a={},u="Code block tests",d={type:"mdx",permalink:"/tests/pages/code-block-tests",source:"@site/_dogfooding/_pages tests/code-block-tests.mdx",title:"Code block tests",description:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.",frontMatter:{},lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx",unlisted:!1},h={},b=[{value:"Code block prism language tests",id:"code-block-prism-language-tests",level:2},{value:"<code>pre</code>",id:"pre",level:2},{value:"<code>pre > string</code>",id:"pre--string",level:3},{value:"<code>pre > string[]</code>",id:"pre--string-1",level:3},{value:"<code>pre > element</code>",id:"pre--element",level:3},{value:"<code>pre > element[]</code>",id:"pre--element-1",level:3},{value:"<code>pre > code > element</code>",id:"pre--code--element",level:3},{value:"<code>code</code>",id:"code",level:2},{value:"<code>code > string</code>",id:"code--string",level:3},{value:"<code>code > string[]</code>",id:"code--string-1",level:3},{value:"<code>code > element</code>",id:"code--element",level:3},{value:"<code>code > element[]</code>",id:"code--element-1",level:3},{value:"<code>CodeBlock</code>",id:"codeblock",level:2},{value:"<code>CodeBlock > string</code>",id:"codeblock--string",level:3},{value:"<code>CodeBlock > string[]</code>",id:"codeblock--string-1",level:3},{value:"<code>CodeBlock > element</code>",id:"codeblock--element",level:3},{value:"<code>CodeBlock > element[]</code>",id:"codeblock--element-1",level:3},{value:"Code blocks with line numbering tests",id:"code-blocks-with-line-numbering-tests",level:2},{value:"Code block wrapping tests",id:"code-block-wrapping-tests",level:2},{value:"Magic comments tests",id:"magic-comments-tests",level:2},{value:"HTML - script + style highlighting",id:"html---script--style-highlighting",level:2},{value:"Empty code blocks edge cases",id:"empty-code-blocks-edge-cases",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"code-block-tests",children:"Code block tests"})}),"\n",(0,r.jsx)(t.admonition,{title:"legacy test page - MDX v1",type:"danger",children:(0,r.jsx)(t.p,{children:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1."})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/1584",children:"https://github.com/facebook/docusaurus/pull/1584"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/3749",children:"https://github.com/facebook/docusaurus/pull/3749"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/6177",children:"https://github.com/facebook/docusaurus/pull/6177"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"code-block-prism-language-tests",children:"Code block prism language tests"}),"\n",(0,r.jsxs)(t.p,{children:["Code block with/without the good prism language case(lower or upper) in ",(0,r.jsx)(t.code,{children:"additionalLanguages[]"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-php",metastring:'title="php"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-PHP",metastring:'title="PHP"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-pHp",metastring:'title="pHp"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9183",children:"https://github.com/facebook/docusaurus/pull/9183"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"pre",children:(0,r.jsx)(t.code,{children:"pre"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string",children:(0,r.jsx)(t.code,{children:"pre > string"})}),"\n",(0,r.jsxs)(t.p,{children:["Multi-line text inside ",(0,r.jsx)(t.code,{children:"pre"})," will turn into one-liner, but it's okay (",(0,r.jsx)(t.a,{href:"https://github.com/mdx-js/mdx/issues/1095",children:"https://github.com/mdx-js/mdx/issues/1095"}),")"]}),"\n",(0,r.jsx)("pre",{children:"1 2 3"}),"\n","\n",(0,r.jsx)("pre",{children:(0,r.jsx)(t.p,{children:"1\n2\n3"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string-1",children:(0,r.jsx)(t.code,{children:"pre > string[]"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsxs)(t.p,{children:["1","\n","2","\n","3","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element",children:(0,r.jsx)(t.code,{children:"pre > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element-1",children:(0,r.jsx)(t.code,{children:"pre > element[]"})}),"\n",(0,r.jsxs)("pre",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"',"\n","\n",(0,r.jsx)("strong",{children:"Output: "}),"3","\n","\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab\n',(0,r.jsx)("strong",{children:"cdabcdab"}),'cd", at which time b is a substring.',"\n"]})]}),"\n",(0,r.jsx)(t.h3,{id:"pre--code--element",children:(0,r.jsx)(t.code,{children:"pre > code > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)("code",{children:(0,r.jsx)("b",{children:"Hey bro"})})}),"\n",(0,r.jsx)(t.h2,{id:"code",children:(0,r.jsx)(t.code,{children:"code"})}),"\n",(0,r.jsx)(t.h3,{id:"code--string",children:(0,r.jsx)(t.code,{children:"code > string"})}),"\n",(0,r.jsx)("code",{children:"1 2 3"}),"\n",(0,r.jsx)("code",{children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"code--string-1",children:(0,r.jsx)(t.code,{children:"code > string[]"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsxs)(t.p,{children:["link:"," \n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"code--element",children:(0,r.jsx)(t.code,{children:"code > element"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"code--element-1",children:(0,r.jsx)(t.code,{children:"code > element[]"})}),"\n",(0,r.jsxs)("code",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"codeblock",children:(0,r.jsx)(t.code,{children:"CodeBlock"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string",children:(0,r.jsx)(t.code,{children:"CodeBlock > string"})}),"\n",(0,r.jsx)(s.Z,{children:"1 2 3"}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > string[]"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsxs)(t.p,{children:["link:","\n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element",children:(0,r.jsx)(t.code,{children:"CodeBlock > element"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > element[]"})}),"\n",(0,r.jsxs)(s.Z,{className:"language-yaml",title:"test",children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"code-blocks-with-line-numbering-tests",children:"Code blocks with line numbering tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"{1,3,6} showLineNumbers",children:"function PageLayout(props) {\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"code-block-wrapping-tests",children:"Code block wrapping tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'mkdir this_is_a_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_string_to_test_code_block_wrapping\necho "this is a long string made up of many separate words that should be broken between words when possible"\ncurl https://docusaurus.io/tests/pages/code-block-tests\n'})}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"short-tab-1",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "hi"\n'})})}),(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo this will test whether a long string that is initially hidden will have the option to wrap when made visible\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab-2",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"rm short_initially_hidden_string\n"})})})]}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo medium_length_string_will_have_the_option_to_wrap_after_window_resized_while_it_is_hidden\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "short_initially_hidden_string"\n'})})})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\nexport default function MyReactPage() {\n return (\n <Layout>\n <h1>My React page</h1>\n <p>\n This is a React page. Let's make this sentence bit long. Some more words\n to make sure... Some more words to make sure... Some more words to make\n sure...\n </p>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"magic-comments-tests",children:"Magic comments tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-lua",metastring:'title="lua_sum.lua"',children:"function sum(n)\n -- highlight-next-line\n local result = 0\n for i = 1, n do\n -- highlight-start\n result = result + i\n end\n -- highlight-end\n print(result)\nend\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-wasm",metastring:'title="sum_webAssembly.wasm"',children:'(module\n ;; highlight-next-line\n (func $add (param $a i32) (param $b i32) (result i32)\n local.get $a\n ;; highlight-start\n local.get $b\n i32.add)\n ;; highlight-end\n (export "add" (func $add)))\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-sql",metastring:'title="sql_query.sql"',children:"-- highlight-start\nSELECT *\nFROM orders\n-- highlight-end\nWHERE customer_id IN (\n SELECT customer_id\n -- highlight-next-line\n FROM customers\n WHERE country = 'USA'\n)\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\n\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-latex",metastring:'title="latex.tex"',children:"\\begin{document}\n\t\\section{Triangles}\n\t% highlight-next-line\n\t\\subsection{Pythagoras' Theorem}\n\tPythagoras's theorem is:\n\t% highlight-start\n\t\\begin{equation}\n\t\tc^2 = a^2 + b^2\n\t\\end{equation}\n\t% highlight-end\n\\end{document}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vba",metastring:'title="vba.vb"',children:"Function Factorial(ByVal n As Long) As Long\n If n < 0 Then\n Err.Raise 5 ' Invalid argument\n End If\n 'highlight-next-line\n Factorial = 1 ' return value\n Dim i As Long\n ' highlight-start\n For i = 2 To n\n Factorial = Factorial * i\n Next\n ' highlight-end\nEnd Function\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vbnet",metastring:'title="vbnet.vb"',children:'\' highlight-next-line\nDim languages As New HashSet(Of String) From {\n "C#",\n "Visual Basic",\n _ \' highlight-start\n "F#",\n "PowerShell",\n "TypeScript"\n _\' highlight-end\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-batch",metastring:'title="cmd.bat"',children:"rem highlight-start\n@echo off\nsetlocal\nRem highlight-end\nipconfig\nREM highlight-next-line\necho Docusaurus is awesome\nnetstat\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fortran",metastring:'title="fortran.f90"',children:'! highlight-start\nprogram hello\n! highlight-end\n implicit none\n ! highlight-next-line\n print *, "Hello, World!"\nend program hello\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cobol",metastring:'title="cobol.cob"',children:'*> highlight-start\nIDENTIFICATION DIVISION.\nPROGRAM-ID. HELLO.\n*> highlight-end\nPROCEDURE DIVISION.\n *> highlight-next-line\n DISPLAY "Hello, World!".\nEND PROGRAM HELLO.\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fsharp",metastring:'title="fsharp.fsx"',children:'(* highlight-start *)\n[<EntryPoint>]\n(* highlight-end *)\nlet main _ =\n // highlight-next-line\n printfn "Hello, World!"\n 0\n'})}),"\n",(0,r.jsx)(t.h2,{id:"html---script--style-highlighting",children:"HTML - script + style highlighting"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9517",children:"https://github.com/facebook/docusaurus/issues/9517"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-html",children:"<html lang=\"en\">\n <head>\n <script>\n const name = 'Formidable';\n console.log(name);\n <\/script>\n <style>\n .some-class {\n border: solid red thick;\n }\n </style>\n </head>\n</html>\n"})}),"\n",(0,r.jsx)(t.h2,{id:"empty-code-blocks-edge-cases",children:"Empty code blocks edge cases"}),"\n",(0,r.jsx)(t.p,{children:"Empty inline code block: ``"}),"\n",(0,r.jsxs)(t.p,{children:["Single space inline code block: ",(0,r.jsx)(t.code,{children:" "})]}),"\n",(0,r.jsx)(t.p,{children:"Empty code block"}),"\n","\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 1 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 2 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty live code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:"live",live:!0})})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/8075f6fd.8ce59098.js b/assets/js/8075f6fd.4bab1959.js similarity index 50% rename from assets/js/8075f6fd.8ce59098.js rename to assets/js/8075f6fd.4bab1959.js index 397b79e51af5..cf352320589a 100644 --- a/assets/js/8075f6fd.8ce59098.js +++ b/assets/js/8075f6fd.4bab1959.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99011],{66064:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},40097:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},50520:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670);const r={authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},o="Upgrading frontend dependencies with confidence",a={permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",source:"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",title:"Upgrading frontend dependencies with confidence",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",date:"2023-09-22T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:8.355,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723124811e3,lastUpdatedBy:"Ashiq Firoz",prevItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"},nextItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"}},c={image:s(66064).Z,authorsImageUrls:[void 0]},d=[];function u(e){const n={a:"a",img:"img",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Frontend developers often need to ",(0,t.jsx)(n.strong,{children:"upgrade npm dependencies"}),", but those upgrades can feel scary and lead to ",(0,t.jsx)(n.strong,{children:"subtle UI side effects"})," not caught by your regular test suite."]}),"\n",(0,t.jsxs)(n.p,{children:["Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. ",(0,t.jsx)(n.strong,{children:"Docusaurus v3 is around the corner"})," (currently in ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"beta"}),"), and we would like to help you do this upgrade with confidence."]}),"\n",(0,t.jsxs)(n.p,{children:["This article introduces a ",(0,t.jsx)(n.strong,{children:"visual regression testing"})," workflow based on ",(0,t.jsx)(n.a,{href:"https://github.com/features/actions",children:(0,t.jsx)(n.strong,{children:"GitHub Actions"})}),", ",(0,t.jsx)(n.a,{href:"https://playwright.dev/",children:(0,t.jsx)(n.strong,{children:"Playwright"})}),", and ",(0,t.jsx)(n.a,{href:"https://argos-ci.com/",children:(0,t.jsx)(n.strong,{children:"Argos"})}),". It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Upgrading frontend dependencies with confidence - social card",src:s(40097).Z+"",width:"1500",height:"785"})})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99011],{66064:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},40097:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},50520:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670);const r={authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},o="Upgrading frontend dependencies with confidence",a={permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",source:"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",title:"Upgrading frontend dependencies with confidence",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",date:"2023-09-22T00:00:00.000Z",tags:[{inline:!1,label:"Release",permalink:"/blog/tags/release",description:"Blog posts about Docusaurus' new releases"}],readingTime:8.355,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",page:{permalink:"/blog/authors/slorber"},description:"A freelance React and React-Native developer near Paris and Docusaurus maintainer. Also runs ThisWeekInReact.com, a newsletter to stay updated with the React ecosystem.\n",socials:{x:"https://x.com/sebastienlorber",linkedin:"https://www.linkedin.com/in/sebastienlorber/",github:"https://github.com/slorber",newsletter:"https://thisweekinreact.com"},imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1723131342e3,lastUpdatedBy:"Mohammad Bagher Abiyat",prevItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"},nextItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"}},c={image:s(66064).Z,authorsImageUrls:[void 0]},d=[];function u(e){const n={a:"a",img:"img",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Frontend developers often need to ",(0,t.jsx)(n.strong,{children:"upgrade npm dependencies"}),", but those upgrades can feel scary and lead to ",(0,t.jsx)(n.strong,{children:"subtle UI side effects"})," not caught by your regular test suite."]}),"\n",(0,t.jsxs)(n.p,{children:["Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. ",(0,t.jsx)(n.strong,{children:"Docusaurus v3 is around the corner"})," (currently in ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"beta"}),"), and we would like to help you do this upgrade with confidence."]}),"\n",(0,t.jsxs)(n.p,{children:["This article introduces a ",(0,t.jsx)(n.strong,{children:"visual regression testing"})," workflow based on ",(0,t.jsx)(n.a,{href:"https://github.com/features/actions",children:(0,t.jsx)(n.strong,{children:"GitHub Actions"})}),", ",(0,t.jsx)(n.a,{href:"https://playwright.dev/",children:(0,t.jsx)(n.strong,{children:"Playwright"})}),", and ",(0,t.jsx)(n.a,{href:"https://argos-ci.com/",children:(0,t.jsx)(n.strong,{children:"Argos"})}),". It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Upgrading frontend dependencies with confidence - social card",src:s(40097).Z+"",width:"1500",height:"785"})})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82425aa0.27bb2a57.js b/assets/js/82425aa0.27bb2a57.js new file mode 100644 index 000000000000..951340d6af6f --- /dev/null +++ b/assets/js/82425aa0.27bb2a57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62513],{49357:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},5444:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},8792:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=s(24246),r=s(71670);const o={slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},t="Upgrading to Docusaurus v3",a={id:"migration/v3",title:"Upgrading to Docusaurus v3",description:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.",source:"@site/docs/migration/v3.mdx",sourceDirName:"migration",slug:"/migration/v3",permalink:"/docs/migration/v3",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},sidebar:"docs",previous:{title:"Upgrading Docusaurus",permalink:"/docs/migration"},next:{title:"Overview",permalink:"/docs/migration/v2"}},d={},c=[{value:"Upgrading Dependencies",id:"upgrading-dependencies",level:2},{value:"Upgrading MDX",id:"upgrading-mdx",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"Other Markdown incompatibilities",id:"other-markdown-incompatibilities",level:3},{value:"Emphasis starting or ending with a space or a punctuation",id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Formatters",id:"formatters",level:3},{value:"Other Breaking Changes",id:"other-breaking-changes",level:2},{value:"Node.js v18.0",id:"nodejs-v180",level:3},{value:"React v18.0+",id:"react-v180",level:3},{value:"Prism-React-Renderer v2.0+",id:"prism-react-renderer-v20",level:3},{value:"React-Live v4.0+",id:"react-live-v40",level:3},{value:"remark-emoji v4.0+",id:"remark-emoji-v40",level:3},{value:"Mermaid v10.4+",id:"mermaid-v104",level:3},{value:"TypeScript v5.1+",id:"typescript-v51",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"New Config Loader",id:"new-config-loader",level:3},{value:"Admonition Warning",id:"admonition-warning",level:3},{value:"Versioned Sidebars",id:"versioned-sidebars",level:3},{value:"Blog Feed Limit",id:"blog-feed-limit",level:3},{value:"Docs Theme Refactoring",id:"docs-theme-refactoring",level:3},{value:"Optional Changes",id:"optional-changes",level:2},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"ESM and TypeScript Configs",id:"esm-and-typescript-configs",level:3},{value:"Using the <code>.mdx</code> extension",id:"using-the-mdx-extension",level:3},{value:"Upgrading math packages",id:"upgrading-math-packages",level:3},{value:"Turn off MDX v1 compat",id:"turn-off-mdx-v1-compat",level:3},{value:"<code>comments</code> option",id:"comments-option",level:4},{value:"<code>admonitions</code> option",id:"admonitions-option",level:4},{value:"<code>headingIds</code> option",id:"headingids-option",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Code:o,Details:t}=n;return o||u("Code",!0),t||u("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"upgrading-to-docusaurus-v3",children:"Upgrading to Docusaurus v3"})}),"\n",(0,i.jsx)(n.p,{children:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3."}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 is a new ",(0,i.jsx)(n.strong,{children:"major version"}),", including ",(0,i.jsx)(n.strong,{children:"breaking changes"})," requiring you to adjust your site accordingly. We will guide to during this process, and also mention a few optional recommendations."]}),"\n",(0,i.jsx)(n.p,{children:"This is not a full rewrite, and the breaking changes are relatively easy to handle. The simplest sites will eventually upgrade by simply updating their npm dependencies."}),"\n",(0,i.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,i.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,i.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,i.jsx)(n.strong,{children:"more strictly"})," and with ",(0,i.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Before upgrading",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Before upgrading, we recommend ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:(0,i.jsx)(n.strong,{children:"preparing your site for Docusaurus v3"})}),". There are changes that you can already ",(0,i.jsx)(n.strong,{children:"handle incrementally, under Docusaurus v2"}),". Doing so will help reduce the work needed to finally upgrade to Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["For complex sites, we also recommend to set up ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:(0,i.jsx)(n.strong,{children:"visual regression tests"})}),", a good way to ensure your site stays visually identical. Docusaurus v3 mainly upgrades dependencies, and is not expected to produce any visual changes."]})]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Check the release notes for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,i.jsx)(n.strong,{children:"Docusaurus v3.0.0"})}),", and browse the pull-requests for additional useful information and the motivation behind each change mentioned here."]})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-dependencies",children:"Upgrading Dependencies"}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading to Docusaurus v3 requires upgrading core Docusaurus dependencies (",(0,i.jsx)(n.code,{children:"@docusaurus/name"}),"), but also other related packages."]}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 now uses the following dependencies:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Node.js v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"React v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"MDX v3.0+"}),"\n",(0,i.jsx)(n.li,{children:"TypeScript v5.1+"}),"\n",(0,i.jsx)(n.li,{children:"prism-react-renderer v2.0+"}),"\n",(0,i.jsx)(n.li,{children:"react-live v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"remark-emoji v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"mermaid v10.4+"}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Upgrading community plugins",type:"warning",children:[(0,i.jsx)(n.p,{children:"If your site uses third-party community plugins and themes, you might need to upgrade them."}),(0,i.jsx)(n.p,{children:"Make sure those plugins are compatible with Docusaurus v3 before attempting an upgrade."})]}),"\n",(0,i.jsxs)(n.p,{children:["A typical ",(0,i.jsx)(n.code,{children:"package.json"})," dependency upgrade example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,i.jsx)(n.p,{children:"For TypeScript users:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n // swap the external TypeScript config package for the new official one\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n // upgrade React types to v18.0+\n- "@types/react": "^17.0.69",\n+ "@types/react": "^18.2.29",\n // upgrade TypeScript to v5.1+\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-mdx",children:"Upgrading MDX"}),"\n",(0,i.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,i.jsx)(n.code,{children:".md"})," and ",(0,i.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,i.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,i.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release."]}),"\n",(0,i.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,i.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Find problematic content ahead of time",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Run ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," on your site to get a list of files that will now fail to compile under Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["This command is also a good way to estimate the amount of work to be done to make your content compatible. Remember most of this work can be executed ahead of the upgrade by ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"preparing your content for Docusaurus v3"}),"."]})]}),"\n",(0,i.jsxs)(n.p,{children:["Other documents might also ",(0,i.jsx)(n.strong,{children:"render differently"}),"."]}),"\n",(0,i.jsx)(n.admonition,{title:"Use visual regression tests",type:"tip",children:(0,i.jsxs)(n.p,{children:["For large sites where a manual review of all pages is complicated, we recommend you to setup ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,i.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,i.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,i.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,i.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"MDX"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(5444).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,i.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v2."}),"\n",(0,i.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,i.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,i.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,i.jsxs)(n.p,{children:["We provide a ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command on your site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,i.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(49357).Z+"",width:"1161",height:"417"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.p,{children:["This CLI is a best effort, and will ",(0,i.jsx)(n.strong,{children:"only report compilation errors"}),"."]}),(0,i.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus cannot document exhaustively all the changes coming with MDX. That's the responsibility of the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"MDX v3"})," migration guides."]}),"\n",(0,i.jsx)(n.p,{children:"However, by upgrading a few Docusaurus sites, we noticed that most of the issues come down to only a few cases that we have documented for you."}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"{"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,i.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,i.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"<"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"<"})," or ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\<"})]}),"\n"]})]}),"\n",(0,i.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus supports ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,i.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,i.jsx)(n.code,{children:"<"})," and ",(0,i.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,i.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,i.jsxs)(n.p,{children:["For users providing a ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,i.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,i.jsx)(n.code,{children:"h1"})," only gets used for ",(0,i.jsx)(n.code,{children:"# hi"})," but not for ",(0,i.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,i.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,i.jsxs)(n.p,{children:["Your ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,i.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,i.jsx)(n.strong,{children:"lower-case"}),": ",(0,i.jsx)(n.code,{children:"p"}),", ",(0,i.jsx)(n.code,{children:"h1"}),", ",(0,i.jsx)(n.code,{children:"img"}),", ",(0,i.jsx)(n.code,{children:"a"}),"..."]}),(0,i.jsxs)(n.p,{children:["For any other element, ",(0,i.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,i.jsxs)(n.p,{children:["In MDX v3, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,i.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,i.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,i.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you don't want an extra ",(0,i.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})}),(0,i.jsxs)(n.p,{children:["You can also wrap such content with ",(0,i.jsx)(n.code,{children:"{"})," and ",(0,i.jsx)(n.code,{children:"}"})," to avoid extra ",(0,i.jsx)(n.code,{children:"<p>"})," tags if you don't intend to use Markdown syntax there yet."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:'-<figure>\n+{<figure>\n <img src="/img/myImage.png" alt="My alt" />\n <figcaption>\n My image caption\n </figcaption>\n-</figure>\n+</figure>}\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,i.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,i.jsxs)(n.p,{children:["Due to ",(0,i.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"How to upgrade",type:"tip",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:":"})]}),"\n",(0,i.jsxs)(n.li,{children:["Add a space after ",(0,i.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,i.jsx)(n.code,{children:": text"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\:"})]}),"\n"]})}),"\n",(0,i.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,i.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,i.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,i.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"other-markdown-incompatibilities",children:"Other Markdown incompatibilities"}),"\n",(0,i.jsx)(n.h4,{id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",children:"Emphasis starting or ending with a space or a punctuation"}),"\n",(0,i.jsx)(n.p,{children:"New MDX parser now strictly complies with the CommonMark spec. CommonMark spec has introduced rules for emphasis around spaces and punctuation, which are incompatible especially with languages that do not use a space to split words, since v0.14."}),"\n",(0,i.jsx)(n.p,{children:"Japanese and Chinese are most affected by this, but there are some other languages that can be affected (e.g. Thai and Khmer), for example when you try to emphasize an inline code or a link. Languages that use a space to split words are much less affected."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"**"})," (other than ",(0,i.jsx)(n.code,{children:"`**`"}),") in the following example were parsed as intended in Docusaurus 2, but are not now in Docusaurus 3."]}),"\n","\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"**Do not end a range of emphasis with a space. **Or `**` will not work as intended.\n\n\x3c!-- Japanese --\x3e\n**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002**\u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)**\u3084**`\u30b3\u30fc\u30c9`**\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"See the detailed conditions and how to upgrade"}),(0,i.jsxs)(n.p,{children:["If ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the beginning of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The next character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word* word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The previous character is a punctuation character and the next character is a letter (not a space or punctuation character) (e.g. ",(0,i.jsx)(n.code,{children:"\u6587**\uff08\u6587\uff09"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["On the contrary, if ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the end of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The previous character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word *word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The next character is a punctuation character and the previous character is a letter (e.g. ",(0,i.jsx)(n.code,{children:"\u6587\u3002**\u6587"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["\u201cA punctuation character\u201d includes non-ASCII ones, brackets, quotation marks and some symbols including ",(0,i.jsx)(n.code,{children:"%"})," and ",(0,i.jsx)(n.code,{children:"@"}),". More strictly speaking, a character whose 2-letters Unicode category starts with ",(0,i.jsx)(n.code,{children:"P"})," is treated as a punctuation character here."]}),(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"If the offending emphasis mark is next to a space, move the space out of the range of emphasis:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="english.md"',children:"**Do not end a range of emphasis with a space.** Or `**` will not work.\n"})}),(0,i.jsx)(n.p,{children:"If the offending emphasis mark is surrounded by both a punctuation character and a letter, you can fix it without modifying the content by:"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Convert the document to MDX if it is a vanilla Markdown."}),"\n",(0,i.jsxs)(n.li,{children:["replace the offending emphasis mark with a raw HTML tag (",(0,i.jsx)(n.code,{children:"<em>"})," or ",(0,i.jsx)(n.code,{children:"<strong>"}),") instead:"]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",metastring:'title="japanese.mdx"',children:"<strong>\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002</strong>\u307e\u305f\u3001<strong>[\u30ea\u30f3\u30af](https://docusaurus.io/)</strong>\u3084<strong>`\u30b3\u30fc\u30c9`</strong>\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),(0,i.jsx)(n.p,{children:"While not an ideal solution, you can also either of the following without converting the document to MDX:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Move the most outside punctuation character out of the emphasis mark."}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093**\u3002\u307e\u305f\u3001[**\u30ea\u30f3\u30af**](https://docusaurus.io/)\u3084\u30fb\u30fb\u30fb\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Put a space just outside of the offending ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"}),". This solution does not force you to convert the document to MDX."]}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002** \u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)** \u3084 **`\u30b3\u30fc\u30c9`** \u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,i.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,i.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,i.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,i.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,i.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,i.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,i.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,i.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,i.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,i.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,i.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,i.jsx)(n.h3,{id:"formatters",children:"Formatters"}),"\n",(0,i.jsxs)(n.p,{children:["Prettier, the most common formatter, supports only the legacy MDX v1, not v3 yet as of Docusaurus v3.0.0. You can add ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the incompatible parts of your code to make it work with Prettier."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",children:"{/* prettier-ignore */}\n<SomeComponent>Some long text in the component</SomeComponent>\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you get tired of too many ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," insertions, you can consider disabling MDX formatting by Prettier by adding the following to your ",(0,i.jsx)(n.code,{children:".prettierignore"})," file, until it starts supporting MDX v3:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-txt",metastring:'title=".prettierignore"',children:"*.mdx\n"})}),"\n",(0,i.jsx)(n.h2,{id:"other-breaking-changes",children:"Other Breaking Changes"}),"\n",(0,i.jsx)(n.p,{children:"Apart the MDX v3 upgrade, here is an exhaustive list of breaking changes coming with Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"nodejs-v180",children:"Node.js v18.0"}),"\n",(0,i.jsxs)(n.p,{children:["Node.js 16 ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Install Node.js 18.0+ on your computer."}),(0,i.jsx)(n.p,{children:"Eventually, configure your continuous integration, CDN or host to use this new Node.js version."}),(0,i.jsxs)(n.p,{children:["You can also update your site ",(0,i.jsx)(n.code,{children:"package.json"})," to prevent usage of an older unsupported version:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "engines": {\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),(0,i.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})]}),"\n",(0,i.jsx)(n.h3,{id:"react-v180",children:"React v18.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site. The official themes and plugins are compatible with React 18."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Read the official ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your own React code to figure out which components might be affected this upgrade."]}),(0,i.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,i.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,i.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"startTransition"})}),"\n"]}),(0,i.jsx)(n.p,{children:"Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior."})]}),"\n",(0,i.jsx)(n.h3,{id:"prism-react-renderer-v20",children:"Prism-React-Renderer v2.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:(0,i.jsx)(n.code,{children:"prism-react-renderer"})})," to v2.0+. This library is used for code block syntax highlighting."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["This is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. The ",(0,i.jsxs)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/releases/tag/prism-react-renderer%402.0.0",children:[(0,i.jsx)(n.code,{children:"prism-react-renderer"})," v2 release notes"]})," are not super exhaustive, but there are 3 major changes to be aware of for Docusaurus users."]}),(0,i.jsx)(n.p,{children:"The dependency should be upgraded:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n }\n'})}),(0,i.jsx)(n.p,{children:"The API to import themes in your Docusaurus config file has been updated:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="docusaurus.config.js"',children:"- const lightTheme = require('prism-react-renderer/themes/github');\n- const darkTheme = require('prism-react-renderer/themes/dracula');\n+ const {themes} = require('prism-react-renderer');\n+ const lightTheme = themes.github;\n+ const darkTheme = themes.dracula;\n"})}),(0,i.jsxs)(n.p,{children:["Previously, ",(0,i.jsx)(n.code,{children:"react-prism-render"})," v1 ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/v1.3.5/src/vendor/prism/includeLangs.js",children:"included more languages by default"}),". From v2.0+, ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/prism-react-renderer%402.1.0/packages/generate-prism-languages/index.ts#L9",children:"less languages are included by default"}),". You may need to add extra languages to your Docusaurus config:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const siteConfig = {\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['bash', 'diff', 'json'],\n },\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"react-live-v40",children:"React-Live v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:(0,i.jsx)(n.code,{children:"react-live"})})," to v4.0+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing interactive code blocks should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v3.0.0",children:"v3"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v4.0.0",children:"v4"})," changelogs in case of problems."]})]}),"\n",(0,i.jsx)(n.h3,{id:"remark-emoji-v40",children:"remark-emoji v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji",children:(0,i.jsx)(n.code,{children:"remark-emoji"})})," to v4.0+. This library is to support ",(0,i.jsx)(n.code,{children:":emoji:"})," shortcuts in Markdown."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Most Docusaurus users have nothing to do. Users of emoji shortcodes should read the ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji/blob/master/CHANGELOG.md",children:"changelog"})," and double-check their emojis keep rendering as expected."]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Breaking Change"})," Update ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/node-emoji",children:"node-emoji"})," from v1 to v2. This change introduces support for many new emojis and removes old emoji short codes which are no longer valid on GitHub."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h3,{id:"mermaid-v104",children:"Mermaid v10.4+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-mermaid"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid",children:(0,i.jsx)(n.code,{children:"mermaid"})})," to v10.4+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing diagrams should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/releases/tag/v10.0.0",children:"v10"})," changelog in case of problem."]})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-v51",children:"TypeScript v5.1+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"TypeScript >= 5.1"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Upgrade your dependencies to use TypeScript 5+"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,i.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,i.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,i.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Swap the external TypeScript config package for the new official one"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n }\n }\n'})}),(0,i.jsxs)(n.p,{children:["Use it in your ",(0,i.jsx)(n.code,{children:"tsconfig.json"})," file:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"new-config-loader",children:"New Config Loader"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 changes its internal config loading library from ",(0,i.jsx)(n.a,{href:"https://github.com/sindresorhus/import-fresh",children:(0,i.jsx)(n.code,{children:"import-fresh"})})," to ",(0,i.jsx)(n.a,{href:"https://github.com/unjs/jiti",children:(0,i.jsx)(n.code,{children:"jiti"})}),". It is responsible for loading files such as ",(0,i.jsx)(n.code,{children:"docusaurus.config.js"})," or ",(0,i.jsx)(n.code,{children:"sidebars.js"}),", and Docusaurus plugins."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing config files should keep working as before."}),(0,i.jsx)(n.p,{children:"However, this is a major dependency swap and subtle behavior changes could occur."})]}),"\n",(0,i.jsx)(n.h3,{id:"admonition-warning",children:"Admonition Warning"}),"\n",(0,i.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,i.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,i.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.p,{children:["However, the color and icon have always been wrong. Docusaurus v3 re-introduces ",(0,i.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,i.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,i.jsx)(n.code,{children:":::danger"})," instead."]}),(0,i.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,i.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,i.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,i.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,i.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,i.jsx)(n.code,{children:":::danger"})," (red)."]}),(0,i.jsxs)(n.p,{children:["If you want to keep the title \u201ccaution\u201d, you might want to refactor it to ",(0,i.jsx)(n.code,{children:":::warning[caution]"})," (yellow)."]})]}),"\n",(0,i.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned Sidebars"}),"\n",(0,i.jsxs)(n.p,{children:["This breaking change will only affect ",(0,i.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,i.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,i.jsxs)(n.p,{children:["When creating version ",(0,i.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,i.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Remove the useless versioned prefix from your versioned sidebars."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"blog-feed-limit",children:"Blog Feed Limit"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"@docusaurus/plugin-content-blog"})," now limits the RSS feed to the last 20 entries by default. For large Docusaurus blogs, this is a more sensible default value to avoid an increasingly large RSS file."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:['In case you don\'t like this new default behavior, you can revert to the former "unlimited feed" behavior with the new ',(0,i.jsx)(n.code,{children:"limit: false"})," feed option:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const blogOptions = {\n feedOptions: {\n // highlight-next-line\n limit: false,\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"docs-theme-refactoring",children:"Docs Theme Refactoring"}),"\n",(0,i.jsxs)(n.p,{children:["For users that swizzled docs-related theme components (like ",(0,i.jsx)(n.code,{children:"@theme/DocPage"}),"), these components have been significantly refactor to make it easier to customize."]}),"\n",(0,i.jsxs)(n.p,{children:["Technically, ",(0,i.jsx)(n.strong,{children:"this is not a breaking change"})," because these components are ",(0,i.jsx)(n.strong,{children:"flagged as unsafe to swizzle"}),", however many Docusaurus sites ejected docs-related components, and will be interested to know their customizations might break Docusaurus."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Delete all your swizzled components, re-swizzle them, and re-apply your customizations on top of the newly updated components."}),(0,i.jsxs)(n.p,{children:["Alternatively, you can look at the ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"pull-request notes"})," to understand the new theme component tree structure, and eventually try to patch your swizzled components manually."]})]}),"\n",(0,i.jsx)(n.h2,{id:"optional-changes",children:"Optional Changes"}),"\n",(0,i.jsx)(n.p,{children:"Some changes are not mandatory, but remain useful to be aware of to plainly leverage Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses the React 18 ",(0,i.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,i.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,i.jsx)(n.h3,{id:"esm-and-typescript-configs",children:"ESM and TypeScript Configs"}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 supports ESM and TypeScript config files, and it might be a good idea to adopt those new options."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'Docusaurus',\n url: 'https://docusaurus.io',\n // your site config ...\n};\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n presets: [\n [\n 'classic',\n {\n /* Your preset config here */\n } satisfies Preset.Options,\n ],\n ],\n\n themeConfig: {\n /* Your theme config here */\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"using-the-mdx-extension",children:["Using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension"]}),"\n",(0,i.jsxs)(n.p,{children:["We recommend using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,i.jsx)(n.code,{children:"import"}),", or ",(0,i.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.)."]}),"\n",(0,i.jsxs)(n.p,{children:["In future versions of Docusaurus, ",(0,i.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,i.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,i.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"upgrading-math-packages",children:"Upgrading math packages"}),"\n",(0,i.jsxs)(n.p,{children:["If you use Docusaurus to render ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/math-equations",children:"Math Equations"}),", you should upgrade the MDX plugins."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to use ",(0,i.jsx)(n.code,{children:"remark-math 6"})," and ",(0,i.jsx)(n.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:"package.json",children:'{\n- "remark-math": "^3.0.0",\n+ "remark-math": "^6.0.0",\n- "rehype-katex": "^5.0.0"\n+ "rehype-katex": "^7.0.0"\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"hast-util-is-element"})," is now unnecessary in Docusaurus v3. If you have installed it and don't use it somewhere else, you can just remove it by running ",(0,i.jsx)(n.code,{children:"npm uninstall hast-util-is-element"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"turn-off-mdx-v1-compat",children:"Turn off MDX v1 compat"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 comes with ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"MDX v1 compatibility options"}),", that are turned on by default."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,i.jsxs)(n.h4,{id:"comments-option",children:[(0,i.jsx)(n.code,{children:"comments"})," option"]}),"\n",(0,i.jsx)(n.p,{children:"This option allows the usage of HTML comments inside MDX, while HTML comments are officially not supported anymore."}),"\n",(0,i.jsxs)(n.p,{children:["For MDX files, we recommend to progressively use MDX ",(0,i.jsx)(n.code,{children:"{/* comments */}"})," instead of HTML ",(0,i.jsx)(n.code,{children:"\x3c!-- comments --\x3e"}),", and then turn this compatibility option off."]}),"\n",(0,i.jsx)(n.admonition,{title:"Blog truncate marker",type:"info",children:(0,i.jsxs)(n.p,{children:["The default blog truncate marker now supports both ",(0,i.jsx)(n.code,{children:"\x3c!-- truncate --\x3e"})," and ",(0,i.jsx)(n.code,{children:"{/* truncate */}"}),"."]})}),"\n",(0,i.jsxs)(n.h4,{id:"admonitions-option",children:[(0,i.jsx)(n.code,{children:"admonitions"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/admonitions#specifying-title",children:"admonition title"})," syntax:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note\xa0Your Title\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus now implements admonitions with ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),"), and the syntax to provide a directive label requires square brackets:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note[Your Title]\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsx)(n.p,{children:"We recommend to progressively use the new Markdown directive label syntax, and then turn this compatibility option off."}),"\n",(0,i.jsxs)(n.h4,{id:"headingids-option",children:[(0,i.jsx)(n.code,{children:"headingIds"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/toc#heading-ids",children:"explicit heading id"})," syntax:"]}),"\n",(0,i.jsx)(o,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,i.jsxs)(n.p,{children:["This syntax is now invalid MDX, and would require to escape the ",(0,i.jsx)(n.code,{children:"{"})," character: ",(0,i.jsx)(n.code,{children:"\\{#my-explicit-id}"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"We recommend to keep this compatibility option on for now, until we provide a new syntax compatible with newer versions of MDX."}),"\n",(0,i.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsx)(n.p,{children:"In case of any upgrade problem, the first things to try are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["make sure all your docs compile in the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),", or using ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})]}),"\n",(0,i.jsxs)(n.li,{children:["delete ",(0,i.jsx)(n.code,{children:"node_modules"})," and ",(0,i.jsx)(n.code,{children:"package-lock.json"}),", and then run ",(0,i.jsx)(n.code,{children:"npm install"})," again"]}),"\n",(0,i.jsxs)(n.li,{children:["run ",(0,i.jsx)(n.code,{children:"docusaurus clear"})," to clear the caches"]}),"\n",(0,i.jsx)(n.li,{children:"remove third-party plugins that might not support Docusaurus v3"}),"\n",(0,i.jsx)(n.li,{children:"delete all your swizzled components"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Once you have tried that, you can ask for support through the following support channels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Please consider ",(0,i.jsx)(n.strong,{children:"our time is precious"}),". To ensure that your support request is not ignored, we kindly ask you to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["provide a ",(0,i.jsx)(n.strong,{children:"minimal"})," reproduction that we can easily run, ideally created with ",(0,i.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(n.li,{children:"provide a live deployment url showing the problem in action (if your site can build)"}),"\n",(0,i.jsx)(n.li,{children:'explain clearly the problem, much more than an ambiguous "it doesn\'t work"'}),"\n",(0,i.jsx)(n.li,{children:"include as much relevant material as possible: code snippets, repo url, git branch urls, full stack traces, screenshots and videos"}),"\n",(0,i.jsx)(n.li,{children:"present your request clearly, concisely, showing us that you have made an effort to help us help you"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}function u(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(27378);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82425aa0.d6389b4b.js b/assets/js/82425aa0.d6389b4b.js deleted file mode 100644 index 3369e2d5076d..000000000000 --- a/assets/js/82425aa0.d6389b4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62513],{49357:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},5444:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},8792:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=s(24246),r=s(71670);const o={slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},t="Upgrading to Docusaurus v3",a={id:"migration/v3",title:"Upgrading to Docusaurus v3",description:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.",source:"@site/docs/migration/v3.mdx",sourceDirName:"migration",slug:"/migration/v3",permalink:"/docs/migration/v3",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},sidebar:"docs",previous:{title:"Upgrading Docusaurus",permalink:"/docs/migration"},next:{title:"Overview",permalink:"/docs/migration/v2"}},d={},c=[{value:"Upgrading Dependencies",id:"upgrading-dependencies",level:2},{value:"Upgrading MDX",id:"upgrading-mdx",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"Other Markdown incompatibilities",id:"other-markdown-incompatibilities",level:3},{value:"Emphasis starting or ending with a space or a punctuation",id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Formatters",id:"formatters",level:3},{value:"Other Breaking Changes",id:"other-breaking-changes",level:2},{value:"Node.js v18.0",id:"nodejs-v180",level:3},{value:"React v18.0+",id:"react-v180",level:3},{value:"Prism-React-Renderer v2.0+",id:"prism-react-renderer-v20",level:3},{value:"React-Live v4.0+",id:"react-live-v40",level:3},{value:"remark-emoji v4.0+",id:"remark-emoji-v40",level:3},{value:"Mermaid v10.4+",id:"mermaid-v104",level:3},{value:"TypeScript v5.1+",id:"typescript-v51",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"New Config Loader",id:"new-config-loader",level:3},{value:"Admonition Warning",id:"admonition-warning",level:3},{value:"Versioned Sidebars",id:"versioned-sidebars",level:3},{value:"Blog Feed Limit",id:"blog-feed-limit",level:3},{value:"Docs Theme Refactoring",id:"docs-theme-refactoring",level:3},{value:"Optional Changes",id:"optional-changes",level:2},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"ESM and TypeScript Configs",id:"esm-and-typescript-configs",level:3},{value:"Using the <code>.mdx</code> extension",id:"using-the-mdx-extension",level:3},{value:"Upgrading math packages",id:"upgrading-math-packages",level:3},{value:"Turn off MDX v1 compat",id:"turn-off-mdx-v1-compat",level:3},{value:"<code>comments</code> option",id:"comments-option",level:4},{value:"<code>admonitions</code> option",id:"admonitions-option",level:4},{value:"<code>headingIds</code> option",id:"headingids-option",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Code:o,Details:t}=n;return o||u("Code",!0),t||u("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"upgrading-to-docusaurus-v3",children:"Upgrading to Docusaurus v3"})}),"\n",(0,i.jsx)(n.p,{children:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3."}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 is a new ",(0,i.jsx)(n.strong,{children:"major version"}),", including ",(0,i.jsx)(n.strong,{children:"breaking changes"})," requiring you to adjust your site accordingly. We will guide to during this process, and also mention a few optional recommendations."]}),"\n",(0,i.jsx)(n.p,{children:"This is not a full rewrite, and the breaking changes are relatively easy to handle. The simplest sites will eventually upgrade by simply updating their npm dependencies."}),"\n",(0,i.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,i.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,i.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,i.jsx)(n.strong,{children:"more strictly"})," and with ",(0,i.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Before upgrading",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Before upgrading, we recommend ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:(0,i.jsx)(n.strong,{children:"preparing your site for Docusaurus v3"})}),". There are changes that you can already ",(0,i.jsx)(n.strong,{children:"handle incrementally, under Docusaurus v2"}),". Doing so will help reduce the work needed to finally upgrade to Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["For complex sites, we also recommend to set up ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:(0,i.jsx)(n.strong,{children:"visual regression tests"})}),", a good way to ensure your site stays visually identical. Docusaurus v3 mainly upgrades dependencies, and is not expected to produce any visual changes."]})]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Check the release notes for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,i.jsx)(n.strong,{children:"Docusaurus v3.0.0"})}),", and browse the pull-requests for additional useful information and the motivation behind each change mentioned here."]})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-dependencies",children:"Upgrading Dependencies"}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading to Docusaurus v3 requires upgrading core Docusaurus dependencies (",(0,i.jsx)(n.code,{children:"@docusaurus/name"}),"), but also other related packages."]}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 now uses the following dependencies:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Node.js v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"React v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"MDX v3.0+"}),"\n",(0,i.jsx)(n.li,{children:"TypeScript v5.1+"}),"\n",(0,i.jsx)(n.li,{children:"prism-react-renderer v2.0+"}),"\n",(0,i.jsx)(n.li,{children:"react-live v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"remark-emoji v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"mermaid v10.4+"}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Upgrading community plugins",type:"warning",children:[(0,i.jsx)(n.p,{children:"If your site uses third-party community plugins and themes, you might need to upgrade them."}),(0,i.jsx)(n.p,{children:"Make sure those plugins are compatible with Docusaurus v3 before attempting an upgrade."})]}),"\n",(0,i.jsxs)(n.p,{children:["A typical ",(0,i.jsx)(n.code,{children:"package.json"})," dependency upgrade example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,i.jsx)(n.p,{children:"For TypeScript users:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n // swap the external TypeScript config package for the new official one\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n // upgrade React types to v18.0+\n- "@types/react": "^17.0.69",\n+ "@types/react": "^18.2.29",\n // upgrade TypeScript to v5.1+\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-mdx",children:"Upgrading MDX"}),"\n",(0,i.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,i.jsx)(n.code,{children:".md"})," and ",(0,i.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,i.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,i.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release."]}),"\n",(0,i.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,i.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Find problematic content ahead of time",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Run ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," on your site to get a list of files that will now fail to compile under Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["This command is also a good way to estimate the amount of work to be done to make your content compatible. Remember most of this work can be executed ahead of the upgrade by ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"preparing your content for Docusaurus v3"}),"."]})]}),"\n",(0,i.jsxs)(n.p,{children:["Other documents might also ",(0,i.jsx)(n.strong,{children:"render differently"}),"."]}),"\n",(0,i.jsx)(n.admonition,{title:"Use visual regression tests",type:"tip",children:(0,i.jsxs)(n.p,{children:["For large sites where a manual review of all pages is complicated, we recommend you to setup ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,i.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,i.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,i.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,i.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"MDX"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(5444).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,i.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v2."}),"\n",(0,i.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,i.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,i.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,i.jsxs)(n.p,{children:["We provide a ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command on your site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,i.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(49357).Z+"",width:"1161",height:"417"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.p,{children:["This CLI is a best effort, and will ",(0,i.jsx)(n.strong,{children:"only report compilation errors"}),"."]}),(0,i.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus cannot document exhaustively all the changes coming with MDX. That's the responsibility of the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"MDX v3"})," migration guides."]}),"\n",(0,i.jsx)(n.p,{children:"However, by upgrading a few Docusaurus sites, we noticed that most of the issues come down to only a few cases that we have documented for you."}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"{"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,i.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,i.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"<"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"<"})," or ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\<"})]}),"\n"]})]}),"\n",(0,i.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus supports ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,i.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,i.jsx)(n.code,{children:"<"})," and ",(0,i.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,i.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,i.jsxs)(n.p,{children:["For users providing a ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,i.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,i.jsx)(n.code,{children:"h1"})," only gets used for ",(0,i.jsx)(n.code,{children:"# hi"})," but not for ",(0,i.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,i.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,i.jsxs)(n.p,{children:["Your ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,i.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,i.jsx)(n.strong,{children:"lower-case"}),": ",(0,i.jsx)(n.code,{children:"p"}),", ",(0,i.jsx)(n.code,{children:"h1"}),", ",(0,i.jsx)(n.code,{children:"img"}),", ",(0,i.jsx)(n.code,{children:"a"}),"..."]}),(0,i.jsxs)(n.p,{children:["For any other element, ",(0,i.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,i.jsxs)(n.p,{children:["In MDX v3, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,i.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,i.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,i.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you don't want an extra ",(0,i.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})}),(0,i.jsxs)(n.p,{children:["You can also wrap such content with ",(0,i.jsx)(n.code,{children:"{"})," and ",(0,i.jsx)(n.code,{children:"}"})," to avoid extra ",(0,i.jsx)(n.code,{children:"<p>"})," tags if you don't intend to use Markdown syntax there yet."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:'-<figure>\n+{<figure>\n <img src="/img/myImage.png" alt="My alt" />\n <figcaption>\n My image caption\n </figcaption>\n-</figure>\n+</figure>}\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,i.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,i.jsxs)(n.p,{children:["Due to ",(0,i.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"How to upgrade",type:"tip",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:":"})]}),"\n",(0,i.jsxs)(n.li,{children:["Add a space after ",(0,i.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,i.jsx)(n.code,{children:": text"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\:"})]}),"\n"]})}),"\n",(0,i.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,i.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,i.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,i.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"other-markdown-incompatibilities",children:"Other Markdown incompatibilities"}),"\n",(0,i.jsx)(n.h4,{id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",children:"Emphasis starting or ending with a space or a punctuation"}),"\n",(0,i.jsx)(n.p,{children:"New MDX parser now strictly complies with the CommonMark spec. CommonMark spec has introduced rules for emphasis around spaces and punctuation, which are incompatible especially with languages that do not use a space to split words, since v0.14."}),"\n",(0,i.jsx)(n.p,{children:"Japanese and Chinese are most affected by this, but there are some other languages that can be affected (e.g. Thai and Khmer), for example when you try to emphasize an inline code or a link. Languages that use a space to split words are much less affected."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"**"})," (other than ",(0,i.jsx)(n.code,{children:"`**`"}),") in the following example were parsed as intended in Docusaurus 2, but are not now in Docusaurus 3."]}),"\n","\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"**Do not end a range of emphasis with a space. **Or `**` will not work as intended.\n\n\x3c!-- Japanese --\x3e\n**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002**\u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)**\u3084**`\u30b3\u30fc\u30c9`**\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"See the detailed conditions and how to upgrade"}),(0,i.jsxs)(n.p,{children:["If ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the beginning of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The next character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word* word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The previous character is a punctuation character and the next character is a letter (not a space or punctuation character) (e.g. ",(0,i.jsx)(n.code,{children:"\u6587**\uff08\u6587\uff09"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["On the contrary, if ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the end of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The previous character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word *word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The next character is a punctuation character and the previous character is a letter (e.g. ",(0,i.jsx)(n.code,{children:"\u6587\u3002**\u6587"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["\u201cA punctuation character\u201d includes non-ASCII ones, brackets, quotation marks and some symbols including ",(0,i.jsx)(n.code,{children:"%"})," and ",(0,i.jsx)(n.code,{children:"@"}),". More strictly speaking, a character whose 2-letters Unicode category starts with ",(0,i.jsx)(n.code,{children:"P"})," is treated as a punctuation character here."]}),(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"If the offending emphasis mark is next to a space, move the space out of the range of emphasis:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="english.md"',children:"**Do not end a range of emphasis with a space.** Or `**` will not work.\n"})}),(0,i.jsx)(n.p,{children:"If the offending emphasis mark is surrounded by both a punctuation character and a letter, you can fix it without modifying the content by:"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Convert the document to MDX if it is a vanilla Markdown."}),"\n",(0,i.jsxs)(n.li,{children:["replace the offending emphasis mark with a raw HTML tag (",(0,i.jsx)(n.code,{children:"<em>"})," or ",(0,i.jsx)(n.code,{children:"<strong>"}),") instead:"]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",metastring:'title="japanese.mdx"',children:"<strong>\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002</strong>\u307e\u305f\u3001<strong>[\u30ea\u30f3\u30af](https://docusaurus.io/)</strong>\u3084<strong>`\u30b3\u30fc\u30c9`</strong>\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),(0,i.jsx)(n.p,{children:"While not an ideal solution, you can also either of the following without converting the document to MDX:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Move the most outside punctuation character out of the emphasis mark."}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093**\u3002\u307e\u305f\u3001[**\u30ea\u30f3\u30af**](https://docusaurus.io/)\u3084\u30fb\u30fb\u30fb\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Put a space just outside of the offending ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"}),". This solution does not force you to convert the document to MDX."]}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002** \u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)** \u3084 **`\u30b3\u30fc\u30c9`** \u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,i.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,i.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,i.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,i.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,i.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,i.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,i.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,i.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,i.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,i.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,i.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,i.jsx)(n.h3,{id:"formatters",children:"Formatters"}),"\n",(0,i.jsxs)(n.p,{children:["Prettier, the most common formatter, supports only the legacy MDX v1, not v3 yet as of Docusaurus v3.0.0. You can add ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the incompatible parts of your code to make it work with Prettier."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",children:"{/* prettier-ignore */}\n<SomeComponent>Some long text in the component</SomeComponent>\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you get tired of too many ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," insertions, you can consider disabling MDX formatting by Prettier by adding the following to your ",(0,i.jsx)(n.code,{children:".prettierignore"})," file, until it starts supporting MDX v3:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-txt",metastring:'title=".prettierignore"',children:"*.mdx\n"})}),"\n",(0,i.jsx)(n.h2,{id:"other-breaking-changes",children:"Other Breaking Changes"}),"\n",(0,i.jsx)(n.p,{children:"Apart the MDX v3 upgrade, here is an exhaustive list of breaking changes coming with Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"nodejs-v180",children:"Node.js v18.0"}),"\n",(0,i.jsxs)(n.p,{children:["Node.js 16 ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Install Node.js 18.0+ on your computer."}),(0,i.jsx)(n.p,{children:"Eventually, configure your continuous integration, CDN or host to use this new Node.js version."}),(0,i.jsxs)(n.p,{children:["You can also update your site ",(0,i.jsx)(n.code,{children:"package.json"})," to prevent usage of an older unsupported version:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "engines": {\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),(0,i.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})]}),"\n",(0,i.jsx)(n.h3,{id:"react-v180",children:"React v18.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site. The official themes and plugins are compatible with React 18."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Read the official ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your own React code to figure out which components might be affected this upgrade."]}),(0,i.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,i.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,i.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"startTransition"})}),"\n"]}),(0,i.jsx)(n.p,{children:"Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior."})]}),"\n",(0,i.jsx)(n.h3,{id:"prism-react-renderer-v20",children:"Prism-React-Renderer v2.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:(0,i.jsx)(n.code,{children:"prism-react-renderer"})})," to v2.0+. This library is used for code block syntax highlighting."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["This is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. The ",(0,i.jsxs)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/releases/tag/prism-react-renderer%402.0.0",children:[(0,i.jsx)(n.code,{children:"prism-react-renderer"})," v2 release notes"]})," are not super exhaustive, but there are 3 major changes to be aware of for Docusaurus users."]}),(0,i.jsx)(n.p,{children:"The dependency should be upgraded:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n }\n'})}),(0,i.jsx)(n.p,{children:"The API to import themes in your Docusaurus config file has been updated:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="docusaurus.config.js"',children:"- const lightTheme = require('prism-react-renderer/themes/github');\n- const darkTheme = require('prism-react-renderer/themes/dracula');\n+ const {themes} = require('prism-react-renderer');\n+ const lightTheme = themes.github;\n+ const darkTheme = themes.dracula;\n"})}),(0,i.jsxs)(n.p,{children:["Previously, ",(0,i.jsx)(n.code,{children:"react-prism-render"})," v1 ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/v1.3.5/src/vendor/prism/includeLangs.js",children:"included more languages by default"}),". From v2.0+, ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/prism-react-renderer%402.1.0/packages/generate-prism-languages/index.ts#L9",children:"less languages are included by default"}),". You may need to add extra languages to your Docusaurus config:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const siteConfig = {\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['bash', 'diff', 'json'],\n },\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"react-live-v40",children:"React-Live v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:(0,i.jsx)(n.code,{children:"react-live"})})," to v4.0+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing interactive code blocks should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v3.0.0",children:"v3"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v4.0.0",children:"v4"})," changelogs in case of problems."]})]}),"\n",(0,i.jsx)(n.h3,{id:"remark-emoji-v40",children:"remark-emoji v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji",children:(0,i.jsx)(n.code,{children:"remark-emoji"})})," to v4.0+. This library is to support ",(0,i.jsx)(n.code,{children:":emoji:"})," shortcuts in Markdown."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Most Docusaurus users have nothing to do. Users of emoji shortcodes should read the ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji/blob/master/CHANGELOG.md",children:"changelog"})," and double-check their emojis keep rendering as expected."]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Breaking Change"})," Update ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/node-emoji",children:"node-emoji"})," from v1 to v2. This change introduces support for many new emojis and removes old emoji short codes which are no longer valid on GitHub."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h3,{id:"mermaid-v104",children:"Mermaid v10.4+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-mermaid"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid",children:(0,i.jsx)(n.code,{children:"mermaid"})})," to v10.4+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing diagrams should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/releases/tag/v10.0.0",children:"v10"})," changelog in case of problem."]})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-v51",children:"TypeScript v5.1+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"TypeScript >= 5.1"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Upgrade your dependencies to use TypeScript 5+"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,i.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,i.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,i.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Swap the external TypeScript config package for the new official one"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n }\n }\n'})}),(0,i.jsxs)(n.p,{children:["Use it in your ",(0,i.jsx)(n.code,{children:"tsconfig.json"})," file:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"new-config-loader",children:"New Config Loader"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 changes its internal config loading library from ",(0,i.jsx)(n.a,{href:"https://github.com/sindresorhus/import-fresh",children:(0,i.jsx)(n.code,{children:"import-fresh"})})," to ",(0,i.jsx)(n.a,{href:"https://github.com/unjs/jiti",children:(0,i.jsx)(n.code,{children:"jiti"})}),". It is responsible for loading files such as ",(0,i.jsx)(n.code,{children:"docusaurus.config.js"})," or ",(0,i.jsx)(n.code,{children:"sidebars.js"}),", and Docusaurus plugins."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing config files should keep working as before."}),(0,i.jsx)(n.p,{children:"However, this is a major dependency swap and subtle behavior changes could occur."})]}),"\n",(0,i.jsx)(n.h3,{id:"admonition-warning",children:"Admonition Warning"}),"\n",(0,i.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,i.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,i.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.p,{children:["However, the color and icon have always been wrong. Docusaurus v3 re-introduces ",(0,i.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,i.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,i.jsx)(n.code,{children:":::danger"})," instead."]}),(0,i.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,i.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,i.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,i.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,i.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,i.jsx)(n.code,{children:":::danger"})," (red)."]}),(0,i.jsxs)(n.p,{children:["If you want to keep the title \u201ccaution\u201d, you might want to refactor it to ",(0,i.jsx)(n.code,{children:":::warning[caution]"})," (yellow)."]})]}),"\n",(0,i.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned Sidebars"}),"\n",(0,i.jsxs)(n.p,{children:["This breaking change will only affect ",(0,i.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,i.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,i.jsxs)(n.p,{children:["When creating version ",(0,i.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,i.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Remove the useless versioned prefix from your versioned sidebars."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"blog-feed-limit",children:"Blog Feed Limit"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"@docusaurus/plugin-content-blog"})," now limits the RSS feed to the last 20 entries by default. For large Docusaurus blogs, this is a more sensible default value to avoid an increasingly large RSS file."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:['In case you don\'t like this new default behavior, you can revert to the former "unlimited feed" behavior with the new ',(0,i.jsx)(n.code,{children:"limit: false"})," feed option:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const blogOptions = {\n feedOptions: {\n // highlight-next-line\n limit: false,\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"docs-theme-refactoring",children:"Docs Theme Refactoring"}),"\n",(0,i.jsxs)(n.p,{children:["For users that swizzled docs-related theme components (like ",(0,i.jsx)(n.code,{children:"@theme/DocPage"}),"), these components have been significantly refactor to make it easier to customize."]}),"\n",(0,i.jsxs)(n.p,{children:["Technically, ",(0,i.jsx)(n.strong,{children:"this is not a breaking change"})," because these components are ",(0,i.jsx)(n.strong,{children:"flagged as unsafe to swizzle"}),", however many Docusaurus sites ejected docs-related components, and will be interested to know their customizations might break Docusaurus."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Delete all your swizzled components, re-swizzle them, and re-apply your customizations on top of the newly updated components."}),(0,i.jsxs)(n.p,{children:["Alternatively, you can look at the ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"pull-request notes"})," to understand the new theme component tree structure, and eventually try to patch your swizzled components manually."]})]}),"\n",(0,i.jsx)(n.h2,{id:"optional-changes",children:"Optional Changes"}),"\n",(0,i.jsx)(n.p,{children:"Some changes are not mandatory, but remain useful to be aware of to plainly leverage Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses the React 18 ",(0,i.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,i.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,i.jsx)(n.h3,{id:"esm-and-typescript-configs",children:"ESM and TypeScript Configs"}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 supports ESM and TypeScript config files, and it might be a good idea to adopt those new options."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'Docusaurus',\n url: 'https://docusaurus.io',\n // your site config ...\n};\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n presets: [\n [\n 'classic',\n {\n /* Your preset config here */\n } satisfies Preset.Options,\n ],\n ],\n\n themeConfig: {\n /* Your theme config here */\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"using-the-mdx-extension",children:["Using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension"]}),"\n",(0,i.jsxs)(n.p,{children:["We recommend using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,i.jsx)(n.code,{children:"import"}),", or ",(0,i.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.)."]}),"\n",(0,i.jsxs)(n.p,{children:["In future versions of Docusaurus, ",(0,i.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,i.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,i.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"upgrading-math-packages",children:"Upgrading math packages"}),"\n",(0,i.jsxs)(n.p,{children:["If you use Docusaurus to render ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/math-equations",children:"Math Equations"}),", you should upgrade the MDX plugins."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to use ",(0,i.jsx)(n.code,{children:"remark-math 6"})," and ",(0,i.jsx)(n.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:"package.json",children:'{\n- "remark-math": "^3.0.0",\n+ "remark-math": "^6.0.0",\n- "rehype-katex": "^5.0.0"\n+ "rehype-katex": "^7.0.0"\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"hast-util-is-element"})," is now unnecessary in Docusaurus v3. If you have installed it and don't use it somewhere else, you can just remove it by running ",(0,i.jsx)(n.code,{children:"npm uninstall hast-util-is-element"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"turn-off-mdx-v1-compat",children:"Turn off MDX v1 compat"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 comes with ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"MDX v1 compatibility options"}),", that are turned on by default."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,i.jsxs)(n.h4,{id:"comments-option",children:[(0,i.jsx)(n.code,{children:"comments"})," option"]}),"\n",(0,i.jsx)(n.p,{children:"This option allows the usage of HTML comments inside MDX, while HTML comments are officially not supported anymore."}),"\n",(0,i.jsxs)(n.p,{children:["For MDX files, we recommend to progressively use MDX ",(0,i.jsx)(n.code,{children:"{/* comments */}"})," instead of HTML ",(0,i.jsx)(n.code,{children:"\x3c!-- comments --\x3e"}),", and then turn this compatibility option off."]}),"\n",(0,i.jsx)(n.admonition,{title:"Blog truncate marker",type:"info",children:(0,i.jsxs)(n.p,{children:["The default blog truncate marker now supports both ",(0,i.jsx)(n.code,{children:"\x3c!-- truncate --\x3e"})," and ",(0,i.jsx)(n.code,{children:"{/* truncate */}"}),"."]})}),"\n",(0,i.jsxs)(n.h4,{id:"admonitions-option",children:[(0,i.jsx)(n.code,{children:"admonitions"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/admonitions#specifying-title",children:"admonition title"})," syntax:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note\xa0Your Title\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus now implements admonitions with ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),"), and the syntax to provide a directive label requires square brackets:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note[Your Title]\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsx)(n.p,{children:"We recommend to progressively use the new Markdown directive label syntax, and then turn this compatibility option off."}),"\n",(0,i.jsxs)(n.h4,{id:"headingids-option",children:[(0,i.jsx)(n.code,{children:"headingIds"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/toc#heading-ids",children:"explicit heading id"})," syntax:"]}),"\n",(0,i.jsx)(o,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,i.jsxs)(n.p,{children:["This syntax is now invalid MDX, and would require to escape the ",(0,i.jsx)(n.code,{children:"{"})," character: ",(0,i.jsx)(n.code,{children:"\\{#my-explicit-id}"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"We recommend to keep this compatibility option on for now, until we provide a new syntax compatible with newer versions of MDX."}),"\n",(0,i.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsx)(n.p,{children:"In case of any upgrade problem, the first things to try are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["make sure all your docs compile in the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),", or using ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})]}),"\n",(0,i.jsxs)(n.li,{children:["delete ",(0,i.jsx)(n.code,{children:"node_modules"})," and ",(0,i.jsx)(n.code,{children:"package-lock.json"}),", and then run ",(0,i.jsx)(n.code,{children:"npm install"})," again"]}),"\n",(0,i.jsxs)(n.li,{children:["run ",(0,i.jsx)(n.code,{children:"docusaurus clear"})," to clear the caches"]}),"\n",(0,i.jsx)(n.li,{children:"remove third-party plugins that might not support Docusaurus v3"}),"\n",(0,i.jsx)(n.li,{children:"delete all your swizzled components"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Once you have tried that, you can ask for support through the following support channels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Please consider ",(0,i.jsx)(n.strong,{children:"our time is precious"}),". To ensure that your support request is not ignored, we kindly ask you to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["provide a ",(0,i.jsx)(n.strong,{children:"minimal"})," reproduction that we can easily run, ideally created with ",(0,i.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(n.li,{children:"provide a live deployment url showing the problem in action (if your site can build)"}),"\n",(0,i.jsx)(n.li,{children:'explain clearly the problem, much more than an ambiguous "it doesn\'t work"'}),"\n",(0,i.jsx)(n.li,{children:"include as much relevant material as possible: code snippets, repo url, git branch urls, full stack traces, screenshots and videos"}),"\n",(0,i.jsx)(n.li,{children:"present your request clearly, concisely, showing us that you have made an effort to help us help you"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}function u(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(27378);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/828be2eb.6e76e4dc.js b/assets/js/828be2eb.6e76e4dc.js new file mode 100644 index 000000000000..0252344effc1 --- /dev/null +++ b/assets/js/828be2eb.6e76e4dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36523],{61132:(e,n,s)=>{s.d(n,{Z:()=>o});var t=s(24246),i=(s(27378),s(40624));const r={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>S});var t=s(24246),i=s(27378),r=s(40624),o=s(75527),a=s(3620),c=s(44479),l=s(62821),u=s(52196),d=s(53589);function h(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function m(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function g(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,a.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),r=(0,l._X)(t),o=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){h(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[r,o]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=g(e),[o,a]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[l,u]=j({queryString:s,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,d.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{m&&a(m)}),[m]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var v=s(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function w(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){y(e,n,s[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function P({className:e,block:n,selectedValue:s,selectValue:i,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=c.indexOf(n),r=a[t].value;r!==s&&(l(n),i(r))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var s;n=null!==(s=c[t])&&void 0!==s?s:c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;var t;n=null!==(t=c[s])&&void 0!==t?t:c[c.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},i),{className:(0,r.Z)("tabs__item",x.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function I(e){const n=f(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,t.jsx)(P,w({},n,e)),(0,t.jsx)(D,w({},n,e))]})}function S(e){const n=(0,v.Z)();return(0,t.jsx)(I,O(w({},e),{children:m(e.children)}),String(n))}},66255:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var t=s(24246),i=s(71670),r=s(97555),o=s(61132);const a={id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},c="Docs Multi-instance",l={id:"guides/docs/multi-instance",title:"Docs Multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",source:"@site/docs/guides/docs/docs-multi-instance.mdx",sourceDirName:"guides/docs",slug:"/docs-multi-instance",permalink:"/docs/docs-multi-instance",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},sidebar:"docs",previous:{title:"Versioning",permalink:"/docs/versioning"},next:{title:"Blog",permalink:"/docs/blog"}},u={},d=[{value:"Use-cases",id:"use-cases",level:2},{value:"Mobile SDKs documentation",id:"mobile-sdks-documentation",level:3},{value:"Versioned and unversioned doc",id:"versioned-and-unversioned-doc",level:3},{value:"Setup",id:"setup",level:2},{value:"Versioned paths",id:"versioned-paths",level:2},{value:"Tagging new versions",id:"tagging-new-versions",level:2},{value:"Docs navbar items",id:"docs-navbar-items",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"docs-multi-instance",children:"Docs Multi-instance"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"@docusaurus/plugin-content-docs"})," plugin can support ",(0,t.jsx)(n.a,{href:"/docs/using-plugins#multi-instance-plugins-and-plugin-ids",children:"multi-instance"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This feature is only useful for ",(0,t.jsx)(n.a,{href:"/docs/versioning",children:"versioned documentation"}),". It is recommended to be familiar with docs versioning before reading this page. If you just want ",(0,t.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars"}),", you can do so within one plugin."]})}),"\n",(0,t.jsx)(n.h2,{id:"use-cases",children:"Use-cases"}),"\n",(0,t.jsx)(n.p,{children:"Sometimes you want a Docusaurus site to host 2 distinct sets of documentation (or more)."}),"\n",(0,t.jsx)(n.p,{children:"These documentations may even have different versioning/release lifecycles."}),"\n",(0,t.jsx)(n.h3,{id:"mobile-sdks-documentation",children:"Mobile SDKs documentation"}),"\n",(0,t.jsx)(n.p,{children:"If you build a cross-platform mobile SDK, you may have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Android SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v1.1"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["iOS SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v2.0"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you can use a distinct docs plugin instance per mobile SDK documentation."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"If each documentation instance is very large, you should rather create 2 distinct Docusaurus sites."}),(0,t.jsx)(n.p,{children:"If someone edits the iOS documentation, is it really useful to rebuild everything, including the whole Android documentation that did not change?"})]}),"\n",(0,t.jsx)(n.h3,{id:"versioned-and-unversioned-doc",children:"Versioned and unversioned doc"}),"\n",(0,t.jsx)(n.p,{children:'Sometimes, you want some documents to be versioned, while other documents are more "global", and it feels useless to version them.'}),"\n",(0,t.jsx)(n.p,{children:"We use this pattern on the Docusaurus website itself:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/docs",children:"/docs/*"})," section is versioned"]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/community/support",children:"/community/*"})," section is unversioned"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Suppose you have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Product: some versioned doc about your product"}),"\n",(0,t.jsx)(n.li,{children:"Community: some unversioned doc about the community around your product"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you should use the same plugin twice in your site configuration."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/preset-classic"})," already includes a docs plugin instance for you!"]})}),"\n",(0,t.jsx)(n.p,{children:"When using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n },\n ],\n ],\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"When not using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n ],\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Don't forget to assign a unique ",(0,t.jsx)(n.code,{children:"id"})," attribute to plugin instances."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["We consider that the ",(0,t.jsx)(n.code,{children:"product"}),' instance is the most important one, and make it the "default" instance by not assigning any ID.']})}),"\n",(0,t.jsx)(n.h2,{id:"versioned-paths",children:"Versioned paths"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will store versioned docs in a distinct folder."}),"\n",(0,t.jsx)(n.p,{children:"The default plugin instance will use these paths:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The other plugin instances (with an ",(0,t.jsx)(n.code,{children:"id"})," attribute) will use these paths:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can omit the ",(0,t.jsx)(n.code,{children:"id"})," attribute (defaults to ",(0,t.jsx)(n.code,{children:"default"}),") for one of the docs plugin instances."]}),(0,t.jsx)(n.p,{children:"The instance paths will be simpler, and retro-compatible with a single-instance setup."})]}),"\n",(0,t.jsx)(n.h2,{id:"tagging-new-versions",children:"Tagging new versions"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will have its own CLI command to tag a new version. They will be displayed if you run:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus -- --help\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus --help\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus --help\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the product/default docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the non-default/community docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version:community 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"docs-navbar-items",children:"Docs navbar items"}),"\n",(0,t.jsxs)(n.p,{children:["Each docs-related ",(0,t.jsx)(n.a,{href:"/docs/api/themes/configuration#navbar",children:"theme navbar items"})," take an optional ",(0,t.jsx)(n.code,{children:"docsPluginId"})," attribute."]}),"\n",(0,t.jsx)(n.p,{children:"For example, if you want to have one version dropdown for each mobile SDK (iOS and Android), you could do:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'ios',\n // highlight-end\n },\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'android',\n // highlight-end\n },\n ],\n },\n },\n};\n"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/828be2eb.7b533920.js b/assets/js/828be2eb.7b533920.js deleted file mode 100644 index bde024559546..000000000000 --- a/assets/js/828be2eb.7b533920.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36523],{61132:(e,n,s)=>{s.d(n,{Z:()=>o});var t=s(24246),i=(s(27378),s(40624));const r={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>S});var t=s(24246),i=s(27378),r=s(40624),o=s(75527),a=s(3620),c=s(44479),l=s(62821),u=s(52196),d=s(53589);function h(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function m(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function g(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,u.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,a.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),r=(0,l._X)(t),o=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){h(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[r,o]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=g(e),[o,a]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[l,u]=j({queryString:s,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,d.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{m&&a(m)}),[m]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var v=s(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function w(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){y(e,n,s[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function P({className:e,block:n,selectedValue:s,selectValue:i,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=c.indexOf(n),r=a[t].value;r!==s&&(l(n),i(r))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var s;n=null!==(s=c[t])&&void 0!==s?s:c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;var t;n=null!==(t=c[s])&&void 0!==t?t:c[c.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},i),{className:(0,r.Z)("tabs__item",x.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function I(e){const n=f(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,t.jsx)(P,w({},n,e)),(0,t.jsx)(D,w({},n,e))]})}function S(e){const n=(0,v.Z)();return(0,t.jsx)(I,O(w({},e),{children:m(e.children)}),String(n))}},66255:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var t=s(24246),i=s(71670),r=s(97555),o=s(61132);const a={id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},c="Docs Multi-instance",l={id:"guides/docs/multi-instance",title:"Docs Multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",source:"@site/docs/guides/docs/docs-multi-instance.mdx",sourceDirName:"guides/docs",slug:"/docs-multi-instance",permalink:"/docs/docs-multi-instance",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},sidebar:"docs",previous:{title:"Versioning",permalink:"/docs/versioning"},next:{title:"Blog",permalink:"/docs/blog"}},u={},d=[{value:"Use-cases",id:"use-cases",level:2},{value:"Mobile SDKs documentation",id:"mobile-sdks-documentation",level:3},{value:"Versioned and unversioned doc",id:"versioned-and-unversioned-doc",level:3},{value:"Setup",id:"setup",level:2},{value:"Versioned paths",id:"versioned-paths",level:2},{value:"Tagging new versions",id:"tagging-new-versions",level:2},{value:"Docs navbar items",id:"docs-navbar-items",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"docs-multi-instance",children:"Docs Multi-instance"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"@docusaurus/plugin-content-docs"})," plugin can support ",(0,t.jsx)(n.a,{href:"/docs/using-plugins#multi-instance-plugins-and-plugin-ids",children:"multi-instance"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This feature is only useful for ",(0,t.jsx)(n.a,{href:"/docs/versioning",children:"versioned documentation"}),". It is recommended to be familiar with docs versioning before reading this page. If you just want ",(0,t.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars"}),", you can do so within one plugin."]})}),"\n",(0,t.jsx)(n.h2,{id:"use-cases",children:"Use-cases"}),"\n",(0,t.jsx)(n.p,{children:"Sometimes you want a Docusaurus site to host 2 distinct sets of documentation (or more)."}),"\n",(0,t.jsx)(n.p,{children:"These documentations may even have different versioning/release lifecycles."}),"\n",(0,t.jsx)(n.h3,{id:"mobile-sdks-documentation",children:"Mobile SDKs documentation"}),"\n",(0,t.jsx)(n.p,{children:"If you build a cross-platform mobile SDK, you may have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Android SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v1.1"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["iOS SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v2.0"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you can use a distinct docs plugin instance per mobile SDK documentation."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"If each documentation instance is very large, you should rather create 2 distinct Docusaurus sites."}),(0,t.jsx)(n.p,{children:"If someone edits the iOS documentation, is it really useful to rebuild everything, including the whole Android documentation that did not change?"})]}),"\n",(0,t.jsx)(n.h3,{id:"versioned-and-unversioned-doc",children:"Versioned and unversioned doc"}),"\n",(0,t.jsx)(n.p,{children:'Sometimes, you want some documents to be versioned, while other documents are more "global", and it feels useless to version them.'}),"\n",(0,t.jsx)(n.p,{children:"We use this pattern on the Docusaurus website itself:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/docs",children:"/docs/*"})," section is versioned"]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/community/support",children:"/community/*"})," section is unversioned"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Suppose you have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Product: some versioned doc about your product"}),"\n",(0,t.jsx)(n.li,{children:"Community: some unversioned doc about the community around your product"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you should use the same plugin twice in your site configuration."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/preset-classic"})," already includes a docs plugin instance for you!"]})}),"\n",(0,t.jsx)(n.p,{children:"When using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n },\n ],\n ],\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"When not using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n ],\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Don't forget to assign a unique ",(0,t.jsx)(n.code,{children:"id"})," attribute to plugin instances."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["We consider that the ",(0,t.jsx)(n.code,{children:"product"}),' instance is the most important one, and make it the "default" instance by not assigning any ID.']})}),"\n",(0,t.jsx)(n.h2,{id:"versioned-paths",children:"Versioned paths"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will store versioned docs in a distinct folder."}),"\n",(0,t.jsx)(n.p,{children:"The default plugin instance will use these paths:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The other plugin instances (with an ",(0,t.jsx)(n.code,{children:"id"})," attribute) will use these paths:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can omit the ",(0,t.jsx)(n.code,{children:"id"})," attribute (defaults to ",(0,t.jsx)(n.code,{children:"default"}),") for one of the docs plugin instances."]}),(0,t.jsx)(n.p,{children:"The instance paths will be simpler, and retro-compatible with a single-instance setup."})]}),"\n",(0,t.jsx)(n.h2,{id:"tagging-new-versions",children:"Tagging new versions"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will have its own CLI command to tag a new version. They will be displayed if you run:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus -- --help\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus --help\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus --help\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the product/default docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the non-default/community docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version:community 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"docs-navbar-items",children:"Docs navbar items"}),"\n",(0,t.jsxs)(n.p,{children:["Each docs-related ",(0,t.jsx)(n.a,{href:"/docs/api/themes/configuration#navbar",children:"theme navbar items"})," take an optional ",(0,t.jsx)(n.code,{children:"docsPluginId"})," attribute."]}),"\n",(0,t.jsx)(n.p,{children:"For example, if you want to have one version dropdown for each mobile SDK (iOS and Android), you could do:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'ios',\n // highlight-end\n },\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'android',\n // highlight-end\n },\n ],\n },\n },\n};\n"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82de272a.154369da.js b/assets/js/82de272a.154369da.js deleted file mode 100644 index 0eb85c92afbb..000000000000 --- a/assets/js/82de272a.154369da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50298],{6785:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>d,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>a});var o=s(24246),n=s(71670);const c={},d="No sub-docs",r={id:"tests/category-links/no-subdoc/index",title:"No sub-docs",description:"The only doc of this category is the index page. It should show up as a regular doc link.",source:"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx",sourceDirName:"tests/category-links/no-subdoc",slug:"/tests/category-links/no-subdoc/",permalink:"/tests/docs/tests/category-links/no-subdoc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/no-index-doc/sample-doc"},next:{title:"Readme",permalink:"/tests/docs/tests/category-links/"}},i={},a=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"no-sub-docs",children:"No sub-docs"})}),"\n",(0,o.jsx)(t.p,{children:"The only doc of this category is the index page. It should show up as a regular doc link."})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>d});var o=s(27378);const n={},c=o.createContext(n);function d(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82de272a.949b6d95.js b/assets/js/82de272a.949b6d95.js new file mode 100644 index 000000000000..4f37317fa40f --- /dev/null +++ b/assets/js/82de272a.949b6d95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50298],{6785:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>d,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>i});var o=s(24246),n=s(71670);const c={},d="No sub-docs",r={id:"tests/category-links/no-subdoc/index",title:"No sub-docs",description:"The only doc of this category is the index page. It should show up as a regular doc link.",source:"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx",sourceDirName:"tests/category-links/no-subdoc",slug:"/tests/category-links/no-subdoc/",permalink:"/tests/docs/tests/category-links/no-subdoc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/no-index-doc/sample-doc"},next:{title:"Readme",permalink:"/tests/docs/tests/category-links/"}},a={},i=[];function l(e){const t={h1:"h1",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"no-sub-docs",children:"No sub-docs"})}),"\n",(0,o.jsx)(t.p,{children:"The only doc of this category is the index page. It should show up as a regular doc link."})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}u.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx)"},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>d});var o=s(27378);const n={},c=o.createContext(n);function d(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/85d61fbd.b65eb27b.js b/assets/js/85d61fbd.a565aa16.js similarity index 73% rename from assets/js/85d61fbd.b65eb27b.js rename to assets/js/85d61fbd.a565aa16.js index bc8520f7dc71..c6f0e71188cf 100644 --- a/assets/js/85d61fbd.b65eb27b.js +++ b/assets/js/85d61fbd.a565aa16.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69774],{61132:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>S});var n=r(24246),o=r(27378),a=r(40624),l=r(75527),s=r(3620),c=r(44479),i=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function h(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return h(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function f({value:e,tabValues:t}){return t.some((t=>t.value===e))}function v({queryString:e=!1,groupId:t}){const r=(0,s.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,i._X)(n),l=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[a,l]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,a=m(e),[l,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[i,u]=v({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),h=(()=>{const e=null!=i?i:p;return f({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),b(e)}),[u,b,a]),tabValues:a}}var y=r(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function x({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,l.o5)(),u=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==r&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var r;t=null!==(r=c[n])&&void 0!==r?r:c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;var n;t=null!==(n=c[r])&&void 0!==n?n:c[c.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",j.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,n.jsx)(x,w({},t,e)),(0,n.jsx)(P,w({},t,e))]})}function S(e){const t=(0,y.Z)();return(0,n.jsx)(I,k(w({},e),{children:h(e.children)}),String(t))}},88421:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(24246),o=r(71670),a=r(97555),l=r(61132);const s={sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},c="\ud83d\udce6 theme-live-codeblock",i={id:"api/themes/theme-live-codeblock",title:"\ud83d\udce6 theme-live-codeblock",description:"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.",source:"@site/docs/api/themes/theme-live-codeblock.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"},next:{title:"\ud83d\udce6 theme-search-algolia",permalink:"/docs/api/themes/@docusaurus/theme-search-algolia"}},u={},d=[{value:"Configuration",id:"configuration",level:3}];function p(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-theme-live-codeblock",children:"\ud83d\udce6 theme-live-codeblock"})}),"\n",(0,n.jsxs)(t.p,{children:["This theme provides a ",(0,n.jsx)(t.code,{children:"@theme/CodeBlock"})," component that is powered by react-live. You can read more on ",(0,n.jsx)(t.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," documentation."]}),"\n",(0,n.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,n.jsx)(t.h3,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: ['@docusaurus/theme-live-codeblock'],\n themeConfig: {\n liveCodeBlock: {\n /**\n * The position of the live playground, above or under the editor\n * Possible values: \"top\" | \"bottom\"\n */\n playgroundPosition: 'bottom',\n },\n },\n};\n"})})]})}function b(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>l});var n=r(27378);const o={},a=n.createContext(o);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69774],{61132:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>S});var n=r(24246),o=r(27378),a=r(40624),l=r(75527),s=r(3620),c=r(44479),i=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function h(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return h(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function f({value:e,tabValues:t}){return t.some((t=>t.value===e))}function v({queryString:e=!1,groupId:t}){const r=(0,s.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,i._X)(n),l=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[a,l]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,a=m(e),[l,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[i,u]=v({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),h=(()=>{const e=null!=i?i:p;return f({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),b(e)}),[u,b,a]),tabValues:a}}var y=r(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function x({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,l.o5)(),u=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==r&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var r;t=null!==(r=c[n])&&void 0!==r?r:c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;var n;t=null!==(n=c[r])&&void 0!==n?n:c[c.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",j.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,n.jsx)(x,w({},t,e)),(0,n.jsx)(P,w({},t,e))]})}function S(e){const t=(0,y.Z)();return(0,n.jsx)(I,k(w({},e),{children:h(e.children)}),String(t))}},88421:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(24246),o=r(71670),a=r(97555),l=r(61132);const s={sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},c="\ud83d\udce6 theme-live-codeblock",i={id:"api/themes/theme-live-codeblock",title:"\ud83d\udce6 theme-live-codeblock",description:"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.",source:"@site/docs/api/themes/theme-live-codeblock.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"},next:{title:"\ud83d\udce6 theme-search-algolia",permalink:"/docs/api/themes/@docusaurus/theme-search-algolia"}},u={},d=[{value:"Configuration",id:"configuration",level:3}];function p(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-theme-live-codeblock",children:"\ud83d\udce6 theme-live-codeblock"})}),"\n",(0,n.jsxs)(t.p,{children:["This theme provides a ",(0,n.jsx)(t.code,{children:"@theme/CodeBlock"})," component that is powered by react-live. You can read more on ",(0,n.jsx)(t.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," documentation."]}),"\n",(0,n.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,n.jsx)(t.h3,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: ['@docusaurus/theme-live-codeblock'],\n themeConfig: {\n liveCodeBlock: {\n /**\n * The position of the live playground, above or under the editor\n * Possible values: \"top\" | \"bottom\"\n */\n playgroundPosition: 'bottom',\n },\n },\n};\n"})})]})}function b(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>l});var n=r(27378);const o={},a=n.createContext(o);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/86e3a3d9.bb7dc239.js b/assets/js/86e3a3d9.414cd1e7.js similarity index 69% rename from assets/js/86e3a3d9.bb7dc239.js rename to assets/js/86e3a3d9.414cd1e7.js index 2aa2be0ff3eb..b03d24d4c718 100644 --- a/assets/js/86e3a3d9.bb7dc239.js +++ b/assets/js/86e3a3d9.414cd1e7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15158],{24239:(e,t,n)=>{n.d(t,{Z:()=>w});var o=n(24246),r=(n(27378),n(40624)),c=n(97298),s=n(41428),a=n(7812),i=n(64149),l=n(36712),d=n(52615);const u={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,o.jsx)(s.Z,{href:e,className:(0,r.Z)("card padding--lg",u.cardContainer),children:t})}function h({href:e,icon:t,title:n,description:c}){return(0,o.jsxs)(m,{href:e,children:[(0,o.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",u.cardTitle),title:n,children:[t," ",n]}),c&&(0,o.jsx)("p",{className:(0,r.Z)("text--truncate",u.cardDescription),title:c,children:c})]})}function g({item:e}){const t=(0,c.LM)(e),n=function(){const{selectMessage:e}=(0,a.c)();return t=>e(t,(0,l.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,o.jsx)(h,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(r=e.description)&&void 0!==r?r:n(e.items.length)}):null;var r}function f({item:e}){const t=(0,i.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const r=(0,c.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,o.jsx)(h,{href:e.href,icon:t,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==r?void 0:r.description})}function p({item:e}){switch(e.type){case"link":return(0,o.jsx)(f,{item:e});case"category":return(0,o.jsx)(g,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x({className:e}){const t=(0,c.jA)();return(0,o.jsx)(w,{items:t.items,className:e})}function w(e){const{items:t,className:n}=e;if(!t)return(0,o.jsx)(x,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),o.forEach((function(t){y(e,t,n[t])}))}return e}({},e));const s=(0,c.MN)(t);return(0,o.jsx)("section",{className:(0,r.Z)("row",n),children:s.map(((e,t)=>(0,o.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,o.jsx)(p,{item:e})},t)))})}},2187:(e,t,n)=>{function o(...e){return n(92053).jA(...e)}n.d(t,{jA:()=>o})},7812:(e,t,n)=>{n.d(t,{c:()=>l});var o=n(27378),r=n(4423);const c=["zero","one","two","few","many","other"];function s(e){return c.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,o.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),a}}),[e])}function l(){const e=i();return{selectMessage:(t,n)=>function(e,t,n){const o=e.split("|");if(1===o.length)return o[0];o.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);const r=n.select(t),c=n.pluralForms.indexOf(r);return o[Math.min(c,o.length-1)]}(n,t,e)}}},36911:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=n(24246),r=n(71670),c=n(24239),s=n(2187);const a={},i="Category with a doc of category's name",l={id:"tests/category-links/with-category-name-doc/with-category-name-doc",title:"Category with a doc of category's name",description:"You should be able to click on the category and browse this /.md doc",source:"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx",sourceDirName:"tests/category-links/with-category-name-doc",slug:"/tests/category-links/with-category-name-doc/",permalink:"/tests/docs/tests/category-links/with-category-name-doc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/regular-category/sample-doc"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},d={},u=[{value:"Intro",id:"intro",level:2},{value:"Category content",id:"category-content",level:2}];function m(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"category-with-a-doc-of-categorys-name",children:"Category with a doc of category's name"})}),"\n",(0,o.jsxs)(t.p,{children:["You should be able to click on the category and browse this ",(0,o.jsx)(t.code,{children:"<categoryName>/<categoryName>.md"})," doc"]}),"\n",(0,o.jsx)(t.h2,{id:"intro",children:"Intro"}),"\n",(0,o.jsx)(t.p,{children:"Some intro text"}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"It is also possible to render the card items for that category thanks to MDX:"})}),"\n",(0,o.jsx)(t.h2,{id:"category-content",children:"Category content"}),"\n","\n",(0,o.jsx)(c.Z,{items:(0,s.jA)().items})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}h.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>s});var o=n(27378);const r={},c=o.createContext(r);function s(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15158],{24239:(e,t,n)=>{n.d(t,{Z:()=>w});var o=n(24246),r=(n(27378),n(40624)),c=n(97298),s=n(41428),a=n(7812),i=n(64149),l=n(36712),d=n(52615);const u={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,o.jsx)(s.Z,{href:e,className:(0,r.Z)("card padding--lg",u.cardContainer),children:t})}function h({href:e,icon:t,title:n,description:c}){return(0,o.jsxs)(m,{href:e,children:[(0,o.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",u.cardTitle),title:n,children:[t," ",n]}),c&&(0,o.jsx)("p",{className:(0,r.Z)("text--truncate",u.cardDescription),title:c,children:c})]})}function g({item:e}){const t=(0,c.LM)(e),n=function(){const{selectMessage:e}=(0,a.c)();return t=>e(t,(0,l.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,o.jsx)(h,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(r=e.description)&&void 0!==r?r:n(e.items.length)}):null;var r}function f({item:e}){const t=(0,i.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const r=(0,c.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,o.jsx)(h,{href:e.href,icon:t,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==r?void 0:r.description})}function p({item:e}){switch(e.type){case"link":return(0,o.jsx)(f,{item:e});case"category":return(0,o.jsx)(g,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x({className:e}){const t=(0,c.jA)();return(0,o.jsx)(w,{items:t.items,className:e})}function w(e){const{items:t,className:n}=e;if(!t)return(0,o.jsx)(x,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),o.forEach((function(t){y(e,t,n[t])}))}return e}({},e));const s=(0,c.MN)(t);return(0,o.jsx)("section",{className:(0,r.Z)("row",n),children:s.map(((e,t)=>(0,o.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,o.jsx)(p,{item:e})},t)))})}},2187:(e,t,n)=>{function o(...e){return n(92053).jA(...e)}n.d(t,{jA:()=>o})},7812:(e,t,n)=>{n.d(t,{c:()=>l});var o=n(27378),r=n(4423);const c=["zero","one","two","few","many","other"];function s(e){return c.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,o.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),a}}),[e])}function l(){const e=i();return{selectMessage:(t,n)=>function(e,t,n){const o=e.split("|");if(1===o.length)return o[0];o.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);const r=n.select(t),c=n.pluralForms.indexOf(r);return o[Math.min(c,o.length-1)]}(n,t,e)}}},36911:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=n(24246),r=n(71670),c=n(24239),s=n(2187);const a={},i="Category with a doc of category's name",l={id:"tests/category-links/with-category-name-doc/with-category-name-doc",title:"Category with a doc of category's name",description:"You should be able to click on the category and browse this /.md doc",source:"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx",sourceDirName:"tests/category-links/with-category-name-doc",slug:"/tests/category-links/with-category-name-doc/",permalink:"/tests/docs/tests/category-links/with-category-name-doc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/regular-category/sample-doc"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},d={},u=[{value:"Intro",id:"intro",level:2},{value:"Category content",id:"category-content",level:2}];function m(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"category-with-a-doc-of-categorys-name",children:"Category with a doc of category's name"})}),"\n",(0,o.jsxs)(t.p,{children:["You should be able to click on the category and browse this ",(0,o.jsx)(t.code,{children:"<categoryName>/<categoryName>.md"})," doc"]}),"\n",(0,o.jsx)(t.h2,{id:"intro",children:"Intro"}),"\n",(0,o.jsx)(t.p,{children:"Some intro text"}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"It is also possible to render the card items for that category thanks to MDX:"})}),"\n",(0,o.jsx)(t.h2,{id:"category-content",children:"Category content"}),"\n","\n",(0,o.jsx)(c.Z,{items:(0,s.jA)().items})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}h.displayName="MDXContent(_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>s});var o=n(27378);const r={},c=o.createContext(r);function s(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/87e9b44c.bb4571b1.js b/assets/js/87e9b44c.831666b0.js similarity index 74% rename from assets/js/87e9b44c.bb4571b1.js rename to assets/js/87e9b44c.831666b0.js index 2af066c76fa6..1297cf608056 100644 --- a/assets/js/87e9b44c.bb4571b1.js +++ b/assets/js/87e9b44c.831666b0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8912],{24239:(e,t,n)=>{n.d(t,{Z:()=>x});var s=n(24246),i=(n(27378),n(40624)),r=n(97298),o=n(41428),l=n(7812),c=n(64149),a=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,s.jsx)(o.Z,{href:e,className:(0,i.Z)("card padding--lg",d.cardContainer),children:t})}function f({href:e,icon:t,title:n,description:r}){return(0,s.jsxs)(m,{href:e,children:[(0,s.jsxs)(u.Z,{as:"h2",className:(0,i.Z)("text--truncate",d.cardTitle),title:n,children:[t," ",n]}),r&&(0,s.jsx)("p",{className:(0,i.Z)("text--truncate",d.cardDescription),title:r,children:r})]})}function p({item:e}){const t=(0,r.LM)(e),n=function(){const{selectMessage:e}=(0,l.c)();return t=>e(t,(0,a.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,s.jsx)(f,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(i=e.description)&&void 0!==i?i:n(e.items.length)}):null;var i}function h({item:e}){const t=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const i=(0,r.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var o;return(0,s.jsx)(f,{href:e.href,icon:t,title:e.label,description:null!==(o=e.description)&&void 0!==o?o:null==i?void 0:i.description})}function g({item:e}){switch(e.type){case"link":return(0,s.jsx)(h,{item:e});case"category":return(0,s.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y({className:e}){const t=(0,r.jA)();return(0,s.jsx)(x,{items:t.items,className:e})}function x(e){const{items:t,className:n}=e;if(!t)return(0,s.jsx)(y,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(t){b(e,t,n[t])}))}return e}({},e));const o=(0,r.MN)(t);return(0,s.jsx)("section",{className:(0,i.Z)("row",n),children:o.map(((e,t)=>(0,s.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,s.jsx)(g,{item:e})},t)))})}},7812:(e,t,n)=>{n.d(t,{c:()=>a});var s=n(27378),i=n(4423);const r=["zero","one","two","few","many","other"];function o(e){return r.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function a(){const e=c();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const i=n.select(t),r=n.pluralForms.indexOf(i);return s[Math.min(r,s.length-1)]}(n,t,e)}}},24163:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var s=n(24246),i=n(71670),r=n(24239);const o={unlisted:!0,tags:["visibility","unlisted"]},l="Some Unlisteds - Subcategory index unlisted",c={id:"tests/visibility/some-unlisteds/unlisted-subcategory/index",title:"Some Unlisteds - Subcategory index unlisted",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx",sourceDirName:"tests/visibility/some-unlisteds/unlisted-subcategory",slug:"/tests/visibility/some-unlisteds/unlisted-subcategory/",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},a={},u=[];function d(e){const t={h1:"h1",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"some-unlisteds---subcategory-index-unlisted",children:"Some Unlisteds - Subcategory index unlisted"})}),"\n",(0,s.jsx)(t.p,{children:"Doc with unlisted front matter"}),"\n","\n",(0,s.jsx)(r.Z,{})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}m.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var s=n(27378);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8912],{24239:(e,t,n)=>{n.d(t,{Z:()=>x});var s=n(24246),i=(n(27378),n(40624)),r=n(97298),o=n(41428),l=n(7812),c=n(64149),a=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,s.jsx)(o.Z,{href:e,className:(0,i.Z)("card padding--lg",d.cardContainer),children:t})}function f({href:e,icon:t,title:n,description:r}){return(0,s.jsxs)(m,{href:e,children:[(0,s.jsxs)(u.Z,{as:"h2",className:(0,i.Z)("text--truncate",d.cardTitle),title:n,children:[t," ",n]}),r&&(0,s.jsx)("p",{className:(0,i.Z)("text--truncate",d.cardDescription),title:r,children:r})]})}function h({item:e}){const t=(0,r.LM)(e),n=function(){const{selectMessage:e}=(0,l.c)();return t=>e(t,(0,a.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,s.jsx)(f,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(i=e.description)&&void 0!==i?i:n(e.items.length)}):null;var i}function p({item:e}){const t=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const i=(0,r.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var o;return(0,s.jsx)(f,{href:e.href,icon:t,title:e.label,description:null!==(o=e.description)&&void 0!==o?o:null==i?void 0:i.description})}function g({item:e}){switch(e.type){case"link":return(0,s.jsx)(p,{item:e});case"category":return(0,s.jsx)(h,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y({className:e}){const t=(0,r.jA)();return(0,s.jsx)(x,{items:t.items,className:e})}function x(e){const{items:t,className:n}=e;if(!t)return(0,s.jsx)(y,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(t){b(e,t,n[t])}))}return e}({},e));const o=(0,r.MN)(t);return(0,s.jsx)("section",{className:(0,i.Z)("row",n),children:o.map(((e,t)=>(0,s.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,s.jsx)(g,{item:e})},t)))})}},7812:(e,t,n)=>{n.d(t,{c:()=>a});var s=n(27378),i=n(4423);const r=["zero","one","two","few","many","other"];function o(e){return r.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function a(){const e=c();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const i=n.select(t),r=n.pluralForms.indexOf(i);return s[Math.min(r,s.length-1)]}(n,t,e)}}},24163:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var s=n(24246),i=n(71670),r=n(24239);const o={unlisted:!0,tags:["visibility","unlisted"]},l="Some Unlisteds - Subcategory index unlisted",c={id:"tests/visibility/some-unlisteds/unlisted-subcategory/index",title:"Some Unlisteds - Subcategory index unlisted",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx",sourceDirName:"tests/visibility/some-unlisteds/unlisted-subcategory",slug:"/tests/visibility/some-unlisteds/unlisted-subcategory/",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/",draft:!1,unlisted:!0,tags:[{inline:!1,label:"Visibility",permalink:"/tests/docs/tags/visibility"},{inline:!1,label:"Unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},a={},u=[];function d(e){const t={h1:"h1",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"some-unlisteds---subcategory-index-unlisted",children:"Some Unlisteds - Subcategory index unlisted"})}),"\n",(0,s.jsx)(t.p,{children:"Doc with unlisted front matter"}),"\n","\n",(0,s.jsx)(r.Z,{})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}m.displayName="MDXContent(_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var s=n(27378);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88d0be04.c8c30418.js b/assets/js/88d0be04.99ab8af0.js similarity index 82% rename from assets/js/88d0be04.c8c30418.js rename to assets/js/88d0be04.99ab8af0.js index f17876e7f52e..a2ca3e741dc6 100644 --- a/assets/js/88d0be04.c8c30418.js +++ b/assets/js/88d0be04.99ab8af0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40151],{16652:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(24246),l=(n(27378),n(40624)),o=n(14929),i=n(4646),c=n(36712);const s={tocCollapsibleButton:"tocCollapsibleButton_IbtT",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_Nor3"};function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function u(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function b(e){var{collapsed:t}=e,n=u(e,["collapsed"]);return(0,r.jsx)("button",d(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){a(e,t,n[t])}))}return e}({type:"button"},n),{className:(0,l.Z)("clean-btn",s.tocCollapsibleButton,!t&&s.tocCollapsibleButtonExpanded,n.className),children:(0,r.jsx)(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}))}const v={tocCollapsible:"tocCollapsible_BEWm",tocCollapsibleContent:"tocCollapsibleContent_FG8F",tocCollapsibleExpanded:"tocCollapsibleExpanded_FzA_"};function f({toc:e,className:t,minHeadingLevel:n,maxHeadingLevel:c}){const{collapsed:s,toggleCollapsed:a}=(0,o.u)({initialState:!0});return(0,r.jsxs)("div",{className:(0,l.Z)(v.tocCollapsible,!s&&v.tocCollapsibleExpanded,t),children:[(0,r.jsx)(b,{collapsed:s,onClick:a}),(0,r.jsx)(o.z,{lazy:!0,className:v.tocCollapsibleContent,collapsed:s,children:(0,r.jsx)(i.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:c})})]})}},41124:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),l=(n(27378),n(4646));const o={tableOfContentsInline:"tableOfContentsInline_2sru"};function i({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,r.jsx)("div",{className:o.tableOfContentsInline,children:(0,r.jsx)(l.Z,{toc:e,minHeadingLevel:t,maxHeadingLevel:n,className:"table-of-contents",linkClassName:null})})}},4646:(e,t,n)=>{n.d(t,{Z:()=>j});var r=n(24246),l=n(27378),o=n(73919);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function d(e){const t=e.map((e=>s(c({},e),{parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t}));const r=[];return t.forEach((e=>{const{parentIndex:n}=e,l=a(e,["parentIndex"]);n>=0?t[n].children.push(l):r.push(l)})),r}function u({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return e.flatMap((e=>{const r=u({toc:e.children,minHeadingLevel:t,maxHeadingLevel:n});return function(e){return e.level>=t&&e.level<=n}(e)?[s(c({},e),{children:r})]:r}))}function b(e){const t=e.getBoundingClientRect();return t.top===t.bottom?b(e.parentNode):t}function v(e,{anchorTopOffset:t}){const n=e.find((e=>b(e).top>=t));if(n){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(n))?n:null!==(r=e[e.indexOf(n)-1])&&void 0!==r?r:null;var r}var l;return null!==(l=e[e.length-1])&&void 0!==l?l:null}function f(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,o.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function p(e){const t=(0,l.useRef)(void 0),n=f();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:t}){const n=[];for(let r=e;r<=t;r+=1)n.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(n.join()))}({minHeadingLevel:o,maxHeadingLevel:i}),s=v(c,{anchorTopOffset:n.current}),a=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===a)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}var m=n(41428);function h({toc:e,className:t,linkClassName:n,isChild:l}){return e.length?(0,r.jsx)("ul",{className:l?void 0:t,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(m.Z,{to:`#${e.id}`,className:null!=n?n:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:n})]},e.id)))}):null}const g=l.memo(h);function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function j(e){var{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:s,maxHeadingLevel:a}=e,b=y(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const v=(0,o.L)(),f=null!=s?s:v.tableOfContents.minHeadingLevel,m=null!=a?a:v.tableOfContents.maxHeadingLevel,h=function({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,l.useMemo)((()=>u({toc:d(e),minHeadingLevel:t,maxHeadingLevel:n})),[e,t,n])}({toc:t,minHeadingLevel:f,maxHeadingLevel:m});return p((0,l.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:f,maxHeadingLevel:m}}),[i,c,f,m])),(0,r.jsx)(g,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){O(e,t,n[t])}))}return e}({toc:h,className:n,linkClassName:i},b))}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),l=(n(27378),n(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:o.browserWindow,style:s(c({},i),{minHeight:t}),children:[(0,r.jsxs)("div",{className:o.browserWindowHeader,children:[(0,r.jsxs)("div",{className:o.buttons,children:[(0,r.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,l.Z)(o.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar})]})})]}),(0,r.jsx)("div",{className:o.browserWindowBody,style:a,children:e})]})}},1439:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>f,frontMatter:()=>s,metadata:()=>d,toc:()=>b});var r=n(24246),l=n(71670),o=n(6698),i=n(41124),c=n(16652);const s={toc_min_heading_level:2,toc_max_heading_level:6},a=void 0,d={id:"toc/toc-test-good",title:"toc-test-good",description:"Test the TOC behavior of a real-world MD doc with valid headings",source:"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx",sourceDirName:"toc",slug:"/toc/toc-test-good",permalink:"/tests/docs/toc/toc-test-good",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:6},sidebar:"sidebar",previous:{title:"toc-test-bad",permalink:"/tests/docs/toc/toc-test-bad"}},u={},b=[{value:"lvl 2",id:"lvl-2",level:2},{value:"lvl 3",id:"lvl-3",level:3},{value:"lvl 4",id:"lvl-4",level:4},{value:"lvl 5",id:"lvl-5",level:5},{value:"lvl 6",id:"lvl-6",level:6},{value:"lvl 2",id:"lvl-2-1",level:2},{value:"lvl 3",id:"lvl-3-1",level:3},{value:"lvl 4",id:"lvl-4-1",level:4},{value:"lvl 5",id:"lvl-5-1",level:5},{value:"lvl 6",id:"lvl-6-1",level:6}];function v(e){const t={h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",hr:"hr",p:"p",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Test the TOC behavior of a real-world MD doc with valid headings"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"lvl-2",children:"lvl 2"}),"\n",(0,r.jsx)(t.h3,{id:"lvl-3",children:"lvl 3"}),"\n",(0,r.jsx)(t.h4,{id:"lvl-4",children:"lvl 4"}),"\n",(0,r.jsx)(t.h5,{id:"lvl-5",children:"lvl 5"}),"\n",(0,r.jsx)(t.h6,{id:"lvl-6",children:"lvl 6"}),"\n",(0,r.jsx)(t.h2,{id:"lvl-2-1",children:"lvl 2"}),"\n",(0,r.jsx)(t.h3,{id:"lvl-3-1",children:"lvl 3"}),"\n",(0,r.jsx)(t.h4,{id:"lvl-4-1",children:"lvl 4"}),"\n",(0,r.jsx)(t.h5,{id:"lvl-5-1",children:"lvl 5"}),"\n",(0,r.jsx)(t.h6,{id:"lvl-6-1",children:"lvl 6"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.p,{children:"INLINE:"}),"\n","\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(i.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.p,{children:"COLLAPSIBLE:"}),"\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(c.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})})]})}function f(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(v,{...e})}):v(e)}f.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-test-good.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>i});var r=n(27378);const l={},o=r.createContext(l);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40151],{16652:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(24246),l=(n(27378),n(40624)),o=n(14929),i=n(4646),c=n(36712);const s={tocCollapsibleButton:"tocCollapsibleButton_IbtT",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_Nor3"};function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function u(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function b(e){var{collapsed:t}=e,n=u(e,["collapsed"]);return(0,r.jsx)("button",d(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){a(e,t,n[t])}))}return e}({type:"button"},n),{className:(0,l.Z)("clean-btn",s.tocCollapsibleButton,!t&&s.tocCollapsibleButtonExpanded,n.className),children:(0,r.jsx)(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}))}const v={tocCollapsible:"tocCollapsible_BEWm",tocCollapsibleContent:"tocCollapsibleContent_FG8F",tocCollapsibleExpanded:"tocCollapsibleExpanded_FzA_"};function f({toc:e,className:t,minHeadingLevel:n,maxHeadingLevel:c}){const{collapsed:s,toggleCollapsed:a}=(0,o.u)({initialState:!0});return(0,r.jsxs)("div",{className:(0,l.Z)(v.tocCollapsible,!s&&v.tocCollapsibleExpanded,t),children:[(0,r.jsx)(b,{collapsed:s,onClick:a}),(0,r.jsx)(o.z,{lazy:!0,className:v.tocCollapsibleContent,collapsed:s,children:(0,r.jsx)(i.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:c})})]})}},41124:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(24246),l=(n(27378),n(4646));const o={tableOfContentsInline:"tableOfContentsInline_2sru"};function i({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,r.jsx)("div",{className:o.tableOfContentsInline,children:(0,r.jsx)(l.Z,{toc:e,minHeadingLevel:t,maxHeadingLevel:n,className:"table-of-contents",linkClassName:null})})}},4646:(e,t,n)=>{n.d(t,{Z:()=>j});var r=n(24246),l=n(27378),o=n(73919);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function d(e){const t=e.map((e=>s(c({},e),{parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t}));const r=[];return t.forEach((e=>{const{parentIndex:n}=e,l=a(e,["parentIndex"]);n>=0?t[n].children.push(l):r.push(l)})),r}function u({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return e.flatMap((e=>{const r=u({toc:e.children,minHeadingLevel:t,maxHeadingLevel:n});return function(e){return e.level>=t&&e.level<=n}(e)?[s(c({},e),{children:r})]:r}))}function b(e){const t=e.getBoundingClientRect();return t.top===t.bottom?b(e.parentNode):t}function v(e,{anchorTopOffset:t}){const n=e.find((e=>b(e).top>=t));if(n){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(n))?n:null!==(r=e[e.indexOf(n)-1])&&void 0!==r?r:null;var r}var l;return null!==(l=e[e.length-1])&&void 0!==l?l:null}function f(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,o.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function p(e){const t=(0,l.useRef)(void 0),n=f();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:t}){const n=[];for(let r=e;r<=t;r+=1)n.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(n.join()))}({minHeadingLevel:o,maxHeadingLevel:i}),s=v(c,{anchorTopOffset:n.current}),a=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===a)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}var m=n(41428);function h({toc:e,className:t,linkClassName:n,isChild:l}){return e.length?(0,r.jsx)("ul",{className:l?void 0:t,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(m.Z,{to:`#${e.id}`,className:null!=n?n:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:n})]},e.id)))}):null}const g=l.memo(h);function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function j(e){var{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:s,maxHeadingLevel:a}=e,b=y(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const v=(0,o.L)(),f=null!=s?s:v.tableOfContents.minHeadingLevel,m=null!=a?a:v.tableOfContents.maxHeadingLevel,h=function({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,l.useMemo)((()=>u({toc:d(e),minHeadingLevel:t,maxHeadingLevel:n})),[e,t,n])}({toc:t,minHeadingLevel:f,maxHeadingLevel:m});return p((0,l.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:f,maxHeadingLevel:m}}),[i,c,f,m])),(0,r.jsx)(g,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){O(e,t,n[t])}))}return e}({toc:h,className:n,linkClassName:i},b))}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),l=(n(27378),n(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:o.browserWindow,style:s(c({},i),{minHeight:t}),children:[(0,r.jsxs)("div",{className:o.browserWindowHeader,children:[(0,r.jsxs)("div",{className:o.buttons,children:[(0,r.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,l.Z)(o.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar})]})})]}),(0,r.jsx)("div",{className:o.browserWindowBody,style:a,children:e})]})}},1439:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>f,frontMatter:()=>s,metadata:()=>d,toc:()=>b});var r=n(24246),l=n(71670),o=n(6698),i=n(41124),c=n(16652);const s={toc_min_heading_level:2,toc_max_heading_level:6},a=void 0,d={id:"toc/toc-test-good",title:"toc-test-good",description:"Test the TOC behavior of a real-world MD doc with valid headings",source:"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx",sourceDirName:"toc",slug:"/toc/toc-test-good",permalink:"/tests/docs/toc/toc-test-good",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:6},sidebar:"sidebar",previous:{title:"toc-test-bad",permalink:"/tests/docs/toc/toc-test-bad"}},u={},b=[{value:"lvl 2",id:"lvl-2",level:2},{value:"lvl 3",id:"lvl-3",level:3},{value:"lvl 4",id:"lvl-4",level:4},{value:"lvl 5",id:"lvl-5",level:5},{value:"lvl 6",id:"lvl-6",level:6},{value:"lvl 2",id:"lvl-2-1",level:2},{value:"lvl 3",id:"lvl-3-1",level:3},{value:"lvl 4",id:"lvl-4-1",level:4},{value:"lvl 5",id:"lvl-5-1",level:5},{value:"lvl 6",id:"lvl-6-1",level:6}];function v(e){const t={h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",hr:"hr",p:"p",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Test the TOC behavior of a real-world MD doc with valid headings"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"lvl-2",children:"lvl 2"}),"\n",(0,r.jsx)(t.h3,{id:"lvl-3",children:"lvl 3"}),"\n",(0,r.jsx)(t.h4,{id:"lvl-4",children:"lvl 4"}),"\n",(0,r.jsx)(t.h5,{id:"lvl-5",children:"lvl 5"}),"\n",(0,r.jsx)(t.h6,{id:"lvl-6",children:"lvl 6"}),"\n",(0,r.jsx)(t.h2,{id:"lvl-2-1",children:"lvl 2"}),"\n",(0,r.jsx)(t.h3,{id:"lvl-3-1",children:"lvl 3"}),"\n",(0,r.jsx)(t.h4,{id:"lvl-4-1",children:"lvl 4"}),"\n",(0,r.jsx)(t.h5,{id:"lvl-5-1",children:"lvl 5"}),"\n",(0,r.jsx)(t.h6,{id:"lvl-6-1",children:"lvl 6"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.p,{children:"INLINE:"}),"\n","\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(i.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.p,{children:"COLLAPSIBLE:"}),"\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(c.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})})]})}function f(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(v,{...e})}):v(e)}f.displayName="MDXContent(_dogfooding/_docs tests/toc/toc-test-good.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>i});var r=n(27378);const l={},o=r.createContext(l);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/891c0dad.8b56e88f.js b/assets/js/891c0dad.8b56e88f.js new file mode 100644 index 000000000000..b06029187a04 --- /dev/null +++ b/assets/js/891c0dad.8b56e88f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20663],{3818:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=s(27378);function r({children:e="Boom!",message:n="Boom!\nSomething bad happened, but you can try again!",cause:s}){const[r,o]=(0,i.useState)(!1);if(r)throw new Error(n,{cause:s?new Error(s):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}},62604:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670),r=s(3818);const o={sidebar_label:"Client API"},l="Docusaurus Client API",a={id:"docusaurus-core",title:"Docusaurus Client API",description:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.",source:"@site/docs/docusaurus-core.mdx",sourceDirName:".",slug:"/docusaurus-core",permalink:"/docs/docusaurus-core",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{sidebar_label:"Client API"},sidebar:"api",previous:{title:"CLI",permalink:"/docs/cli"},next:{title:"docusaurus.config.js",permalink:"/docs/api/docusaurus-config"}},c={},d=[{value:"Components",id:"components",level:2},{value:"<code><ErrorBoundary /></code>",id:"errorboundary",level:3},{value:"Props",id:"errorboundary-props",level:4},{value:"<code><Head/></code>",id:"head",level:3},{value:"<code><Link/></code>",id:"link",level:3},{value:"<code>to</code>: string",id:"to-string",level:4},{value:"<code><Redirect/></code>",id:"redirect",level:3},{value:"<code><BrowserOnly/></code>",id:"browseronly",level:3},{value:"Props",id:"browseronly-props",level:4},{value:"Example with code",id:"browseronly-example-code",level:4},{value:"Example with a library",id:"browseronly-example-library",level:4},{value:"<code><Interpolate/></code>",id:"interpolate",level:3},{value:"Props",id:"interpolate-props",level:4},{value:"<code><Translate/></code>",id:"translate",level:3},{value:"Props",id:"translate-props",level:4},{value:"Example",id:"example",level:4},{value:"Hooks",id:"hooks",level:2},{value:"<code>useDocusaurusContext</code>",id:"useDocusaurusContext",level:3},{value:"<code>useIsBrowser</code>",id:"useIsBrowser",level:3},{value:"<code>useBaseUrl</code>",id:"useBaseUrl",level:3},{value:"Options",id:"options",level:4},{value:"Example usage:",id:"example-usage",level:4},{value:"<code>useBaseUrlUtils</code>",id:"useBaseUrlUtils",level:3},{value:"<code>useGlobalData</code>",id:"useGlobalData",level:3},{value:"<code>usePluginData</code>",id:"usePluginData",level:3},{value:"<code>useAllPluginInstancesData</code>",id:"useAllPluginInstancesData",level:3},{value:"<code>useBrokenLinks</code>",id:"useBrokenLinks",level:3},{value:"Functions",id:"functions",level:2},{value:"<code>interpolate</code>",id:"interpolate-1",level:3},{value:"Signature",id:"signature",level:4},{value:"Example",id:"example-1",level:4},{value:"<code>translate</code>",id:"translate-imperative",level:3},{value:"Signature",id:"signature-1",level:4},{value:"Example",id:"example-2",level:4},{value:"Modules",id:"modules",level:2},{value:"<code>ExecutionEnvironment</code>",id:"executionenvironment",level:3},{value:"<code>constants</code>",id:"constants",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"docusaurus-client-api",children:"Docusaurus Client API"})}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site."}),"\n",(0,t.jsx)(n.h2,{id:"components",children:"Components"}),"\n",(0,t.jsx)(n.h3,{id:"errorboundary",children:(0,t.jsx)(n.code,{children:"<ErrorBoundary />"})}),"\n",(0,t.jsxs)(n.p,{children:["This component creates a ",(0,t.jsx)(n.a,{href:"https://reactjs.org/docs/error-boundaries.html",children:"React error boundary"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Use it to wrap components that might throw, and display a fallback when that happens instead of crashing the whole app."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport ErrorBoundary from '@docusaurus/ErrorBoundary';\n\nconst SafeComponent = () => (\n <ErrorBoundary\n fallback={({error, tryAgain}) => (\n <div>\n <p>This component crashed because of error: {error.message}.</p>\n <button onClick={tryAgain}>Try Again!</button>\n </div>\n )}>\n <SomeDangerousComponentThatMayThrow />\n </ErrorBoundary>\n);\n"})}),"\n","\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To see it in action, click here: ",(0,t.jsx)(r.Z,{})]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Docusaurus uses this component to catch errors within the theme's layout, and also within the entire app."})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This component doesn't catch build-time errors and only protects against client-side render errors that can happen when using stateful React components."})}),"\n",(0,t.jsx)(n.h4,{id:"errorboundary-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"}),": an optional render callback returning a JSX element. It will receive an object with 2 attributes: ",(0,t.jsx)(n.code,{children:"error"}),", the error that was caught, and ",(0,t.jsx)(n.code,{children:"tryAgain"}),", a function (",(0,t.jsx)(n.code,{children:"() => void"}),") callback to reset the error in the component and try rendering it again. If not present, ",(0,t.jsx)(n.code,{children:"@theme/Error"})," will be rendered instead. ",(0,t.jsx)(n.code,{children:"@theme/Error"})," is used for the error boundaries wrapping the site, above the layout."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"fallback"})," prop is a callback, and ",(0,t.jsx)(n.strong,{children:"not a React functional component"}),". You can't use React hooks inside this callback."]})}),"\n",(0,t.jsx)(n.h3,{id:"head",children:(0,t.jsx)(n.code,{children:"<Head/>"})}),"\n",(0,t.jsxs)(n.p,{children:["This reusable React component will manage all of your changes to the document head. It takes plain HTML tags and outputs plain HTML tags and is beginner-friendly. It is a wrapper around ",(0,t.jsx)(n.a,{href:"https://github.com/nfl/react-helmet",children:"React Helmet"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Usage Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'import React from \'react\';\n// highlight-next-line\nimport Head from \'@docusaurus/Head\';\n\nconst MySEO = () => (\n // highlight-start\n <Head>\n <meta property="og:description" content="My custom description" />\n <meta charSet="utf-8" />\n <title>My Title\n \n \n // highlight-end\n);\n'})}),"\n",(0,t.jsx)(n.p,{children:"Nested or latter components will override duplicate usages:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n {/* highlight-start */}\n \n My Title\n \n \n {/* highlight-end */}\n \n {/* highlight-start */}\n \n Nested Title\n \n \n {/* highlight-end */}\n \n\n'})}),"\n",(0,t.jsx)(n.p,{children:"Outputs:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'\n Nested Title\n \n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"link",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["This component enables linking to internal pages as well as a powerful performance feature called preloading. Preloading is used to prefetch resources so that the resources are fetched by the time the user navigates with this component. We use an ",(0,t.jsx)(n.code,{children:"IntersectionObserver"})," to fetch a low-priority request when the ",(0,t.jsx)(n.code,{children:""})," is in the viewport and then use an ",(0,t.jsx)(n.code,{children:"onMouseOver"})," event to trigger a high-priority request when it is likely that a user will navigate to the requested resource."]}),"\n",(0,t.jsxs)(n.p,{children:["The component is a wrapper around react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component that adds useful enhancements specific to Docusaurus. All props are passed through to react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component."]}),"\n",(0,t.jsxs)(n.p,{children:["External links also work, and automatically have these props: ",(0,t.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport Link from '@docusaurus/Link';\n\nconst Page = () => (\n
\n

\n {/* highlight-next-line */}\n Check out my blog!\n

\n

\n {/* highlight-next-line */}\n Follow me on Twitter!\n

\n
\n);\n"})}),"\n",(0,t.jsxs)(n.h4,{id:"to-string",children:[(0,t.jsx)(n.code,{children:"to"}),": string"]}),"\n",(0,t.jsxs)(n.p,{children:["The target location to navigate to. Example: ",(0,t.jsx)(n.code,{children:"/docs/introduction"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Prefer this component to vanilla ",(0,t.jsx)(n.code,{children:""})," tags because Docusaurus does a lot of optimizations (e.g. broken path detection, prefetching, applying base URL...) if you use ",(0,t.jsx)(n.code,{children:""}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"redirect",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["Rendering a ",(0,t.jsx)(n.code,{children:""})," will navigate to a new location. The new location will override the current location in the history stack like server-side redirects (HTTP 3xx) do. You can refer to ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/api/Redirect",children:"React Router's Redirect documentation"})," for more info on available props."]}),"\n",(0,t.jsx)(n.p,{children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {Redirect} from '@docusaurus/router';\n\nconst Home = () => {\n // highlight-next-line\n return ;\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/router"})," implements ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/guides/quick-start",children:"React Router"})," and supports its features."]})}),"\n",(0,t.jsx)(n.h3,{id:"browseronly",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component permits to render React components only in the browser after the React app has hydrated."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use it for integrating with code that can't run in Node.js, because the ",(0,t.jsx)(n.code,{children:"window"})," or ",(0,t.jsx)(n.code,{children:"document"})," objects are being accessed."]})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": render function prop returning browser-only JSX. Will not be executed in Node.js"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"})," (optional): JSX to render on the server (Node.js) and until React hydration completes."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-code",children:"Example with code"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = () => {\n return (\n // highlight-start\n \n {() => page url = {window.location.href}}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-library",children:"Example with a library"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = (props) => {\n return (\n // highlight-start\n Loading...}>\n {() => {\n const LibComponent = require('some-lib').LibComponent;\n return ;\n }}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"interpolate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsx)(n.p,{children:"A simple interpolation component for text containing dynamic placeholders."}),"\n",(0,t.jsx)(n.p,{children:"The placeholders will be replaced with the provided dynamic values and JSX elements of your choice (strings, links, styled elements...)."}),"\n",(0,t.jsx)(n.h4,{id:"interpolate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": text containing interpolation placeholders like ",(0,t.jsx)(n.code,{children:"{placeholderName}"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport Link from '@docusaurus/Link';\nimport Interpolate from '@docusaurus/Interpolate';\n\nexport default function VisitMyWebsiteMessage() {\n return (\n // highlight-start\n \n website\n \n ),\n }}>\n {'Hello, {firstName}! How are you? Take a look at my {website}'}\n \n // highlight-end\n );\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/i18n/introduction",children:"localizing your site"}),", the ",(0,t.jsx)(n.code,{children:""})," component will allow providing ",(0,t.jsx)(n.strong,{children:"translation support to React components"}),", such as your homepage. The ",(0,t.jsx)(n.code,{children:""})," component supports ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The translation strings will statically extracted from your code with the ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI and a ",(0,t.jsx)(n.code,{children:"code.json"})," translation file will be created in ",(0,t.jsx)(n.code,{children:"website/i18n/[locale]"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," props ",(0,t.jsx)(n.strong,{children:"must be hardcoded strings"}),"."]}),(0,t.jsxs)(n.p,{children:["Apart from the ",(0,t.jsx)(n.code,{children:"values"})," prop used for interpolation, it is ",(0,t.jsx)(n.strong,{children:"not possible to use variables"}),", or the static extraction wouldn't work."]})]}),"\n",(0,t.jsx)(n.h4,{id:"translate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": untranslated string in the default site locale (can contain ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation placeholders"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"id"}),": optional value to be used as the key in JSON translation files"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"description"}),": optional text to help the translator"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": optional object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-start\nimport Translate from '@docusaurus/Translate';\n// highlight-end\n\nexport default function Home() {\n return (\n \n

\n {/* highlight-start */}\n \n Welcome to my website\n \n {/* highlight-end */}\n

\n
\n {/* highlight-start */}\n \n {'Welcome, {firstName}! How are you?'}\n \n {/* highlight-end */}\n
\n
\n );\n}\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["You can even omit the children prop and specify a translation string in your ",(0,t.jsx)(n.code,{children:"code.json"})," file manually after running the ",(0,t.jsx)(n.code,{children:"docusaurus write-translations"})," CLI command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})})]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component supports interpolation. You can also implement ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/i18n/i18n-tutorial.mdx#pluralization",children:"string pluralization"})," through some custom code and the ",(0,t.jsxs)(n.a,{href:"#translate-imperative",children:[(0,t.jsx)(n.code,{children:"translate"})," imperative API"]}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,t.jsx)(n.h3,{id:"useDocusaurusContext",children:(0,t.jsx)(n.code,{children:"useDocusaurusContext"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to access Docusaurus Context. The context contains the ",(0,t.jsx)(n.code,{children:"siteConfig"})," object from ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config",children:"docusaurus.config.js"})," and some additional site metadata."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type PluginVersionInformation =\n | {readonly type: 'package'; readonly version?: string}\n | {readonly type: 'project'}\n | {readonly type: 'local'}\n | {readonly type: 'synthetic'};\n\ntype SiteMetadata = {\n readonly docusaurusVersion: string;\n readonly siteVersion?: string;\n readonly pluginVersions: Record;\n};\n\ntype I18nLocaleConfig = {\n label: string;\n direction: string;\n};\n\ntype I18n = {\n defaultLocale: string;\n locales: [string, ...string[]];\n currentLocale: string;\n localeConfigs: Record;\n};\n\ntype DocusaurusContext = {\n siteConfig: DocusaurusConfig;\n siteMetadata: SiteMetadata;\n globalData: Record;\n i18n: I18n;\n codeTranslations: Record;\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nconst MyComponent = () => {\n // highlight-next-line\n const {siteConfig, siteMetadata} = useDocusaurusContext();\n return (\n
\n {/* highlight-start */}\n

{siteConfig.title}

\n
{siteMetadata.siteVersion}
\n
{siteMetadata.docusaurusVersion}
\n {/* highlight-end */}\n
\n );\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"siteConfig"})," object only contains ",(0,t.jsx)(n.strong,{children:"serializable values"})," (values that are preserved after ",(0,t.jsx)(n.code,{children:"JSON.stringify()"}),"). Functions, regexes, etc. would be lost on the client side."]})}),"\n",(0,t.jsx)(n.h3,{id:"useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,t.jsxs)(n.p,{children:["Returns ",(0,t.jsx)(n.code,{children:"true"})," when the React app has successfully hydrated in the browser."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Use this hook instead of ",(0,t.jsx)(n.code,{children:"typeof windows !== 'undefined'"})," in React rendering logic."]}),(0,t.jsxs)(n.p,{children:["The first client-side render output (in the browser) ",(0,t.jsx)(n.strong,{children:"must be exactly the same"})," as the server-side render output (Node.js). Not following this rule can lead to unexpected hydration behaviors, as described in ",(0,t.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useIsBrowser from '@docusaurus/useIsBrowser';\n\nconst MyComponent = () => {\n // highlight-start\n const isBrowser = useIsBrowser();\n // highlight-end\n return
{isBrowser ? 'Client' : 'Server'}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrl",children:(0,t.jsx)(n.code,{children:"useBaseUrl"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to prepend your site ",(0,t.jsx)(n.code,{children:"baseUrl"})," to a string."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Don't use it for regular links!"})}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"/baseUrl/"})," prefix is automatically added to all ",(0,t.jsx)(n.strong,{children:"absolute paths"})," by default:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Markdown: ",(0,t.jsx)(n.code,{children:"[link](/my/path)"})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n",(0,t.jsxs)(n.li,{children:["React: ",(0,t.jsx)(n.code,{children:'link'})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"options",children:"Options"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type BaseUrlOptions = {\n forcePrependBaseUrl: boolean;\n absolute: boolean;\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-usage",children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useBaseUrl from '@docusaurus/useBaseUrl';\n\nconst SomeImage = () => {\n // highlight-start\n const imgSrc = useBaseUrl('/img/myImage.png');\n // highlight-end\n return ;\n};\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["In most cases, you don't need ",(0,t.jsx)(n.code,{children:"useBaseUrl"}),"."]}),(0,t.jsxs)(n.p,{children:["Prefer a ",(0,t.jsx)(n.code,{children:"require()"})," call for ",(0,t.jsx)(n.a,{href:"/docs/markdown-features/assets",children:"assets"}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrlUtils",children:(0,t.jsx)(n.code,{children:"useBaseUrlUtils"})}),"\n",(0,t.jsxs)(n.p,{children:["Sometimes ",(0,t.jsx)(n.code,{children:"useBaseUrl"})," is not good enough. This hook return additional utils related to your site's base URL."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"withBaseUrl"}),": useful if you need to add base URLs to multiple URLs at once."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport {useBaseUrlUtils} from '@docusaurus/useBaseUrl';\n\nconst Component = () => {\n const urls = ['/a', '/b'];\n // highlight-start\n const {withBaseUrl} = useBaseUrlUtils();\n const urlsWithBaseUrl = urls.map(withBaseUrl);\n // highlight-end\n return
{/* ... */}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useGlobalData",children:(0,t.jsx)(n.code,{children:"useGlobalData"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access Docusaurus global data created by all the plugins."}),"\n",(0,t.jsx)(n.p,{children:"Global data is namespaced by plugin name then by plugin ID."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Plugin ID is only useful when a plugin is used multiple times on the same site. Each plugin instance is able to create its own global data."})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:'type GlobalData = Record<\n PluginName,\n Record<\n PluginId, // "default" by default\n any // plugin-specific data\n >\n>;\n'})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport useGlobalData from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const globalData = useGlobalData();\n const myPluginData = globalData['my-plugin']['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Inspect your site's global data at ",(0,t.jsx)(n.code,{children:".docusaurus/globalData.json"})]})}),"\n",(0,t.jsx)(n.h3,{id:"usePluginData",children:(0,t.jsx)(n.code,{children:"usePluginData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin instance."}),"\n",(0,t.jsx)(n.p,{children:"This is the most convenient hook to access plugin global data and should be used most of the time."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"pluginId"})," is optional if you don't use multi-instance plugins."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function usePluginData(\n pluginName: string,\n pluginId?: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const myPluginData = usePluginData('my-plugin');\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useAllPluginInstancesData",children:(0,t.jsx)(n.code,{children:"useAllPluginInstancesData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin. Given a plugin name, it returns the data of all the plugins instances of that name, by plugin id."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function useAllPluginInstancesData(\n pluginName: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useAllPluginInstancesData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const allPluginInstancesData = useAllPluginInstancesData('my-plugin');\n const myPluginData = allPluginInstancesData['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBrokenLinks",children:(0,t.jsx)(n.code,{children:"useBrokenLinks"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access the Docusaurus broken link checker APIs, exposing a way for a Docusaurus pages to report and collect their links and anchors."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This is an ",(0,t.jsx)(n.strong,{children:"advanced"})," API that ",(0,t.jsx)(n.strong,{children:"most Docusaurus users don't need to use directly"}),"."]}),(0,t.jsxs)(n.p,{children:["It is already ",(0,t.jsx)(n.strong,{children:"built-in"})," in existing high-level components:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.a,{href:"#link",children:(0,t.jsx)(n.code,{children:""})})," component will collect links for you"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"@theme/Heading"})," (used for Markdown headings) will collect anchors"]}),"\n"]}),(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"useBrokenLinks()"})," if you implement your own ",(0,t.jsx)(n.code,{children:""})," or ",(0,t.jsx)(n.code,{children:""})," component."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyHeading.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyHeading(props) {\n useBrokenLinks().collectAnchor(props.id);\n return

;\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyLink.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyLink(props) {\n useBrokenLinks().collectLink(props.href);\n return ;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,t.jsx)(n.h3,{id:"interpolate-1",children:(0,t.jsx)(n.code,{children:"interpolate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#interpolate",children:(0,t.jsx)(n.code,{children:""})})," component."]}),"\n",(0,t.jsx)(n.h4,{id:"signature",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"// Simple string interpolation\nfunction interpolate(text: string, values: Record): string;\n\n// JSX interpolation\nfunction interpolate(\n text: string,\n values: Record,\n): ReactNode;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-1",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"// highlight-next-line\nimport {interpolate} from '@docusaurus/Interpolate';\n\nconst message = interpolate('Welcome {firstName}', {firstName: 'S\xe9bastien'});\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate-imperative",children:(0,t.jsx)(n.code,{children:"translate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#translate",children:(0,t.jsx)(n.code,{children:""})})," component. Also supporting ",(0,t.jsx)(n.a,{href:"#interpolate",children:"placeholders interpolation"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["Use the imperative API for the ",(0,t.jsx)(n.strong,{children:"rare cases"})," where a ",(0,t.jsx)(n.strong,{children:"component cannot be used"}),", such as:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the page ",(0,t.jsx)(n.code,{children:"title"})," metadata"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"placeholder"})," props of form inputs"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"aria-label"})," props for accessibility"]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"signature-1",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function translate(\n translation: {message: string; id?: string; description?: string},\n values: Record,\n): string;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-2",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-next-line\nimport {translate} from '@docusaurus/Translate';\n\nexport default function Home() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,t.jsx)(n.h3,{id:"executionenvironment",children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,t.jsx)(n.p,{children:"A module that exposes a few boolean variables to check the current rendering environment."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["For React rendering logic, use ",(0,t.jsx)(n.a,{href:"#useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser()"})})," or ",(0,t.jsx)(n.a,{href:"#browseronly",children:(0,t.jsx)(n.code,{children:""})})," instead."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n require('lib-that-only-works-client-side');\n}\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseDOM"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client/browser, ",(0,t.jsx)(n.code,{children:"false"})," on Node.js/prerendering."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseEventListeners"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.addEventListener"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseIntersectionObserver"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"IntersectionObserver"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseViewport"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.screen"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"constants",children:(0,t.jsx)(n.code,{children:"constants"})}),"\n",(0,t.jsx)(n.p,{children:"A module exposing useful constants to client-side theme code."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import {DEFAULT_PLUGIN_ID} from '@docusaurus/constants';\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Named export"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DEFAULT_PLUGIN_ID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"default"})})]})})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/891c0dad.aa5ccbc2.js b/assets/js/891c0dad.aa5ccbc2.js deleted file mode 100644 index 5077b59f8a07..000000000000 --- a/assets/js/891c0dad.aa5ccbc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20663],{3818:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=s(27378);function r({children:e="Boom!",message:n="Boom!\nSomething bad happened, but you can try again!",cause:s}){const[r,o]=(0,i.useState)(!1);if(r)throw new Error(n,{cause:s?new Error(s):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}},62604:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670),r=s(3818);const o={sidebar_label:"Client API"},l="Docusaurus Client API",a={id:"docusaurus-core",title:"Docusaurus Client API",description:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.",source:"@site/docs/docusaurus-core.mdx",sourceDirName:".",slug:"/docusaurus-core",permalink:"/docs/docusaurus-core",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{sidebar_label:"Client API"},sidebar:"api",previous:{title:"CLI",permalink:"/docs/cli"},next:{title:"docusaurus.config.js",permalink:"/docs/api/docusaurus-config"}},c={},d=[{value:"Components",id:"components",level:2},{value:"<ErrorBoundary />",id:"errorboundary",level:3},{value:"Props",id:"errorboundary-props",level:4},{value:"<Head/>",id:"head",level:3},{value:"<Link/>",id:"link",level:3},{value:"to: string",id:"to-string",level:4},{value:"<Redirect/>",id:"redirect",level:3},{value:"<BrowserOnly/>",id:"browseronly",level:3},{value:"Props",id:"browseronly-props",level:4},{value:"Example with code",id:"browseronly-example-code",level:4},{value:"Example with a library",id:"browseronly-example-library",level:4},{value:"<Interpolate/>",id:"interpolate",level:3},{value:"Props",id:"interpolate-props",level:4},{value:"<Translate/>",id:"translate",level:3},{value:"Props",id:"translate-props",level:4},{value:"Example",id:"example",level:4},{value:"Hooks",id:"hooks",level:2},{value:"useDocusaurusContext",id:"useDocusaurusContext",level:3},{value:"useIsBrowser",id:"useIsBrowser",level:3},{value:"useBaseUrl",id:"useBaseUrl",level:3},{value:"Options",id:"options",level:4},{value:"Example usage:",id:"example-usage",level:4},{value:"useBaseUrlUtils",id:"useBaseUrlUtils",level:3},{value:"useGlobalData",id:"useGlobalData",level:3},{value:"usePluginData",id:"usePluginData",level:3},{value:"useAllPluginInstancesData",id:"useAllPluginInstancesData",level:3},{value:"useBrokenLinks",id:"useBrokenLinks",level:3},{value:"Functions",id:"functions",level:2},{value:"interpolate",id:"interpolate-1",level:3},{value:"Signature",id:"signature",level:4},{value:"Example",id:"example-1",level:4},{value:"translate",id:"translate-imperative",level:3},{value:"Signature",id:"signature-1",level:4},{value:"Example",id:"example-2",level:4},{value:"Modules",id:"modules",level:2},{value:"ExecutionEnvironment",id:"executionenvironment",level:3},{value:"constants",id:"constants",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"docusaurus-client-api",children:"Docusaurus Client API"})}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site."}),"\n",(0,t.jsx)(n.h2,{id:"components",children:"Components"}),"\n",(0,t.jsx)(n.h3,{id:"errorboundary",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["This component creates a ",(0,t.jsx)(n.a,{href:"https://reactjs.org/docs/error-boundaries.html",children:"React error boundary"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Use it to wrap components that might throw, and display a fallback when that happens instead of crashing the whole app."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport ErrorBoundary from '@docusaurus/ErrorBoundary';\n\nconst SafeComponent = () => (\n (\n
\n

This component crashed because of error: {error.message}.

\n \n
\n )}>\n \n
\n);\n"})}),"\n","\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To see it in action, click here: ",(0,t.jsx)(r.Z,{})]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Docusaurus uses this component to catch errors within the theme's layout, and also within the entire app."})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This component doesn't catch build-time errors and only protects against client-side render errors that can happen when using stateful React components."})}),"\n",(0,t.jsx)(n.h4,{id:"errorboundary-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"}),": an optional render callback returning a JSX element. It will receive an object with 2 attributes: ",(0,t.jsx)(n.code,{children:"error"}),", the error that was caught, and ",(0,t.jsx)(n.code,{children:"tryAgain"}),", a function (",(0,t.jsx)(n.code,{children:"() => void"}),") callback to reset the error in the component and try rendering it again. If not present, ",(0,t.jsx)(n.code,{children:"@theme/Error"})," will be rendered instead. ",(0,t.jsx)(n.code,{children:"@theme/Error"})," is used for the error boundaries wrapping the site, above the layout."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"fallback"})," prop is a callback, and ",(0,t.jsx)(n.strong,{children:"not a React functional component"}),". You can't use React hooks inside this callback."]})}),"\n",(0,t.jsx)(n.h3,{id:"head",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["This reusable React component will manage all of your changes to the document head. It takes plain HTML tags and outputs plain HTML tags and is beginner-friendly. It is a wrapper around ",(0,t.jsx)(n.a,{href:"https://github.com/nfl/react-helmet",children:"React Helmet"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Usage Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'import React from \'react\';\n// highlight-next-line\nimport Head from \'@docusaurus/Head\';\n\nconst MySEO = () => (\n // highlight-start\n \n \n \n My Title\n \n \n // highlight-end\n);\n'})}),"\n",(0,t.jsx)(n.p,{children:"Nested or latter components will override duplicate usages:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n {/* highlight-start */}\n \n My Title\n \n \n {/* highlight-end */}\n \n {/* highlight-start */}\n \n Nested Title\n \n \n {/* highlight-end */}\n \n\n'})}),"\n",(0,t.jsx)(n.p,{children:"Outputs:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'\n Nested Title\n \n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"link",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["This component enables linking to internal pages as well as a powerful performance feature called preloading. Preloading is used to prefetch resources so that the resources are fetched by the time the user navigates with this component. We use an ",(0,t.jsx)(n.code,{children:"IntersectionObserver"})," to fetch a low-priority request when the ",(0,t.jsx)(n.code,{children:""})," is in the viewport and then use an ",(0,t.jsx)(n.code,{children:"onMouseOver"})," event to trigger a high-priority request when it is likely that a user will navigate to the requested resource."]}),"\n",(0,t.jsxs)(n.p,{children:["The component is a wrapper around react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component that adds useful enhancements specific to Docusaurus. All props are passed through to react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component."]}),"\n",(0,t.jsxs)(n.p,{children:["External links also work, and automatically have these props: ",(0,t.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport Link from '@docusaurus/Link';\n\nconst Page = () => (\n
\n

\n {/* highlight-next-line */}\n Check out my blog!\n

\n

\n {/* highlight-next-line */}\n Follow me on Twitter!\n

\n
\n);\n"})}),"\n",(0,t.jsxs)(n.h4,{id:"to-string",children:[(0,t.jsx)(n.code,{children:"to"}),": string"]}),"\n",(0,t.jsxs)(n.p,{children:["The target location to navigate to. Example: ",(0,t.jsx)(n.code,{children:"/docs/introduction"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Prefer this component to vanilla ",(0,t.jsx)(n.code,{children:"
"})," tags because Docusaurus does a lot of optimizations (e.g. broken path detection, prefetching, applying base URL...) if you use ",(0,t.jsx)(n.code,{children:""}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"redirect",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["Rendering a ",(0,t.jsx)(n.code,{children:""})," will navigate to a new location. The new location will override the current location in the history stack like server-side redirects (HTTP 3xx) do. You can refer to ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/api/Redirect",children:"React Router's Redirect documentation"})," for more info on available props."]}),"\n",(0,t.jsx)(n.p,{children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {Redirect} from '@docusaurus/router';\n\nconst Home = () => {\n // highlight-next-line\n return ;\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/router"})," implements ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/guides/quick-start",children:"React Router"})," and supports its features."]})}),"\n",(0,t.jsx)(n.h3,{id:"browseronly",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component permits to render React components only in the browser after the React app has hydrated."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use it for integrating with code that can't run in Node.js, because the ",(0,t.jsx)(n.code,{children:"window"})," or ",(0,t.jsx)(n.code,{children:"document"})," objects are being accessed."]})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": render function prop returning browser-only JSX. Will not be executed in Node.js"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"})," (optional): JSX to render on the server (Node.js) and until React hydration completes."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-code",children:"Example with code"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = () => {\n return (\n // highlight-start\n \n {() => page url = {window.location.href}}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-library",children:"Example with a library"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = (props) => {\n return (\n // highlight-start\n Loading...}>\n {() => {\n const LibComponent = require('some-lib').LibComponent;\n return ;\n }}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"interpolate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsx)(n.p,{children:"A simple interpolation component for text containing dynamic placeholders."}),"\n",(0,t.jsx)(n.p,{children:"The placeholders will be replaced with the provided dynamic values and JSX elements of your choice (strings, links, styled elements...)."}),"\n",(0,t.jsx)(n.h4,{id:"interpolate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": text containing interpolation placeholders like ",(0,t.jsx)(n.code,{children:"{placeholderName}"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport Link from '@docusaurus/Link';\nimport Interpolate from '@docusaurus/Interpolate';\n\nexport default function VisitMyWebsiteMessage() {\n return (\n // highlight-start\n \n website\n \n ),\n }}>\n {'Hello, {firstName}! How are you? Take a look at my {website}'}\n \n // highlight-end\n );\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/i18n/introduction",children:"localizing your site"}),", the ",(0,t.jsx)(n.code,{children:""})," component will allow providing ",(0,t.jsx)(n.strong,{children:"translation support to React components"}),", such as your homepage. The ",(0,t.jsx)(n.code,{children:""})," component supports ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The translation strings will statically extracted from your code with the ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI and a ",(0,t.jsx)(n.code,{children:"code.json"})," translation file will be created in ",(0,t.jsx)(n.code,{children:"website/i18n/[locale]"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," props ",(0,t.jsx)(n.strong,{children:"must be hardcoded strings"}),"."]}),(0,t.jsxs)(n.p,{children:["Apart from the ",(0,t.jsx)(n.code,{children:"values"})," prop used for interpolation, it is ",(0,t.jsx)(n.strong,{children:"not possible to use variables"}),", or the static extraction wouldn't work."]})]}),"\n",(0,t.jsx)(n.h4,{id:"translate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": untranslated string in the default site locale (can contain ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation placeholders"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"id"}),": optional value to be used as the key in JSON translation files"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"description"}),": optional text to help the translator"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": optional object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-start\nimport Translate from '@docusaurus/Translate';\n// highlight-end\n\nexport default function Home() {\n return (\n \n

\n {/* highlight-start */}\n \n Welcome to my website\n \n {/* highlight-end */}\n

\n
\n {/* highlight-start */}\n \n {'Welcome, {firstName}! How are you?'}\n \n {/* highlight-end */}\n
\n
\n );\n}\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["You can even omit the children prop and specify a translation string in your ",(0,t.jsx)(n.code,{children:"code.json"})," file manually after running the ",(0,t.jsx)(n.code,{children:"docusaurus write-translations"})," CLI command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})})]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component supports interpolation. You can also implement ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/i18n/i18n-tutorial.mdx#pluralization",children:"string pluralization"})," through some custom code and the ",(0,t.jsxs)(n.a,{href:"#translate-imperative",children:[(0,t.jsx)(n.code,{children:"translate"})," imperative API"]}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,t.jsx)(n.h3,{id:"useDocusaurusContext",children:(0,t.jsx)(n.code,{children:"useDocusaurusContext"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to access Docusaurus Context. The context contains the ",(0,t.jsx)(n.code,{children:"siteConfig"})," object from ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config",children:"docusaurus.config.js"})," and some additional site metadata."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type PluginVersionInformation =\n | {readonly type: 'package'; readonly version?: string}\n | {readonly type: 'project'}\n | {readonly type: 'local'}\n | {readonly type: 'synthetic'};\n\ntype SiteMetadata = {\n readonly docusaurusVersion: string;\n readonly siteVersion?: string;\n readonly pluginVersions: Record;\n};\n\ntype I18nLocaleConfig = {\n label: string;\n direction: string;\n};\n\ntype I18n = {\n defaultLocale: string;\n locales: [string, ...string[]];\n currentLocale: string;\n localeConfigs: Record;\n};\n\ntype DocusaurusContext = {\n siteConfig: DocusaurusConfig;\n siteMetadata: SiteMetadata;\n globalData: Record;\n i18n: I18n;\n codeTranslations: Record;\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nconst MyComponent = () => {\n // highlight-next-line\n const {siteConfig, siteMetadata} = useDocusaurusContext();\n return (\n
\n {/* highlight-start */}\n

{siteConfig.title}

\n
{siteMetadata.siteVersion}
\n
{siteMetadata.docusaurusVersion}
\n {/* highlight-end */}\n
\n );\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"siteConfig"})," object only contains ",(0,t.jsx)(n.strong,{children:"serializable values"})," (values that are preserved after ",(0,t.jsx)(n.code,{children:"JSON.stringify()"}),"). Functions, regexes, etc. would be lost on the client side."]})}),"\n",(0,t.jsx)(n.h3,{id:"useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,t.jsxs)(n.p,{children:["Returns ",(0,t.jsx)(n.code,{children:"true"})," when the React app has successfully hydrated in the browser."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Use this hook instead of ",(0,t.jsx)(n.code,{children:"typeof windows !== 'undefined'"})," in React rendering logic."]}),(0,t.jsxs)(n.p,{children:["The first client-side render output (in the browser) ",(0,t.jsx)(n.strong,{children:"must be exactly the same"})," as the server-side render output (Node.js). Not following this rule can lead to unexpected hydration behaviors, as described in ",(0,t.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useIsBrowser from '@docusaurus/useIsBrowser';\n\nconst MyComponent = () => {\n // highlight-start\n const isBrowser = useIsBrowser();\n // highlight-end\n return
{isBrowser ? 'Client' : 'Server'}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrl",children:(0,t.jsx)(n.code,{children:"useBaseUrl"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to prepend your site ",(0,t.jsx)(n.code,{children:"baseUrl"})," to a string."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Don't use it for regular links!"})}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"/baseUrl/"})," prefix is automatically added to all ",(0,t.jsx)(n.strong,{children:"absolute paths"})," by default:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Markdown: ",(0,t.jsx)(n.code,{children:"[link](/my/path)"})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n",(0,t.jsxs)(n.li,{children:["React: ",(0,t.jsx)(n.code,{children:'link'})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"options",children:"Options"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type BaseUrlOptions = {\n forcePrependBaseUrl: boolean;\n absolute: boolean;\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-usage",children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useBaseUrl from '@docusaurus/useBaseUrl';\n\nconst SomeImage = () => {\n // highlight-start\n const imgSrc = useBaseUrl('/img/myImage.png');\n // highlight-end\n return ;\n};\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["In most cases, you don't need ",(0,t.jsx)(n.code,{children:"useBaseUrl"}),"."]}),(0,t.jsxs)(n.p,{children:["Prefer a ",(0,t.jsx)(n.code,{children:"require()"})," call for ",(0,t.jsx)(n.a,{href:"/docs/markdown-features/assets",children:"assets"}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrlUtils",children:(0,t.jsx)(n.code,{children:"useBaseUrlUtils"})}),"\n",(0,t.jsxs)(n.p,{children:["Sometimes ",(0,t.jsx)(n.code,{children:"useBaseUrl"})," is not good enough. This hook return additional utils related to your site's base URL."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"withBaseUrl"}),": useful if you need to add base URLs to multiple URLs at once."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport {useBaseUrlUtils} from '@docusaurus/useBaseUrl';\n\nconst Component = () => {\n const urls = ['/a', '/b'];\n // highlight-start\n const {withBaseUrl} = useBaseUrlUtils();\n const urlsWithBaseUrl = urls.map(withBaseUrl);\n // highlight-end\n return
{/* ... */}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useGlobalData",children:(0,t.jsx)(n.code,{children:"useGlobalData"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access Docusaurus global data created by all the plugins."}),"\n",(0,t.jsx)(n.p,{children:"Global data is namespaced by plugin name then by plugin ID."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Plugin ID is only useful when a plugin is used multiple times on the same site. Each plugin instance is able to create its own global data."})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:'type GlobalData = Record<\n PluginName,\n Record<\n PluginId, // "default" by default\n any // plugin-specific data\n >\n>;\n'})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport useGlobalData from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const globalData = useGlobalData();\n const myPluginData = globalData['my-plugin']['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Inspect your site's global data at ",(0,t.jsx)(n.code,{children:".docusaurus/globalData.json"})]})}),"\n",(0,t.jsx)(n.h3,{id:"usePluginData",children:(0,t.jsx)(n.code,{children:"usePluginData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin instance."}),"\n",(0,t.jsx)(n.p,{children:"This is the most convenient hook to access plugin global data and should be used most of the time."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"pluginId"})," is optional if you don't use multi-instance plugins."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function usePluginData(\n pluginName: string,\n pluginId?: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const myPluginData = usePluginData('my-plugin');\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useAllPluginInstancesData",children:(0,t.jsx)(n.code,{children:"useAllPluginInstancesData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin. Given a plugin name, it returns the data of all the plugins instances of that name, by plugin id."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function useAllPluginInstancesData(\n pluginName: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useAllPluginInstancesData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const allPluginInstancesData = useAllPluginInstancesData('my-plugin');\n const myPluginData = allPluginInstancesData['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBrokenLinks",children:(0,t.jsx)(n.code,{children:"useBrokenLinks"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access the Docusaurus broken link checker APIs, exposing a way for a Docusaurus pages to report and collect their links and anchors."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This is an ",(0,t.jsx)(n.strong,{children:"advanced"})," API that ",(0,t.jsx)(n.strong,{children:"most Docusaurus users don't need to use directly"}),"."]}),(0,t.jsxs)(n.p,{children:["It is already ",(0,t.jsx)(n.strong,{children:"built-in"})," in existing high-level components:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.a,{href:"#link",children:(0,t.jsx)(n.code,{children:""})})," component will collect links for you"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"@theme/Heading"})," (used for Markdown headings) will collect anchors"]}),"\n"]}),(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"useBrokenLinks()"})," if you implement your own ",(0,t.jsx)(n.code,{children:""})," or ",(0,t.jsx)(n.code,{children:""})," component."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyHeading.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyHeading(props) {\n useBrokenLinks().collectAnchor(props.id);\n return

;\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyLink.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyLink(props) {\n useBrokenLinks().collectLink(props.href);\n return ;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,t.jsx)(n.h3,{id:"interpolate-1",children:(0,t.jsx)(n.code,{children:"interpolate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#interpolate",children:(0,t.jsx)(n.code,{children:""})})," component."]}),"\n",(0,t.jsx)(n.h4,{id:"signature",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"// Simple string interpolation\nfunction interpolate(text: string, values: Record): string;\n\n// JSX interpolation\nfunction interpolate(\n text: string,\n values: Record,\n): ReactNode;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-1",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"// highlight-next-line\nimport {interpolate} from '@docusaurus/Interpolate';\n\nconst message = interpolate('Welcome {firstName}', {firstName: 'S\xe9bastien'});\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate-imperative",children:(0,t.jsx)(n.code,{children:"translate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#translate",children:(0,t.jsx)(n.code,{children:""})})," component. Also supporting ",(0,t.jsx)(n.a,{href:"#interpolate",children:"placeholders interpolation"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["Use the imperative API for the ",(0,t.jsx)(n.strong,{children:"rare cases"})," where a ",(0,t.jsx)(n.strong,{children:"component cannot be used"}),", such as:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the page ",(0,t.jsx)(n.code,{children:"title"})," metadata"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"placeholder"})," props of form inputs"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"aria-label"})," props for accessibility"]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"signature-1",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function translate(\n translation: {message: string; id?: string; description?: string},\n values: Record,\n): string;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-2",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-next-line\nimport {translate} from '@docusaurus/Translate';\n\nexport default function Home() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,t.jsx)(n.h3,{id:"executionenvironment",children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,t.jsx)(n.p,{children:"A module that exposes a few boolean variables to check the current rendering environment."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["For React rendering logic, use ",(0,t.jsx)(n.a,{href:"#useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser()"})})," or ",(0,t.jsx)(n.a,{href:"#browseronly",children:(0,t.jsx)(n.code,{children:""})})," instead."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n require('lib-that-only-works-client-side');\n}\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseDOM"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client/browser, ",(0,t.jsx)(n.code,{children:"false"})," on Node.js/prerendering."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseEventListeners"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.addEventListener"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseIntersectionObserver"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"IntersectionObserver"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseViewport"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.screen"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"constants",children:(0,t.jsx)(n.code,{children:"constants"})}),"\n",(0,t.jsx)(n.p,{children:"A module exposing useful constants to client-side theme code."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import {DEFAULT_PLUGIN_ID} from '@docusaurus/constants';\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Named export"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DEFAULT_PLUGIN_ID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"default"})})]})})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a603d1e.69fbc0da.js b/assets/js/8a603d1e.69fbc0da.js new file mode 100644 index 000000000000..36d5cd260a39 --- /dev/null +++ b/assets/js/8a603d1e.69fbc0da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68461],{75921:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>c,default:()=>k,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=s(24246),o=s(71670),r=s(41428);const a={},c="Broken Anchors tests",i={id:"tests/links/broken-anchors-tests",title:"Broken Anchors tests",description:"Markdown link to above anchor",source:"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx",sourceDirName:"tests/links",slug:"/tests/links/broken-anchors-tests",permalink:"/tests/docs/tests/links/broken-anchors-tests",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"},next:{title:"Target doc",permalink:"/tests/docs/tests/links/target-doc-slug"}},d={},l=[];function h(t){const e={a:"a",h1:"h1",header:"header",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"broken-anchors-tests",children:"Broken Anchors tests"})}),"\n","\n",(0,n.jsx)(r.Z,{id:"test-link-anchor",children:"#test-link-anchor"}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#test-link-anchor",children:"Markdown link to above anchor"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#",children:"Markdown link to above anchor"})})]})}function k(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(h,{...t})}):h(t)}k.displayName="MDXContent(_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a603d1e.a969af49.js b/assets/js/8a603d1e.a969af49.js deleted file mode 100644 index 4e4c097db3b0..000000000000 --- a/assets/js/8a603d1e.a969af49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68461],{75921:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>c,default:()=>k,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=s(24246),o=s(71670),r=s(41428);const a={},c="Broken Anchors tests",i={id:"tests/links/broken-anchors-tests",title:"Broken Anchors tests",description:"Markdown link to above anchor",source:"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx",sourceDirName:"tests/links",slug:"/tests/links/broken-anchors-tests",permalink:"/tests/docs/tests/links/broken-anchors-tests",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"},next:{title:"Target doc",permalink:"/tests/docs/tests/links/target-doc-slug"}},d={},l=[];function h(t){const e={a:"a",h1:"h1",header:"header",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"broken-anchors-tests",children:"Broken Anchors tests"})}),"\n","\n",(0,n.jsx)(r.Z,{id:"test-link-anchor",children:"#test-link-anchor"}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#test-link-anchor",children:"Markdown link to above anchor"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#",children:"Markdown link to above anchor"})})]})}function k(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(h,{...t})}):h(t)}k.displayName="MDXContent(_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx)"},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ef3f86c.bee61914.js b/assets/js/8ef3f86c.bee61914.js deleted file mode 100644 index 2006e1c15215..000000000000 --- a/assets/js/8ef3f86c.bee61914.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83489],{29341:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var i=s(24246),o=s(71670);const t={id:"introduction",slug:"/i18n/introduction"},l="i18n - Introduction",r={id:"i18n/introduction",title:"i18n - Introduction",description:"It is easy to translate a Docusaurus website with its internationalization (i18n) support.",source:"@site/docs/i18n/i18n-introduction.mdx",sourceDirName:"i18n",slug:"/i18n/introduction",permalink:"/docs/i18n/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{id:"introduction",slug:"/i18n/introduction"},sidebar:"docs",previous:{title:"Deployment",permalink:"/docs/deployment"},next:{title:"Tutorial",permalink:"/docs/i18n/tutorial"}},a={},d=[{value:"Goals",id:"goals",level:2},{value:"i18n goals",id:"i18n-goals",level:3},{value:"i18n non-goals",id:"i18n-non-goals",level:3},{value:"Translation workflow",id:"translation-workflow",level:2},{value:"Overview",id:"overview",level:3},{value:"Translation files",id:"translation-files",level:3},{value:"Markdown files",id:"markdown-files",level:4},{value:"JSON files",id:"json-files",level:4},{value:"Data files",id:"data-files",level:4},{value:"Translation files location",id:"translation-files-location",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"i18n---introduction",children:"i18n - Introduction"})}),"\n",(0,i.jsxs)(n.p,{children:["It is ",(0,i.jsx)(n.strong,{children:"easy to translate a Docusaurus website"})," with its internationalization (",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"i18n"}),") support."]}),"\n",(0,i.jsx)(n.h2,{id:"goals",children:"Goals"}),"\n",(0,i.jsxs)(n.p,{children:["It is important to understand the ",(0,i.jsx)(n.strong,{children:"design decisions"})," behind the Docusaurus i18n support."]}),"\n",(0,i.jsxs)(n.p,{children:["For more context, you can read the initial ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3317",children:"RFC"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/3325",children:"PR"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-goals",children:"i18n goals"}),"\n",(0,i.jsx)(n.p,{children:"The goals of the Docusaurus i18n system are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Simple"}),": just put the translated files in the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible translation workflows"}),": use Git (monorepo, forks, or submodules), SaaS software, FTP"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible deployment options"}),": single, multiple domains, or hybrid"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Modular"}),": allow plugin authors to provide i18n support"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Low-overhead runtime"}),": documentation is mostly static and does not require heavy JS libraries or polyfills"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Scalable build-times"}),": allow building and deploying localized sites independently"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Localize assets"}),": an image of your site might contain text that should be translated"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"No coupling"}),": not forced to use any SaaS, yet integrations are possible"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:["Easy to use with ",(0,i.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"})]}),": a lot of Docusaurus v1 sites use Crowdin and should be able to migrate to v2"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Good SEO defaults"}),": we set useful SEO headers like ",(0,i.jsx)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/localized-versions",children:(0,i.jsx)(n.code,{children:"hreflang"})})," for you"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"RTL support"}),": locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default translations"}),": classic theme labels are translated for you in ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales",children:"many languages"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-non-goals",children:"i18n non-goals"}),"\n",(0,i.jsx)(n.p,{children:"We don't provide support for:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Automatic locale detection"}),": opinionated, and best done on the ",(0,i.jsx)(n.a,{href:"/docs/deployment",children:"server (your hosting provider)"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation SaaS software"}),": you are responsible to understand the external tools of your choice"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation of slugs"}),": technically complicated, little SEO value"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"translation-workflow",children:"Translation workflow"}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Overview of the workflow to create a translated Docusaurus website:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configure"}),": declare the default locale and alternative locales in ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#i18n",children:(0,i.jsx)(n.code,{children:"docusaurus.config.js"})})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translate"}),": put the translation files at the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Deploy"}),": build and deploy your site using a single or multi-domain strategy"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files",children:"Translation files"}),"\n",(0,i.jsx)(n.p,{children:"You will work with three kinds of translation files."}),"\n",(0,i.jsx)(n.h4,{id:"markdown-files",children:"Markdown files"}),"\n",(0,i.jsx)(n.p,{children:"This is the main content of your Docusaurus website."}),"\n",(0,i.jsx)(n.p,{children:"Markdown and MDX documents are translated as a whole, to fully preserve the translation context, instead of splitting each sentence as a separate string."}),"\n",(0,i.jsx)(n.h4,{id:"json-files",children:"JSON files"}),"\n",(0,i.jsx)(n.p,{children:"JSON is used to translate:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Your React code: standalone React pages in ",(0,i.jsx)(n.code,{children:"src/pages"}),", or other components"]}),"\n",(0,i.jsxs)(n.li,{children:["Layout labels provided through ",(0,i.jsx)(n.code,{children:"themeConfig"}),": navbar, footer"]}),"\n",(0,i.jsx)(n.li,{children:"Layout labels provided through plugin options: docs sidebar category labels, blog sidebar title..."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The JSON format used is called ",(0,i.jsx)(n.strong,{children:"Chrome i18n"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "myTranslationKey1": {\n "message": "Translated message 1",\n "description": "myTranslationKey1 is used on the homepage"\n },\n "myTranslationKey2": {\n "message": "Translated message 2",\n "description": "myTranslationKey2 is used on the FAQ page"\n }\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"The choice was made for 2 reasons:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Description attribute"}),": to help translators with additional context"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Widely supported"}),": ",(0,i.jsx)(n.a,{href:"https://developer.chrome.com/docs/extensions/mv2/i18n-messages/",children:"Chrome extensions"}),", ",(0,i.jsx)(n.a,{href:"https://support.crowdin.com/file-formats/chrome-json/",children:"Crowdin"}),", ",(0,i.jsx)(n.a,{href:"https://docs.transifex.com/formats/chrome-json",children:"Transifex"}),", ",(0,i.jsx)(n.a,{href:"https://help.phrase.com/help/chrome-json-messages",children:"Phrase"}),", ",(0,i.jsx)(n.a,{href:"https://www.applanga.com/docs/formats/chrome_i18n_json",children:"Applanga"}),", etc."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"data-files",children:"Data files"}),"\n",(0,i.jsxs)(n.p,{children:["Some plugins may read from external data files that are localized as a whole. For example, the blog plugin uses an ",(0,i.jsx)(n.a,{href:"/docs/blog#global-authors",children:(0,i.jsx)(n.code,{children:"authors.yml"})})," file that can be translated by creating a copy under ",(0,i.jsx)(n.code,{children:"i18n/[locale]/docusaurus-plugin-content-blog/authors.yml"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,i.jsx)(n.p,{children:"The translation files should be created at the correct filesystem location."}),"\n",(0,i.jsxs)(n.p,{children:["Each locale and plugin has its own ",(0,i.jsx)(n.code,{children:"i18n"})," subfolder:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]/...\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["For multi-instance plugins, the path is ",(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]-[pluginId]/..."}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"Translating a very simple Docusaurus site in French would lead to the following tree:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"website/i18n\n\u2514\u2500\u2500 fr\n \u251c\u2500\u2500 code.json # Any text label present in the React code\n \u2502 # Includes text labels from the themes' code\n \u251c\u2500\u2500 docusaurus-plugin-content-blog # translation data the blog plugin needs\n \u2502 \u2514\u2500\u2500 2020-01-01-hello.md\n \u2502\n \u251c\u2500\u2500 docusaurus-plugin-content-docs # translation data the docs plugin needs\n \u2502 \u251c\u2500\u2500 current\n \u2502 \u2502 \u251c\u2500\u2500 doc1.md\n \u2502 \u2502 \u2514\u2500\u2500 doc2.mdx\n \u2502 \u2514\u2500\u2500 current.json\n \u2502\n \u2514\u2500\u2500 docusaurus-theme-classic # translation data the classic theme needs\n \u251c\u2500\u2500 footer.json # Text labels in your footer theme config\n \u2514\u2500\u2500 navbar.json # Text labels in your navbar theme config\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The JSON files are initialized with the ",(0,i.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,i.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI command. Each plugin sources its own translated content under the corresponding folder, while the ",(0,i.jsx)(n.code,{children:"code.json"})," file defines all text labels used in the React code."]}),"\n",(0,i.jsxs)(n.p,{children:["Each content plugin or theme is different, and ",(0,i.jsx)(n.strong,{children:"defines its own translation files location"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#i18n",children:"Docs i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#i18n",children:"Blog i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#i18n",children:"Pages i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/themes/configuration#i18n",children:"Themes i18n"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var i=s(27378);const o={},t=i.createContext(o);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ef3f86c.e69496ee.js b/assets/js/8ef3f86c.e69496ee.js new file mode 100644 index 000000000000..f42b06f58c5a --- /dev/null +++ b/assets/js/8ef3f86c.e69496ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83489],{29341:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var i=s(24246),o=s(71670);const t={id:"introduction",slug:"/i18n/introduction"},l="i18n - Introduction",r={id:"i18n/introduction",title:"i18n - Introduction",description:"It is easy to translate a Docusaurus website with its internationalization (i18n) support.",source:"@site/docs/i18n/i18n-introduction.mdx",sourceDirName:"i18n",slug:"/i18n/introduction",permalink:"/docs/i18n/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{id:"introduction",slug:"/i18n/introduction"},sidebar:"docs",previous:{title:"Deployment",permalink:"/docs/deployment"},next:{title:"Tutorial",permalink:"/docs/i18n/tutorial"}},a={},d=[{value:"Goals",id:"goals",level:2},{value:"i18n goals",id:"i18n-goals",level:3},{value:"i18n non-goals",id:"i18n-non-goals",level:3},{value:"Translation workflow",id:"translation-workflow",level:2},{value:"Overview",id:"overview",level:3},{value:"Translation files",id:"translation-files",level:3},{value:"Markdown files",id:"markdown-files",level:4},{value:"JSON files",id:"json-files",level:4},{value:"Data files",id:"data-files",level:4},{value:"Translation files location",id:"translation-files-location",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"i18n---introduction",children:"i18n - Introduction"})}),"\n",(0,i.jsxs)(n.p,{children:["It is ",(0,i.jsx)(n.strong,{children:"easy to translate a Docusaurus website"})," with its internationalization (",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"i18n"}),") support."]}),"\n",(0,i.jsx)(n.h2,{id:"goals",children:"Goals"}),"\n",(0,i.jsxs)(n.p,{children:["It is important to understand the ",(0,i.jsx)(n.strong,{children:"design decisions"})," behind the Docusaurus i18n support."]}),"\n",(0,i.jsxs)(n.p,{children:["For more context, you can read the initial ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3317",children:"RFC"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/3325",children:"PR"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-goals",children:"i18n goals"}),"\n",(0,i.jsx)(n.p,{children:"The goals of the Docusaurus i18n system are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Simple"}),": just put the translated files in the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible translation workflows"}),": use Git (monorepo, forks, or submodules), SaaS software, FTP"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible deployment options"}),": single, multiple domains, or hybrid"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Modular"}),": allow plugin authors to provide i18n support"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Low-overhead runtime"}),": documentation is mostly static and does not require heavy JS libraries or polyfills"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Scalable build-times"}),": allow building and deploying localized sites independently"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Localize assets"}),": an image of your site might contain text that should be translated"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"No coupling"}),": not forced to use any SaaS, yet integrations are possible"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:["Easy to use with ",(0,i.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"})]}),": a lot of Docusaurus v1 sites use Crowdin and should be able to migrate to v2"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Good SEO defaults"}),": we set useful SEO headers like ",(0,i.jsx)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/localized-versions",children:(0,i.jsx)(n.code,{children:"hreflang"})})," for you"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"RTL support"}),": locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default translations"}),": classic theme labels are translated for you in ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales",children:"many languages"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-non-goals",children:"i18n non-goals"}),"\n",(0,i.jsx)(n.p,{children:"We don't provide support for:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Automatic locale detection"}),": opinionated, and best done on the ",(0,i.jsx)(n.a,{href:"/docs/deployment",children:"server (your hosting provider)"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation SaaS software"}),": you are responsible to understand the external tools of your choice"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation of slugs"}),": technically complicated, little SEO value"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"translation-workflow",children:"Translation workflow"}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Overview of the workflow to create a translated Docusaurus website:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configure"}),": declare the default locale and alternative locales in ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#i18n",children:(0,i.jsx)(n.code,{children:"docusaurus.config.js"})})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translate"}),": put the translation files at the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Deploy"}),": build and deploy your site using a single or multi-domain strategy"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files",children:"Translation files"}),"\n",(0,i.jsx)(n.p,{children:"You will work with three kinds of translation files."}),"\n",(0,i.jsx)(n.h4,{id:"markdown-files",children:"Markdown files"}),"\n",(0,i.jsx)(n.p,{children:"This is the main content of your Docusaurus website."}),"\n",(0,i.jsx)(n.p,{children:"Markdown and MDX documents are translated as a whole, to fully preserve the translation context, instead of splitting each sentence as a separate string."}),"\n",(0,i.jsx)(n.h4,{id:"json-files",children:"JSON files"}),"\n",(0,i.jsx)(n.p,{children:"JSON is used to translate:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Your React code: standalone React pages in ",(0,i.jsx)(n.code,{children:"src/pages"}),", or other components"]}),"\n",(0,i.jsxs)(n.li,{children:["Layout labels provided through ",(0,i.jsx)(n.code,{children:"themeConfig"}),": navbar, footer"]}),"\n",(0,i.jsx)(n.li,{children:"Layout labels provided through plugin options: docs sidebar category labels, blog sidebar title..."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The JSON format used is called ",(0,i.jsx)(n.strong,{children:"Chrome i18n"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "myTranslationKey1": {\n "message": "Translated message 1",\n "description": "myTranslationKey1 is used on the homepage"\n },\n "myTranslationKey2": {\n "message": "Translated message 2",\n "description": "myTranslationKey2 is used on the FAQ page"\n }\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"The choice was made for 2 reasons:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Description attribute"}),": to help translators with additional context"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Widely supported"}),": ",(0,i.jsx)(n.a,{href:"https://developer.chrome.com/docs/extensions/mv2/i18n-messages/",children:"Chrome extensions"}),", ",(0,i.jsx)(n.a,{href:"https://support.crowdin.com/file-formats/chrome-json/",children:"Crowdin"}),", ",(0,i.jsx)(n.a,{href:"https://docs.transifex.com/formats/chrome-json",children:"Transifex"}),", ",(0,i.jsx)(n.a,{href:"https://help.phrase.com/help/chrome-json-messages",children:"Phrase"}),", ",(0,i.jsx)(n.a,{href:"https://www.applanga.com/docs/formats/chrome_i18n_json",children:"Applanga"}),", etc."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"data-files",children:"Data files"}),"\n",(0,i.jsxs)(n.p,{children:["Some plugins may read from external data files that are localized as a whole. For example, the blog plugin uses an ",(0,i.jsx)(n.a,{href:"/docs/blog#global-authors",children:(0,i.jsx)(n.code,{children:"authors.yml"})})," file that can be translated by creating a copy under ",(0,i.jsx)(n.code,{children:"i18n/[locale]/docusaurus-plugin-content-blog/authors.yml"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,i.jsx)(n.p,{children:"The translation files should be created at the correct filesystem location."}),"\n",(0,i.jsxs)(n.p,{children:["Each locale and plugin has its own ",(0,i.jsx)(n.code,{children:"i18n"})," subfolder:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]/...\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["For multi-instance plugins, the path is ",(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]-[pluginId]/..."}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"Translating a very simple Docusaurus site in French would lead to the following tree:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"website/i18n\n\u2514\u2500\u2500 fr\n \u251c\u2500\u2500 code.json # Any text label present in the React code\n \u2502 # Includes text labels from the themes' code\n \u251c\u2500\u2500 docusaurus-plugin-content-blog # translation data the blog plugin needs\n \u2502 \u2514\u2500\u2500 2020-01-01-hello.md\n \u2502\n \u251c\u2500\u2500 docusaurus-plugin-content-docs # translation data the docs plugin needs\n \u2502 \u251c\u2500\u2500 current\n \u2502 \u2502 \u251c\u2500\u2500 doc1.md\n \u2502 \u2502 \u2514\u2500\u2500 doc2.mdx\n \u2502 \u2514\u2500\u2500 current.json\n \u2502\n \u2514\u2500\u2500 docusaurus-theme-classic # translation data the classic theme needs\n \u251c\u2500\u2500 footer.json # Text labels in your footer theme config\n \u2514\u2500\u2500 navbar.json # Text labels in your navbar theme config\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The JSON files are initialized with the ",(0,i.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,i.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI command. Each plugin sources its own translated content under the corresponding folder, while the ",(0,i.jsx)(n.code,{children:"code.json"})," file defines all text labels used in the React code."]}),"\n",(0,i.jsxs)(n.p,{children:["Each content plugin or theme is different, and ",(0,i.jsx)(n.strong,{children:"defines its own translation files location"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#i18n",children:"Docs i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#i18n",children:"Blog i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#i18n",children:"Pages i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/themes/configuration#i18n",children:"Themes i18n"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var i=s(27378);const o={},t=i.createContext(o);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90e57dc7.81ed473e.js b/assets/js/90e57dc7.739eeaaf.js similarity index 76% rename from assets/js/90e57dc7.81ed473e.js rename to assets/js/90e57dc7.739eeaaf.js index 436e957f2fe8..44c1a4616967 100644 --- a/assets/js/90e57dc7.81ed473e.js +++ b/assets/js/90e57dc7.739eeaaf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4420],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",i(function(e){for(var t=1;t{n.d(t,{Z:()=>se});var r=n(24246),o=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function s(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),i=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children);var s;const l=null!==(s=e.title)&&void 0!==s?s:t;return c(function(e){for(var t=1;t(0,r.jsx)(w,G({title:"secondary"},e)),important:e=>(0,r.jsx)(M,G({title:"important"},e)),success:e=>(0,r.jsx)(Z,G({title:"success"},e)),caution:function(e){return(0,r.jsx)(O,W(function(e){for(var t=1;t{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>p});var r=n(24246),o=n(71670),i=n(77773),c=n(35434);const s={},l="Admonitions tests",a={id:"tests/admonitions",title:"Admonitions tests",description:"Empty content",source:"@site/_dogfooding/_docs tests/tests/admonitions.mdx",sourceDirName:"tests",slug:"/tests/admonitions",permalink:"/tests/docs/tests/admonitions",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Case-Sensitive doc",permalink:"/tests/docs/tests/Case-Sentitive-Doc"},next:{title:"\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},u={},p=[{value:"Empty content",id:"empty-content",level:2},{value:"Empty fragment content",id:"empty-fragment-content",level:2},{value:"Large font icon",id:"large-font-icon",level:2},{value:"Large svg icon",id:"large-svg-icon",level:2},{value:"Indented admonitions",id:"indented-admonitions",level:2},{value:"Quoted admonitions",id:"quoted-admonitions",level:2},{value:"Official admonitions",id:"official-admonitions",level:2},{value:"Legacy admonitions",id:"legacy-admonitions",level:2}];function f(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",span:"span",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"admonitions-tests",children:"Admonitions tests"})}),"\n",(0,r.jsx)(t.h2,{id:"empty-content",children:"Empty content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note"}),"\n",(0,r.jsx)(t.h2,{id:"empty-fragment-content",children:"Empty fragment content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note",children:(0,r.jsx)(r.Fragment,{})}),"\n",(0,r.jsx)(t.h2,{id:"large-font-icon",children:"Large font icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(t.span,{style:{fontSize:60},children:"\ud83d\udca1"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(t.span,{style:{fontSize:40},children:"\u2139\ufe0f"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"large-svg-icon",children:"Large svg icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(c.Z,{style:{width:60,height:60}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(c.Z,{style:{width:40,height:40}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"indented-admonitions",children:"Indented admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["See admonition title v2 compat syntax bug: ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9507",children:"https://github.com/facebook/docusaurus/issues/9507"})]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Item 1"}),"\n",(0,r.jsx)(t.admonition,{title:"Important Considerations",type:"info",children:(0,r.jsx)(t.p,{children:"For better experience, try to keep the upgrade experience smooth."})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Scale-up cluster"})}),"\n",(0,r.jsx)(t.admonition,{title:"Warning",type:"caution",children:(0,r.jsx)(t.p,{children:"Scaling up a cluster may cause several minutes of downtime. Please exercise caution."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"quoted-admonitions",children:"Quoted admonitions"}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"official-admonitions",children:"Official admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["Admonitions that are ",(0,r.jsx)(t.a,{href:"/docs/markdown-features/admonitions",children:"officially documented"})]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:"note"})}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"info"})}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"tip"})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsx)(t.p,{children:"warning"})}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"danger"})}),"\n",(0,r.jsx)(t.h2,{id:"legacy-admonitions",children:"Legacy admonitions"}),"\n",(0,r.jsx)(t.admonition,{type:"secondary",children:(0,r.jsx)(t.p,{children:"secondary"})}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsx)(t.p,{children:"important"})}),"\n",(0,r.jsx)(t.admonition,{type:"success",children:(0,r.jsx)(t.p,{children:"success"})}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"caution"})})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}d.displayName="MDXContent(_dogfooding/_docs tests/tests/admonitions.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>c});var r=n(27378);const o={},i=r.createContext(o);function c(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4420],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",i(function(e){for(var t=1;t{n.d(t,{Z:()=>se});var r=n(24246),o=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function s(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),i=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children);var s;const l=null!==(s=e.title)&&void 0!==s?s:t;return c(function(e){for(var t=1;t(0,r.jsx)(w,G({title:"secondary"},e)),important:e=>(0,r.jsx)(M,G({title:"important"},e)),success:e=>(0,r.jsx)(Z,G({title:"success"},e)),caution:function(e){return(0,r.jsx)(O,W(function(e){for(var t=1;t{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>p});var r=n(24246),o=n(71670),i=n(77773),c=n(35434);const s={},l="Admonitions tests",a={id:"tests/admonitions",title:"Admonitions tests",description:"Empty content",source:"@site/_dogfooding/_docs tests/tests/admonitions.mdx",sourceDirName:"tests",slug:"/tests/admonitions",permalink:"/tests/docs/tests/admonitions",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Case-Sensitive doc",permalink:"/tests/docs/tests/Case-Sentitive-Doc"},next:{title:"\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},u={},p=[{value:"Empty content",id:"empty-content",level:2},{value:"Empty fragment content",id:"empty-fragment-content",level:2},{value:"Large font icon",id:"large-font-icon",level:2},{value:"Large svg icon",id:"large-svg-icon",level:2},{value:"Indented admonitions",id:"indented-admonitions",level:2},{value:"Quoted admonitions",id:"quoted-admonitions",level:2},{value:"Official admonitions",id:"official-admonitions",level:2},{value:"Legacy admonitions",id:"legacy-admonitions",level:2}];function f(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",span:"span",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"admonitions-tests",children:"Admonitions tests"})}),"\n",(0,r.jsx)(t.h2,{id:"empty-content",children:"Empty content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note"}),"\n",(0,r.jsx)(t.h2,{id:"empty-fragment-content",children:"Empty fragment content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note",children:(0,r.jsx)(r.Fragment,{})}),"\n",(0,r.jsx)(t.h2,{id:"large-font-icon",children:"Large font icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(t.span,{style:{fontSize:60},children:"\ud83d\udca1"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(t.span,{style:{fontSize:40},children:"\u2139\ufe0f"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"large-svg-icon",children:"Large svg icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(c.Z,{style:{width:60,height:60}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(c.Z,{style:{width:40,height:40}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"indented-admonitions",children:"Indented admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["See admonition title v2 compat syntax bug: ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9507",children:"https://github.com/facebook/docusaurus/issues/9507"})]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Item 1"}),"\n",(0,r.jsx)(t.admonition,{title:"Important Considerations",type:"info",children:(0,r.jsx)(t.p,{children:"For better experience, try to keep the upgrade experience smooth."})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Scale-up cluster"})}),"\n",(0,r.jsx)(t.admonition,{title:"Warning",type:"caution",children:(0,r.jsx)(t.p,{children:"Scaling up a cluster may cause several minutes of downtime. Please exercise caution."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"quoted-admonitions",children:"Quoted admonitions"}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"official-admonitions",children:"Official admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["Admonitions that are ",(0,r.jsx)(t.a,{href:"/docs/markdown-features/admonitions",children:"officially documented"})]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:"note"})}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"info"})}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"tip"})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsx)(t.p,{children:"warning"})}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"danger"})}),"\n",(0,r.jsx)(t.h2,{id:"legacy-admonitions",children:"Legacy admonitions"}),"\n",(0,r.jsx)(t.admonition,{type:"secondary",children:(0,r.jsx)(t.p,{children:"secondary"})}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsx)(t.p,{children:"important"})}),"\n",(0,r.jsx)(t.admonition,{type:"success",children:(0,r.jsx)(t.p,{children:"success"})}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"caution"})})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}d.displayName="MDXContent(_dogfooding/_docs tests/tests/admonitions.mdx)"},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>c});var r=n(27378);const o={},i=r.createContext(o);function c(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91b203fb.02f34cb4.js b/assets/js/91b203fb.9bde2e6b.js similarity index 71% rename from assets/js/91b203fb.02f34cb4.js rename to assets/js/91b203fb.9bde2e6b.js index 2a657350a870..fd58620a297e 100644 --- a/assets/js/91b203fb.02f34cb4.js +++ b/assets/js/91b203fb.9bde2e6b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9900],{24239:(e,r,n)=>{n.d(r,{Z:()=>v});var t=n(24246),o=(n(27378),n(40624)),a=n(97298),s=n(41428),l=n(7812),c=n(64149),i=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function p({href:e,children:r}){return(0,t.jsx)(s.Z,{href:e,className:(0,o.Z)("card padding--lg",d.cardContainer),children:r})}function h({href:e,icon:r,title:n,description:a}){return(0,t.jsxs)(p,{href:e,children:[(0,t.jsxs)(u.Z,{as:"h2",className:(0,o.Z)("text--truncate",d.cardTitle),title:n,children:[r," ",n]}),a&&(0,t.jsx)("p",{className:(0,o.Z)("text--truncate",d.cardDescription),title:a,children:a})]})}function m({item:e}){const r=(0,a.LM)(e),n=function(){const{selectMessage:e}=(0,l.c)();return r=>e(r,(0,i.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r}))}();return r?(0,t.jsx)(h,{href:r,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(o=e.description)&&void 0!==o?o:n(e.items.length)}):null;var o}function f({item:e}){const r=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const o=(0,a.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,t.jsx)(h,{href:e.href,icon:r,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==o?void 0:o.description})}function g({item:e}){switch(e.type){case"link":return(0,t.jsx)(f,{item:e});case"category":return(0,t.jsx)(m,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function j({className:e}){const r=(0,a.jA)();return(0,t.jsx)(v,{items:r.items,className:e})}function v(e){const{items:r,className:n}=e;if(!r)return(0,t.jsx)(j,function(e){for(var r=1;r(0,t.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,t.jsx)(g,{item:e})},r)))})}},61132:(e,r,n)=>{n.d(r,{Z:()=>s});var t=n(24246),o=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:r,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>N});var t=n(24246),o=n(27378),a=n(40624),s=n(75527),l=n(3620),c=n(44479),i=n(62821),u=n(52196),d=n(53589);function p(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function h(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function m(e){var r,n;return null!==(n=null===(r=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:r,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=r?r:function(e){return m(e).map((({props:{value:e,label:r,attributes:n,default:t}})=>({value:e,label:r,attributes:n,default:t})))}(n);return function(e){const r=(0,u.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,n])}function g({value:e,tabValues:r}){return r.some((r=>r.value===e))}function b({queryString:e=!1,groupId:r}){const n=(0,l.k6)(),t=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),a=(0,i._X)(t),s=(0,o.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace(h(function(e){for(var r=1;rfunction({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!g({value:e,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:a}))),[i,u]=b({queryString:n,groupId:t}),[p,h]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,d.Nk)(r);return[n,(0,o.useCallback)((e=>{r&&t.set(e)}),[r,t])]}({groupId:t}),m=(()=>{const e=null!=i?i:p;return g({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),h(e)}),[u,h,a]),tabValues:a}}var v=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function w(e){for(var r=1;r{const r=e.currentTarget,t=c.indexOf(r),a=l[t].value;a!==n&&(i(r),o(a))},d=e=>{let r=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var n;r=null!==(n=c[t])&&void 0!==n?n:c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;var t;r=null!==(t=c[n])&&void 0!==t?t:c[c.length-1];break}}null==r||r.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},e),children:l.map((({value:e,label:r,attributes:o})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",y.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function P({lazy:e,children:r,selectedValue:n}){const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:s.map(((e,r)=>(0,o.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function D(e){const r=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},r,e)),(0,t.jsx)(P,w({},r,e))]})}function N(e){const r=(0,v.Z)();return(0,t.jsx)(D,O(w({},e),{children:m(e.children)}),String(r))}},7812:(e,r,n)=>{n.d(r,{c:()=>i});var t=n(27378),o=n(4423);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((r=>e.includes(r)))}const l={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,t.useMemo)((()=>{try{return function(e){const r=new Intl.PluralRules(e);return{locale:e,pluralForms:s(r.resolvedOptions().pluralCategories),select:e=>r.select(e)}}(e)}catch(r){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${r.message}\n`),l}}),[e])}function i(){const e=c();return{selectMessage:(r,n)=>function(e,r,n){const t=e.split("|");if(1===t.length)return t[0];t.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const o=n.select(r),a=n.pluralForms.indexOf(o);return t[Math.min(a,t.length-1)]}(n,r,e)}}},47577:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var t=n(24246),o=n(71670),a=n(97555),s=n(61132),l=n(24239);const c={slug:"/migration"},i="Upgrading Docusaurus",u={id:"migration/index",title:"Upgrading Docusaurus",description:"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.",source:"@site/docs/migration/index.mdx",sourceDirName:"migration",slug:"/migration",permalink:"/docs/migration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{slug:"/migration"},sidebar:"docs",previous:{title:"Client architecture",permalink:"/docs/advanced/client"},next:{title:"To Docusaurus v3",permalink:"/docs/migration/v3"}},d={},p=[{value:"Troubleshooting upgrades",id:"troubleshooting-upgrades",level:2},{value:"Run the clear command",id:"run-the-clear-command",level:3},{value:"Remove node_modules and your lock file(s)",id:"remove-node_modules-and-your-lock-files",level:3}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"upgrading-docusaurus",children:"Upgrading Docusaurus"})}),"\n",(0,t.jsxs)(r.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(r.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:(0,t.jsx)(r.strong,{children:"Semantic Versioning"})}),"."]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"Breaking changes"})," are only released on major version upgrades, and thoroughly documented in the following upgrade guides."]}),"\n","\n",(0,t.jsx)(l.Z,{}),"\n",(0,t.jsx)(r.h2,{id:"troubleshooting-upgrades",children:"Troubleshooting upgrades"}),"\n",(0,t.jsx)(r.p,{children:"When upgrading Docusaurus you may experience issues caused by mismatching cached dependencies - there are a few troubleshooting steps you should perform to resolve these common issues before reporting a bug or seeking support."}),"\n",(0,t.jsxs)(r.h3,{id:"run-the-clear-command",children:["Run the ",(0,t.jsx)(r.code,{children:"clear"})," command"]}),"\n",(0,t.jsx)(r.p,{children:"This CLI command is used to clear a Docusaurus site's generated assets, caches and build artifacts."}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm run clear\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn clear\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm run clear\n"})})})]}),"\n",(0,t.jsxs)(r.h3,{id:"remove-node_modules-and-your-lock-files",children:["Remove ",(0,t.jsx)(r.code,{children:"node_modules"})," and your lock file(s)"]}),"\n",(0,t.jsxs)(r.p,{children:["Remove the ",(0,t.jsx)(r.code,{children:"node_modules"})," folder and your package manager's lock file using the following:"]}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(s.Z,{label:"Bash",value:"bash",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"rm -rf node_modules yarn.lock package-lock.json\n"})})}),(0,t.jsx)(s.Z,{label:"PowerShell",value:"powershell",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-powershell",children:"@('node_modules','yarn.lock','package-lock.json') | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue\n"})})})]}),"\n",(0,t.jsxs)(r.p,{children:["Then reinstall packages and regenerate the ",(0,t.jsx)(r.code,{children:"lock"})," file using:"]}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm install\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn install\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm install\n"})})})]})]})}function m(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>l,a:()=>s});var t=n(27378);const o={},a=t.createContext(o);function s(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9900],{24239:(e,r,n)=>{n.d(r,{Z:()=>v});var t=n(24246),o=(n(27378),n(40624)),a=n(97298),s=n(41428),l=n(7812),c=n(64149),i=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function p({href:e,children:r}){return(0,t.jsx)(s.Z,{href:e,className:(0,o.Z)("card padding--lg",d.cardContainer),children:r})}function h({href:e,icon:r,title:n,description:a}){return(0,t.jsxs)(p,{href:e,children:[(0,t.jsxs)(u.Z,{as:"h2",className:(0,o.Z)("text--truncate",d.cardTitle),title:n,children:[r," ",n]}),a&&(0,t.jsx)("p",{className:(0,o.Z)("text--truncate",d.cardDescription),title:a,children:a})]})}function m({item:e}){const r=(0,a.LM)(e),n=function(){const{selectMessage:e}=(0,l.c)();return r=>e(r,(0,i.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r}))}();return r?(0,t.jsx)(h,{href:r,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(o=e.description)&&void 0!==o?o:n(e.items.length)}):null;var o}function f({item:e}){const r=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const o=(0,a.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,t.jsx)(h,{href:e.href,icon:r,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==o?void 0:o.description})}function g({item:e}){switch(e.type){case"link":return(0,t.jsx)(f,{item:e});case"category":return(0,t.jsx)(m,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function j({className:e}){const r=(0,a.jA)();return(0,t.jsx)(v,{items:r.items,className:e})}function v(e){const{items:r,className:n}=e;if(!r)return(0,t.jsx)(j,function(e){for(var r=1;r(0,t.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,t.jsx)(g,{item:e})},r)))})}},61132:(e,r,n)=>{n.d(r,{Z:()=>s});var t=n(24246),o=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:r,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>N});var t=n(24246),o=n(27378),a=n(40624),s=n(75527),l=n(3620),c=n(44479),i=n(62821),u=n(52196),d=n(53589);function p(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function h(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function m(e){var r,n;return null!==(n=null===(r=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:r,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=r?r:function(e){return m(e).map((({props:{value:e,label:r,attributes:n,default:t}})=>({value:e,label:r,attributes:n,default:t})))}(n);return function(e){const r=(0,u.lx)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,n])}function g({value:e,tabValues:r}){return r.some((r=>r.value===e))}function b({queryString:e=!1,groupId:r}){const n=(0,l.k6)(),t=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),a=(0,i._X)(t),s=(0,o.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace(h(function(e){for(var r=1;rfunction({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!g({value:e,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:a}))),[i,u]=b({queryString:n,groupId:t}),[p,h]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,d.Nk)(r);return[n,(0,o.useCallback)((e=>{r&&t.set(e)}),[r,t])]}({groupId:t}),m=(()=>{const e=null!=i?i:p;return g({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),h(e)}),[u,h,a]),tabValues:a}}var v=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function w(e){for(var r=1;r{const r=e.currentTarget,t=c.indexOf(r),a=l[t].value;a!==n&&(i(r),o(a))},d=e=>{let r=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var n;r=null!==(n=c[t])&&void 0!==n?n:c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;var t;r=null!==(t=c[n])&&void 0!==t?t:c[c.length-1];break}}null==r||r.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},e),children:l.map((({value:e,label:r,attributes:o})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",y.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function P({lazy:e,children:r,selectedValue:n}){const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:s.map(((e,r)=>(0,o.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function D(e){const r=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},r,e)),(0,t.jsx)(P,w({},r,e))]})}function N(e){const r=(0,v.Z)();return(0,t.jsx)(D,O(w({},e),{children:m(e.children)}),String(r))}},7812:(e,r,n)=>{n.d(r,{c:()=>i});var t=n(27378),o=n(4423);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((r=>e.includes(r)))}const l={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,t.useMemo)((()=>{try{return function(e){const r=new Intl.PluralRules(e);return{locale:e,pluralForms:s(r.resolvedOptions().pluralCategories),select:e=>r.select(e)}}(e)}catch(r){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${r.message}\n`),l}}),[e])}function i(){const e=c();return{selectMessage:(r,n)=>function(e,r,n){const t=e.split("|");if(1===t.length)return t[0];t.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const o=n.select(r),a=n.pluralForms.indexOf(o);return t[Math.min(a,t.length-1)]}(n,r,e)}}},47577:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var t=n(24246),o=n(71670),a=n(97555),s=n(61132),l=n(24239);const c={slug:"/migration"},i="Upgrading Docusaurus",u={id:"migration/index",title:"Upgrading Docusaurus",description:"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.",source:"@site/docs/migration/index.mdx",sourceDirName:"migration",slug:"/migration",permalink:"/docs/migration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,frontMatter:{slug:"/migration"},sidebar:"docs",previous:{title:"Client architecture",permalink:"/docs/advanced/client"},next:{title:"To Docusaurus v3",permalink:"/docs/migration/v3"}},d={},p=[{value:"Troubleshooting upgrades",id:"troubleshooting-upgrades",level:2},{value:"Run the clear command",id:"run-the-clear-command",level:3},{value:"Remove node_modules and your lock file(s)",id:"remove-node_modules-and-your-lock-files",level:3}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"upgrading-docusaurus",children:"Upgrading Docusaurus"})}),"\n",(0,t.jsxs)(r.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(r.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:(0,t.jsx)(r.strong,{children:"Semantic Versioning"})}),"."]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"Breaking changes"})," are only released on major version upgrades, and thoroughly documented in the following upgrade guides."]}),"\n","\n",(0,t.jsx)(l.Z,{}),"\n",(0,t.jsx)(r.h2,{id:"troubleshooting-upgrades",children:"Troubleshooting upgrades"}),"\n",(0,t.jsx)(r.p,{children:"When upgrading Docusaurus you may experience issues caused by mismatching cached dependencies - there are a few troubleshooting steps you should perform to resolve these common issues before reporting a bug or seeking support."}),"\n",(0,t.jsxs)(r.h3,{id:"run-the-clear-command",children:["Run the ",(0,t.jsx)(r.code,{children:"clear"})," command"]}),"\n",(0,t.jsx)(r.p,{children:"This CLI command is used to clear a Docusaurus site's generated assets, caches and build artifacts."}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm run clear\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn clear\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm run clear\n"})})})]}),"\n",(0,t.jsxs)(r.h3,{id:"remove-node_modules-and-your-lock-files",children:["Remove ",(0,t.jsx)(r.code,{children:"node_modules"})," and your lock file(s)"]}),"\n",(0,t.jsxs)(r.p,{children:["Remove the ",(0,t.jsx)(r.code,{children:"node_modules"})," folder and your package manager's lock file using the following:"]}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(s.Z,{label:"Bash",value:"bash",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"rm -rf node_modules yarn.lock package-lock.json\n"})})}),(0,t.jsx)(s.Z,{label:"PowerShell",value:"powershell",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-powershell",children:"@('node_modules','yarn.lock','package-lock.json') | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue\n"})})})]}),"\n",(0,t.jsxs)(r.p,{children:["Then reinstall packages and regenerate the ",(0,t.jsx)(r.code,{children:"lock"})," file using:"]}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm install\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn install\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm install\n"})})})]})]})}function m(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>l,a:()=>s});var t=n(27378);const o={},a=t.createContext(o);function s(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91cd22f1.82384163.js b/assets/js/91cd22f1.82384163.js deleted file mode 100644 index f9e6a9ae1afc..000000000000 --- a/assets/js/91cd22f1.82384163.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90916],{78889:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var i=n(24246),t=n(71670);const a={sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},r="Docusaurus themes",o={id:"api/themes/themes-overview",title:"Docusaurus themes",description:"We provide official Docusaurus themes.",source:"@site/docs/api/themes/overview.mdx",sourceDirName:"api/themes",slug:"/api/themes",permalink:"/docs/api/themes",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,sidebarPosition:0,frontMatter:{sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},next:{title:"Configuration",permalink:"/docs/api/themes/configuration"}},c={},h=[{value:"Main themes",id:"main-themes",level:2},{value:"Enhancement themes",id:"enhancement-themes",level:2}];function l(e){const s={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"docusaurus-themes",children:"Docusaurus themes"})}),"\n",(0,i.jsx)(s.p,{children:"We provide official Docusaurus themes."}),"\n",(0,i.jsx)(s.h2,{id:"main-themes",children:"Main themes"}),"\n",(0,i.jsxs)(s.p,{children:["The main themes implement the user interface for the ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"docs"}),", ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog"})," and ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages",children:"pages"})," plugins."]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:"@docusaurus/theme-classic"})}),"\n",(0,i.jsx)(s.li,{children:"\ud83d\udea7 other themes are planned"}),"\n"]}),"\n",(0,i.jsxs)(s.admonition,{type:"warning",children:[(0,i.jsx)(s.p,{children:"The goal is to have all themes share the exact same features, user-experience and configuration."}),(0,i.jsx)(s.p,{children:"Only the UI design and underlying styling framework should change, and you should be able to change theme easily."}),(0,i.jsx)(s.p,{children:"We are not there yet: only the classic theme is production ready."})]}),"\n",(0,i.jsx)(s.h2,{id:"enhancement-themes",children:"Enhancement themes"}),"\n",(0,i.jsx)(s.p,{children:"These themes will enhance the existing main themes with additional user-interface related features."}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-live-codeblock",children:"@docusaurus/theme-live-codeblock"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-search-algolia",children:"@docusaurus/theme-search-algolia"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>r});var i=n(27378);const t={},a=i.createContext(t);function r(e){const s=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91cd22f1.8e6d00c5.js b/assets/js/91cd22f1.8e6d00c5.js new file mode 100644 index 000000000000..41298291ad8b --- /dev/null +++ b/assets/js/91cd22f1.8e6d00c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90916],{78889:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var i=n(24246),t=n(71670);const a={sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},r="Docusaurus themes",o={id:"api/themes/themes-overview",title:"Docusaurus themes",description:"We provide official Docusaurus themes.",source:"@site/docs/api/themes/overview.mdx",sourceDirName:"api/themes",slug:"/api/themes",permalink:"/docs/api/themes",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx",tags:[],version:"current",lastUpdatedBy:"Mohammad Bagher Abiyat",lastUpdatedAt:1723131342e3,sidebarPosition:0,frontMatter:{sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},next:{title:"Configuration",permalink:"/docs/api/themes/configuration"}},c={},h=[{value:"Main themes",id:"main-themes",level:2},{value:"Enhancement themes",id:"enhancement-themes",level:2}];function l(e){const s={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"docusaurus-themes",children:"Docusaurus themes"})}),"\n",(0,i.jsx)(s.p,{children:"We provide official Docusaurus themes."}),"\n",(0,i.jsx)(s.h2,{id:"main-themes",children:"Main themes"}),"\n",(0,i.jsxs)(s.p,{children:["The main themes implement the user interface for the ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"docs"}),", ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog"})," and ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages",children:"pages"})," plugins."]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:"@docusaurus/theme-classic"})}),"\n",(0,i.jsx)(s.li,{children:"\ud83d\udea7 other themes are planned"}),"\n"]}),"\n",(0,i.jsxs)(s.admonition,{type:"warning",children:[(0,i.jsx)(s.p,{children:"The goal is to have all themes share the exact same features, user-experience and configuration."}),(0,i.jsx)(s.p,{children:"Only the UI design and underlying styling framework should change, and you should be able to change theme easily."}),(0,i.jsx)(s.p,{children:"We are not there yet: only the classic theme is production ready."})]}),"\n",(0,i.jsx)(s.h2,{id:"enhancement-themes",children:"Enhancement themes"}),"\n",(0,i.jsx)(s.p,{children:"These themes will enhance the existing main themes with additional user-interface related features."}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-live-codeblock",children:"@docusaurus/theme-live-codeblock"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-search-algolia",children:"@docusaurus/theme-search-algolia"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>r});var i=n(27378);const t={},a=i.createContext(t);function r(e){const s=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/945e072c.cbb98227.js b/assets/js/945e072c.cbb98227.js deleted file mode 100644 index 5eb19386399b..000000000000 --- a/assets/js/945e072c.cbb98227.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81187],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var s=t(24246),o=(t(27378),t(40624));const r={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>O});var s=t(24246),o=t(27378),r=t(40624),i=t(75527),a=t(3620),l=t(44479),c=t(62821),h=t(52196),d=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function j(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:s}})=>({value:e,label:n,attributes:t,default:s})))}(t);return function(e){const n=(0,h.lx)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function x({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),r=(0,c._X)(s),i=(0,o.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace(p(function(e){for(var n=1;nfunction({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const s=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:r}))),[c,h]=x({queryString:t,groupId:s}),[u,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,s]=(0,d.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:s}),m=(()=>{const e=null!=c?c:u;return g({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{m&&a(m)}),[m]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var w=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function b(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function z(e){for(var n=1;n{const n=e.currentTarget,s=l.indexOf(n),r=a[s].value;r!==t&&(c(n),o(r))},d=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[s])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var s;n=null!==(s=l[t])&&void 0!==s?s:l[l.length-1];break}}null==n||n.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:o})=>(0,s.jsx)("li",v(z({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:h},o),{className:(0,r.Z)("tabs__item",y.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function S({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function I(e){const n=f(e);return(0,s.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,s.jsx)(k,z({},n,e)),(0,s.jsx)(S,z({},n,e))]})}function O(e){const n=(0,w.Z)();return(0,s.jsx)(I,v(z({},e),{children:m(e.children)}),String(n))}},30141:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var s=t(24246),o=t(71670),r=t(97555),i=t(61132);const a={description:"Customize your site's appearance through creating your own theme components"},l="Swizzling",c={id:"swizzling",title:"Swizzling",description:"Customize your site's appearance through creating your own theme components",source:"@site/docs/swizzling.mdx",sourceDirName:".",slug:"/swizzling",permalink:"/docs/swizzling",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/swizzling.mdx",tags:[],version:"current",lastUpdatedBy:"Ashiq Firoz",lastUpdatedAt:1723124811e3,frontMatter:{description:"Customize your site's appearance through creating your own theme components"},sidebar:"docs",previous:{title:"Styling and Layout",permalink:"/docs/styling-layout"},next:{title:"Static Assets",permalink:"/docs/static-assets"}},h={},d=[{value:"Swizzling Process",id:"swizzling-process",level:2},{value:"Overview",id:"overview",level:3},{value:"Ejecting",id:"ejecting",level:3},{value:"Wrapping",id:"wrapping",level:3},{value:"What is safe to swizzle?",id:"what-is-safe-to-swizzle",level:2},{value:"Which component should I swizzle?",id:"which-component-should-i-swizzle",level:2},{value:"Do I need to swizzle?",id:"do-i-need-to-swizzle",level:2},{value:"Wrapping your site with <Root>",id:"wrapper-your-site-with-root",level:2}];function u(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"swizzling",children:"Swizzling"})}),"\n",(0,s.jsx)(n.p,{children:"In this section, we will introduce how customization of layout is done in Docusaurus."}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"D\xe9j\xe0 vu...?"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This section is similar to ",(0,s.jsx)(n.a,{href:"/docs/styling-layout",children:"Styling and Layout"}),", but this time, we will customize React components themselves, rather than what they look like. We will talk about a central concept in Docusaurus: ",(0,s.jsx)(n.strong,{children:"swizzling"}),", which allows ",(0,s.jsx)(n.strong,{children:"deeper site customizations"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In practice, swizzling permits to ",(0,s.jsx)(n.strong,{children:"swap a theme component with your own implementation"}),", and it comes in 2 patterns:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#ejecting",children:(0,s.jsx)(n.strong,{children:"Ejecting"})}),": creates a ",(0,s.jsx)(n.strong,{children:"copy"})," of the original theme component, which you can fully ",(0,s.jsx)(n.strong,{children:"customize"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#wrapping",children:(0,s.jsx)(n.strong,{children:"Wrapping"})}),": creates a ",(0,s.jsx)(n.strong,{children:"wrapper"})," around the original theme component, which you can ",(0,s.jsx)(n.strong,{children:"enhance"})]}),"\n"]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:"Why is it called swizzling?"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"The name comes from Objective-C and Swift-UI"}),": ",(0,s.jsx)(n.a,{href:"https://pspdfkit.com/blog/2019/swizzling-in-swift/",children:"method swizzling"})," is the process of changing the implementation of an existing selector (method)."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"For Docusaurus, component swizzling means providing an alternative component that takes precedence over the component provided by the theme."})}),(0,s.jsxs)(n.p,{children:["You can think of it as ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Monkey_patch",children:"Monkey Patching"})," for React components, enabling you to override the default implementation. Gatsby has a similar concept called ",(0,s.jsx)(n.a,{href:"https://www.gatsbyjs.com/docs/how-to/plugins-and-themes/shadowing/",children:"theme shadowing"}),"."]}),(0,s.jsxs)(n.p,{children:["To gain a deeper understanding of this, you have to understand ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#theme-aliases",children:"how theme components are resolved"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"swizzling-process",children:"Swizzling Process"}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus provides a convenient ",(0,s.jsx)(n.strong,{children:"interactive CLI"})," to swizzle components. You generally only need to remember the following command:"]}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["It will generate a new component in your ",(0,s.jsx)(n.code,{children:"src/theme"})," directory, which should look like this example:"]}),"\n",(0,s.jsxs)(r.Z,{children:[(0,s.jsx)(i.Z,{value:"Ejecting",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/SomeComponent.js"',children:"import React from 'react';\n\nexport default function SomeComponent(props) {\n // You can fully customize this implementation\n // including changing the JSX, CSS and React hooks\n return (\n
\n

Some Component

\n

Some component implementation details

\n
\n );\n}\n"})})}),(0,s.jsx)(i.Z,{value:"Wrapping",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/SomeComponent.js"',children:"import React from 'react';\nimport SomeComponent from '@theme-original/SomeComponent';\n\nexport default function SomeComponentWrapper(props) {\n // You can enhance the original component,\n // including adding extra props or JSX elements around it\n return (\n <>\n \n \n );\n}\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"To get an overview of all the themes and components available to swizzle, run:"}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle -- --list\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle --list\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle --list\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.code,{children:"--help"})," to see all available CLI options, or refer to the reference ",(0,s.jsx)(n.a,{href:"/docs/cli#docusaurus-swizzle",children:"swizzle CLI documentation"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["After swizzling a component, ",(0,s.jsx)(n.strong,{children:"restart your dev server"})," in order for Docusaurus to know about the new component."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Prefer staying on the safe side",type:"warning",children:(0,s.jsxs)(n.p,{children:["Be sure to understand ",(0,s.jsxs)(n.a,{href:"#what-is-safe-to-swizzle",children:["which components are ",(0,s.jsx)(n.strong,{children:"safe to swizzle"})]}),". Some components are ",(0,s.jsx)(n.strong,{children:"internal implementation details"})," of a theme."]})}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"docusaurus swizzle"})," is only an automated way to help you swizzle the component. You can also create the ",(0,s.jsx)(n.code,{children:"src/theme/SomeComponent.js"})," file manually, and Docusaurus will ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#theme-aliases",children:"resolve it"}),". There's no internal magic behind this command!"]})}),"\n",(0,s.jsx)(n.h3,{id:"ejecting",children:"Ejecting"}),"\n",(0,s.jsxs)(n.p,{children:["Ejecting a theme component is the process of ",(0,s.jsx)(n.strong,{children:"creating a copy"})," of the original theme component, which you can ",(0,s.jsx)(n.strong,{children:"fully customize and override"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To eject a theme component, use the swizzle CLI interactively, or with the ",(0,s.jsx)(n.code,{children:"--eject"})," option:"]}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle [theme name] [component name] -- --eject\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle [theme name] [component name] --eject\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle [theme name] [component name] --eject\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"An example:"}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic Footer -- --eject\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic Footer --eject\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic Footer --eject\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["This will copy the current ",(0,s.jsx)(n.code,{children:"